From 46651ce6fe013220ed397add242004d764fc0153 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 14:15:05 +0200 Subject: Adding upstream version 14.5. Signed-off-by: Daniel Baumann --- src/interfaces/ecpg/preproc/.gitignore | 8 + src/interfaces/ecpg/preproc/Makefile | 102 + src/interfaces/ecpg/preproc/README.parser | 42 + src/interfaces/ecpg/preproc/c_keywords.c | 66 + src/interfaces/ecpg/preproc/c_kwlist.h | 52 + src/interfaces/ecpg/preproc/c_kwlist_d.h | 118 + src/interfaces/ecpg/preproc/check_rules.pl | 191 + src/interfaces/ecpg/preproc/descriptor.c | 367 + src/interfaces/ecpg/preproc/ecpg.addons | 590 + src/interfaces/ecpg/preproc/ecpg.c | 504 + src/interfaces/ecpg/preproc/ecpg.header | 626 + src/interfaces/ecpg/preproc/ecpg.tokens | 26 + src/interfaces/ecpg/preproc/ecpg.trailer | 1931 + src/interfaces/ecpg/preproc/ecpg.type | 146 + src/interfaces/ecpg/preproc/ecpg_keywords.c | 54 + src/interfaces/ecpg/preproc/ecpg_kwlist.h | 67 + src/interfaces/ecpg/preproc/ecpg_kwlist_d.h | 152 + src/interfaces/ecpg/preproc/keywords.c | 38 + src/interfaces/ecpg/preproc/nls.mk | 6 + src/interfaces/ecpg/preproc/output.c | 251 + src/interfaces/ecpg/preproc/parse.pl | 698 + src/interfaces/ecpg/preproc/parser.c | 231 + src/interfaces/ecpg/preproc/pgc.c | 5005 ++ src/interfaces/ecpg/preproc/pgc.l | 1740 + src/interfaces/ecpg/preproc/po/cs.po | 695 + src/interfaces/ecpg/preproc/po/de.po | 700 + src/interfaces/ecpg/preproc/po/el.po | 700 + src/interfaces/ecpg/preproc/po/es.po | 706 + src/interfaces/ecpg/preproc/po/fr.po | 757 + src/interfaces/ecpg/preproc/po/it.po | 679 + src/interfaces/ecpg/preproc/po/ja.po | 701 + src/interfaces/ecpg/preproc/po/ko.po | 690 + src/interfaces/ecpg/preproc/po/pl.po | 674 + src/interfaces/ecpg/preproc/po/pt_BR.po | 653 + src/interfaces/ecpg/preproc/po/ru.po | 741 + src/interfaces/ecpg/preproc/po/sv.po | 699 + src/interfaces/ecpg/preproc/po/tr.po | 699 + src/interfaces/ecpg/preproc/po/uk.po | 683 + src/interfaces/ecpg/preproc/po/vi.po | 684 + src/interfaces/ecpg/preproc/po/zh_CN.po | 693 + src/interfaces/ecpg/preproc/po/zh_TW.po | 645 + src/interfaces/ecpg/preproc/preproc.c | 65497 +++++++++++++++++++++++++ src/interfaces/ecpg/preproc/preproc.h | 662 + src/interfaces/ecpg/preproc/preproc.y | 18828 +++++++ src/interfaces/ecpg/preproc/preproc_extern.h | 128 + src/interfaces/ecpg/preproc/type.c | 748 + src/interfaces/ecpg/preproc/type.h | 216 + src/interfaces/ecpg/preproc/variable.c | 625 + 48 files changed, 111514 insertions(+) create mode 100644 src/interfaces/ecpg/preproc/.gitignore create mode 100644 src/interfaces/ecpg/preproc/Makefile create mode 100644 src/interfaces/ecpg/preproc/README.parser create mode 100644 src/interfaces/ecpg/preproc/c_keywords.c create mode 100644 src/interfaces/ecpg/preproc/c_kwlist.h create mode 100644 src/interfaces/ecpg/preproc/c_kwlist_d.h create mode 100644 src/interfaces/ecpg/preproc/check_rules.pl create mode 100644 src/interfaces/ecpg/preproc/descriptor.c create mode 100644 src/interfaces/ecpg/preproc/ecpg.addons create mode 100644 src/interfaces/ecpg/preproc/ecpg.c create mode 100644 src/interfaces/ecpg/preproc/ecpg.header create mode 100644 src/interfaces/ecpg/preproc/ecpg.tokens create mode 100644 src/interfaces/ecpg/preproc/ecpg.trailer create mode 100644 src/interfaces/ecpg/preproc/ecpg.type create mode 100644 src/interfaces/ecpg/preproc/ecpg_keywords.c create mode 100644 src/interfaces/ecpg/preproc/ecpg_kwlist.h create mode 100644 src/interfaces/ecpg/preproc/ecpg_kwlist_d.h create mode 100644 src/interfaces/ecpg/preproc/keywords.c create mode 100644 src/interfaces/ecpg/preproc/nls.mk create mode 100644 src/interfaces/ecpg/preproc/output.c create mode 100644 src/interfaces/ecpg/preproc/parse.pl create mode 100644 src/interfaces/ecpg/preproc/parser.c create mode 100644 src/interfaces/ecpg/preproc/pgc.c create mode 100644 src/interfaces/ecpg/preproc/pgc.l create mode 100644 src/interfaces/ecpg/preproc/po/cs.po create mode 100644 src/interfaces/ecpg/preproc/po/de.po create mode 100644 src/interfaces/ecpg/preproc/po/el.po create mode 100644 src/interfaces/ecpg/preproc/po/es.po create mode 100644 src/interfaces/ecpg/preproc/po/fr.po create mode 100644 src/interfaces/ecpg/preproc/po/it.po create mode 100644 src/interfaces/ecpg/preproc/po/ja.po create mode 100644 src/interfaces/ecpg/preproc/po/ko.po create mode 100644 src/interfaces/ecpg/preproc/po/pl.po create mode 100644 src/interfaces/ecpg/preproc/po/pt_BR.po create mode 100644 src/interfaces/ecpg/preproc/po/ru.po create mode 100644 src/interfaces/ecpg/preproc/po/sv.po create mode 100644 src/interfaces/ecpg/preproc/po/tr.po create mode 100644 src/interfaces/ecpg/preproc/po/uk.po create mode 100644 src/interfaces/ecpg/preproc/po/vi.po create mode 100644 src/interfaces/ecpg/preproc/po/zh_CN.po create mode 100644 src/interfaces/ecpg/preproc/po/zh_TW.po create mode 100644 src/interfaces/ecpg/preproc/preproc.c create mode 100644 src/interfaces/ecpg/preproc/preproc.h create mode 100644 src/interfaces/ecpg/preproc/preproc.y create mode 100644 src/interfaces/ecpg/preproc/preproc_extern.h create mode 100644 src/interfaces/ecpg/preproc/type.c create mode 100644 src/interfaces/ecpg/preproc/type.h create mode 100644 src/interfaces/ecpg/preproc/variable.c (limited to 'src/interfaces/ecpg/preproc') diff --git a/src/interfaces/ecpg/preproc/.gitignore b/src/interfaces/ecpg/preproc/.gitignore new file mode 100644 index 0000000..958a826 --- /dev/null +++ b/src/interfaces/ecpg/preproc/.gitignore @@ -0,0 +1,8 @@ +/preproc.y +/preproc.c +/preproc.h +/pgc.c +/c_kwlist_d.h +/ecpg_kwlist_d.h +/typename.c +/ecpg diff --git a/src/interfaces/ecpg/preproc/Makefile b/src/interfaces/ecpg/preproc/Makefile new file mode 100644 index 0000000..29479f9 --- /dev/null +++ b/src/interfaces/ecpg/preproc/Makefile @@ -0,0 +1,102 @@ +#------------------------------------------------------------------------- +# +# Makefile for src/interfaces/ecpg/preproc +# +# Copyright (c) 1998-2021, PostgreSQL Global Development Group +# +# src/interfaces/ecpg/preproc/Makefile +# +#------------------------------------------------------------------------- + +PGFILEDESC = "ecpg - embedded SQL precompiler for C" +PGAPPICON=win32 + +subdir = src/interfaces/ecpg/preproc +top_builddir = ../../../.. +include $(top_builddir)/src/Makefile.global + +override CPPFLAGS := -I../include -I$(top_srcdir)/src/interfaces/ecpg/include \ + -I. -I$(srcdir) \ + -I$(top_srcdir)/src/interfaces/ecpg/ecpglib \ + -I$(libpq_srcdir) \ + $(CPPFLAGS) + +override CFLAGS += $(PTHREAD_CFLAGS) + +OBJS = \ + $(WIN32RES) \ + c_keywords.o \ + descriptor.o \ + ecpg.o \ + ecpg_keywords.o \ + keywords.o \ + output.o \ + parser.o \ + pgc.o \ + preproc.o \ + type.o \ + typename.o \ + variable.o + +# where to find gen_keywordlist.pl and subsidiary files +TOOLSDIR = $(top_srcdir)/src/tools +GEN_KEYWORDLIST = $(PERL) -I $(TOOLSDIR) $(TOOLSDIR)/gen_keywordlist.pl +GEN_KEYWORDLIST_DEPS = $(TOOLSDIR)/gen_keywordlist.pl $(TOOLSDIR)/PerfectHash.pm + +# Suppress parallel build to avoid a bug in GNU make 3.82 +# (see comments in ../Makefile) +ifeq ($(MAKE_VERSION),3.82) +.NOTPARALLEL: +endif + +all: ecpg + +ecpg: $(OBJS) | submake-libpgport + $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) $(PTHREAD_LIBS) -o $@$(X) + +# We symlink typename.c from ecpglib and recompile it here +typename.c: % : $(top_srcdir)/src/interfaces/ecpg/ecpglib/% + rm -f $@ && $(LN_S) $< . + +# See notes in src/backend/parser/Makefile about the following two rules +preproc.h: preproc.c + touch $@ + +preproc.c: BISONFLAGS += -d + +preproc.y: ../../../backend/parser/gram.y parse.pl ecpg.addons ecpg.header ecpg.tokens ecpg.trailer ecpg.type + $(PERL) $(srcdir)/parse.pl $(srcdir) < $< > $@ + $(PERL) $(srcdir)/check_rules.pl $(srcdir) $< + +# generate keyword headers +c_kwlist_d.h: c_kwlist.h $(GEN_KEYWORDLIST_DEPS) + $(GEN_KEYWORDLIST) --varname ScanCKeywords --no-case-fold $< + +ecpg_kwlist_d.h: ecpg_kwlist.h $(GEN_KEYWORDLIST_DEPS) + $(GEN_KEYWORDLIST) --varname ScanECPGKeywords $< + +# Force these dependencies to be known even without dependency info built: +ecpg_keywords.o c_keywords.o keywords.o preproc.o pgc.o parser.o: preproc.h +ecpg_keywords.o: ecpg_kwlist_d.h +c_keywords.o: c_kwlist_d.h +keywords.o: $(top_srcdir)/src/include/parser/kwlist.h + +distprep: preproc.y preproc.c preproc.h pgc.c c_kwlist_d.h ecpg_kwlist_d.h + +install: all installdirs + $(INSTALL_PROGRAM) ecpg$(X) '$(DESTDIR)$(bindir)' + +installdirs: + $(MKDIR_P) '$(DESTDIR)$(bindir)' + +uninstall: + rm -f '$(DESTDIR)$(bindir)/ecpg$(X)' + +# preproc.y, preproc.c, preproc.h, pgc.c, c_kwlist_d.h, and ecpg_kwlist_d.h +# are in the distribution tarball, so they are not cleaned here. +clean distclean: + rm -f *.o ecpg$(X) + rm -f typename.c + +maintainer-clean: distclean + rm -f preproc.y preproc.c preproc.h pgc.c c_kwlist_d.h ecpg_kwlist_d.h diff --git a/src/interfaces/ecpg/preproc/README.parser b/src/interfaces/ecpg/preproc/README.parser new file mode 100644 index 0000000..ddc3061 --- /dev/null +++ b/src/interfaces/ecpg/preproc/README.parser @@ -0,0 +1,42 @@ +ECPG modifies and extends the core grammar in a way that +1) every token in ECPG is type. New tokens are + defined in ecpg.tokens, types are defined in ecpg.type +2) most tokens from the core grammar are simply converted + to literals concatenated together to form the SQL string + passed to the server, this is done by parse.pl. +3) some rules need side-effects, actions are either added + or completely overridden (compared to the basic token + concatenation) for them, these are defined in ecpg.addons, + the rules for ecpg.addons are explained below. +4) new grammar rules are needed for ECPG metacommands. + These are in ecpg.trailer. +5) ecpg.header contains common functions, etc. used by + actions for grammar rules. + +In "ecpg.addons", every modified rule follows this pattern: + ECPG: dumpedtokens postfix +where "dumpedtokens" is simply tokens from core gram.y's +rules concatenated together. e.g. if gram.y has this: + ruleA: tokenA tokenB tokenC {...} +then "dumpedtokens" is "ruleAtokenAtokenBtokenC". +"postfix" above can be: +a) "block" - the automatic rule created by parse.pl is completely + overridden, the code block has to be written completely as + it were in a plain bison grammar +b) "rule" - the automatic rule is extended on, so new syntaxes + are accepted for "ruleA". E.g.: + ECPG: ruleAtokenAtokenBtokenC rule + | tokenD tokenE { action_code; } + ... + It will be substituted with: + ruleA: + | tokenD tokenE { action_code; } + ... +c) "addon" - the automatic action for the rule (SQL syntax constructed + from the tokens concatenated together) is prepended with a new + action code part. This code part is written as is's already inside + the { ... } + +Multiple "addon" or "block" lines may appear together with the +new code block if the code block is common for those rules. diff --git a/src/interfaces/ecpg/preproc/c_keywords.c b/src/interfaces/ecpg/preproc/c_keywords.c new file mode 100644 index 0000000..e51c036 --- /dev/null +++ b/src/interfaces/ecpg/preproc/c_keywords.c @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------- + * + * c_keywords.c + * lexical token lookup for reserved words in postgres embedded SQL + * + * src/interfaces/ecpg/preproc/c_keywords.c + * + *------------------------------------------------------------------------- + */ +#include "postgres_fe.h" + +/* ScanKeywordList lookup data for C keywords */ +#include "c_kwlist_d.h" +#include "preproc_extern.h" +#include "preproc.h" + +/* Token codes for C keywords */ +#define PG_KEYWORD(kwname, value) value, + +static const uint16 ScanCKeywordTokens[] = { +#include "c_kwlist.h" +}; + +#undef PG_KEYWORD + + +/* + * ScanCKeywordLookup - see if a given word is a keyword + * + * Returns the token value of the keyword, or -1 if no match. + * + * Do a hash search using plain strcmp() comparison. This is much like + * ScanKeywordLookup(), except we want case-sensitive matching. + */ +int +ScanCKeywordLookup(const char *str) +{ + size_t len; + int h; + const char *kw; + + /* + * Reject immediately if too long to be any keyword. This saves useless + * hashing work on long strings. + */ + len = strlen(str); + if (len > ScanCKeywords.max_kw_len) + return -1; + + /* + * Compute the hash function. Since it's a perfect hash, we need only + * match to the specific keyword it identifies. + */ + h = ScanCKeywords_hash_func(str, len); + + /* An out-of-range result implies no match */ + if (h < 0 || h >= ScanCKeywords.num_keywords) + return -1; + + kw = GetScanKeyword(h, &ScanCKeywords); + + if (strcmp(kw, str) == 0) + return ScanCKeywordTokens[h]; + + return -1; +} diff --git a/src/interfaces/ecpg/preproc/c_kwlist.h b/src/interfaces/ecpg/preproc/c_kwlist.h new file mode 100644 index 0000000..51c5dfb --- /dev/null +++ b/src/interfaces/ecpg/preproc/c_kwlist.h @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------- + * + * c_kwlist.h + * + * The keyword lists are kept in their own source files for use by + * automatic tools. The exact representation of a keyword is determined + * by the PG_KEYWORD macro, which is not defined in this file; it can + * be defined by the caller for special purposes. + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/interfaces/ecpg/preproc/c_kwlist.h + * + *------------------------------------------------------------------------- + */ + +/* There is deliberately not an #ifndef C_KWLIST_H here. */ + +/* + * List of (keyword-name, keyword-token-value) pairs. + * + * Note: gen_keywordlist.pl requires the entries to appear in ASCII order. + */ + +/* name, value */ +PG_KEYWORD("VARCHAR", VARCHAR) +PG_KEYWORD("auto", S_AUTO) +PG_KEYWORD("bool", SQL_BOOL) +PG_KEYWORD("char", CHAR_P) +PG_KEYWORD("const", S_CONST) +PG_KEYWORD("enum", ENUM_P) +PG_KEYWORD("extern", S_EXTERN) +PG_KEYWORD("float", FLOAT_P) +PG_KEYWORD("hour", HOUR_P) +PG_KEYWORD("int", INT_P) +PG_KEYWORD("long", SQL_LONG) +PG_KEYWORD("minute", MINUTE_P) +PG_KEYWORD("month", MONTH_P) +PG_KEYWORD("register", S_REGISTER) +PG_KEYWORD("second", SECOND_P) +PG_KEYWORD("short", SQL_SHORT) +PG_KEYWORD("signed", SQL_SIGNED) +PG_KEYWORD("static", S_STATIC) +PG_KEYWORD("struct", SQL_STRUCT) +PG_KEYWORD("to", TO) +PG_KEYWORD("typedef", S_TYPEDEF) +PG_KEYWORD("union", UNION) +PG_KEYWORD("unsigned", SQL_UNSIGNED) +PG_KEYWORD("varchar", VARCHAR) +PG_KEYWORD("volatile", S_VOLATILE) +PG_KEYWORD("year", YEAR_P) diff --git a/src/interfaces/ecpg/preproc/c_kwlist_d.h b/src/interfaces/ecpg/preproc/c_kwlist_d.h new file mode 100644 index 0000000..5cdedad --- /dev/null +++ b/src/interfaces/ecpg/preproc/c_kwlist_d.h @@ -0,0 +1,118 @@ +/*------------------------------------------------------------------------- + * + * c_kwlist_d.h + * List of keywords represented as a ScanKeywordList. + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * NOTES + * ****************************** + * *** DO NOT EDIT THIS FILE! *** + * ****************************** + * + * It has been GENERATED by src/tools/gen_keywordlist.pl + * + *------------------------------------------------------------------------- + */ + +#ifndef C_KWLIST_D_H +#define C_KWLIST_D_H + +#include "common/kwlookup.h" + +static const char ScanCKeywords_kw_string[] = + "VARCHAR\0" + "auto\0" + "bool\0" + "char\0" + "const\0" + "enum\0" + "extern\0" + "float\0" + "hour\0" + "int\0" + "long\0" + "minute\0" + "month\0" + "register\0" + "second\0" + "short\0" + "signed\0" + "static\0" + "struct\0" + "to\0" + "typedef\0" + "union\0" + "unsigned\0" + "varchar\0" + "volatile\0" + "year"; + +static const uint16 ScanCKeywords_kw_offsets[] = { + 0, + 8, + 13, + 18, + 23, + 29, + 34, + 41, + 47, + 52, + 56, + 61, + 68, + 74, + 83, + 90, + 96, + 103, + 110, + 117, + 120, + 128, + 134, + 143, + 151, + 160, +}; + +#define SCANCKEYWORDS_NUM_KEYWORDS 26 + +static int +ScanCKeywords_hash_func(const void *key, size_t keylen) +{ + static const int8 h[53] = { + -5, 0, 127, -9, 0, 127, 127, 3, + 127, 15, 127, 127, 127, 127, 11, 16, + 1, 0, 6, 16, 9, 5, 127, 0, + 127, 20, 24, -5, 5, 18, 5, 18, + 2, 127, 127, 127, 20, 127, -17, 0, + 127, 2, 127, 6, 127, -10, 12, 19, + 0, 0, 0, 127, 0 + }; + + const unsigned char *k = (const unsigned char *) key; + uint32 a = 0; + uint32 b = 0; + + while (keylen--) + { + unsigned char c = *k++; + + a = a * 257 + c; + b = b * 17 + c; + } + return h[a % 53] + h[b % 53]; +} + +static const ScanKeywordList ScanCKeywords = { + ScanCKeywords_kw_string, + ScanCKeywords_kw_offsets, + ScanCKeywords_hash_func, + SCANCKEYWORDS_NUM_KEYWORDS, + 8 +}; + +#endif /* C_KWLIST_D_H */ diff --git a/src/interfaces/ecpg/preproc/check_rules.pl b/src/interfaces/ecpg/preproc/check_rules.pl new file mode 100644 index 0000000..c0b5d19 --- /dev/null +++ b/src/interfaces/ecpg/preproc/check_rules.pl @@ -0,0 +1,191 @@ +#!/usr/bin/perl +# src/interfaces/ecpg/preproc/check_rules.pl +# test parser generator for ecpg +# call with backend grammar as stdin +# +# Copyright (c) 2009-2021, PostgreSQL Global Development Group +# +# Written by Michael Meskes +# Andy Colson +# +# Placed under the same license as PostgreSQL. +# +# Command line: [-v] [path only to ecpg.addons] [full filename of gram.y] +# -v enables verbose mode... show's some stats... thought it might be interesting +# +# This script loads rule names from gram.y and sets $found{rule} = 1 for each. +# Then it checks to make sure each rule in ecpg.addons was found in gram.y + +use strict; +use warnings; +no warnings 'uninitialized'; + +my $verbose = 0; +if ($ARGV[0] eq '-v') +{ + $verbose = shift; +} +my $path = shift || '.'; +my $parser = shift || '../../../backend/parser/gram.y'; + +my $filename = $path . "/ecpg.addons"; +if ($verbose) +{ + print "parser: $parser\n"; + print "addons: $filename\n"; +} + +my %replace_line = ( + 'ExecuteStmtEXECUTEnameexecute_param_clause' => + 'EXECUTE prepared_name execute_param_clause execute_rest', + + 'ExecuteStmtCREATEOptTempTABLEcreate_as_targetASEXECUTEnameexecute_param_clauseopt_with_data' + => 'CREATE OptTemp TABLE create_as_target AS EXECUTE prepared_name execute_param_clause opt_with_data execute_rest', + + 'ExecuteStmtCREATEOptTempTABLEIF_PNOTEXISTScreate_as_targetASEXECUTEnameexecute_param_clauseopt_with_data' + => 'CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS EXECUTE prepared_name execute_param_clause opt_with_data execute_rest', + + 'PrepareStmtPREPAREnameprep_type_clauseASPreparableStmt' => + 'PREPARE prepared_name prep_type_clause AS PreparableStmt'); + +my $block = ''; +my $yaccmode = 0; +my $in_rule = 0; +my $brace_indent = 0; +my (@arr, %found); +my $comment = 0; +my $non_term_id = ''; +my $cc = 0; + +open my $parser_fh, '<', $parser or die $!; +while (<$parser_fh>) +{ + if (/^%%/) + { + $yaccmode++; + } + + if ($yaccmode != 1) + { + next; + } + + chomp; # strip record separator + + next if ($_ eq ''); + + # Make sure any braces are split + s/{/ { /g; + s/}/ } /g; + + # Any comments are split + s|\/\*| /* |g; + s|\*\/| */ |g; + + # Now split the line into individual fields + my $n = (@arr = split(' ')); + + # Go through each field in turn + for (my $fieldIndexer = 0; $fieldIndexer < $n; $fieldIndexer++) + { + if ($arr[$fieldIndexer] eq '*/' && $comment) + { + $comment = 0; + next; + } + elsif ($comment) + { + next; + } + elsif ($arr[$fieldIndexer] eq '/*') + { + + # start of a multiline comment + $comment = 1; + next; + } + elsif ($arr[$fieldIndexer] eq '//') + { + next; + } + elsif ($arr[$fieldIndexer] eq '}') + { + $brace_indent--; + next; + } + elsif ($arr[$fieldIndexer] eq '{') + { + $brace_indent++; + next; + } + + if ($brace_indent > 0) + { + next; + } + + if ($arr[$fieldIndexer] eq ';' || $arr[$fieldIndexer] eq '|') + { + $block = $non_term_id . $block; + if ($replace_line{$block}) + { + $block = $non_term_id . $replace_line{$block}; + $block =~ tr/ |//d; + } + $found{$block} = 1; + $cc++; + $block = ''; + $in_rule = 0 if $arr[$fieldIndexer] eq ';'; + } + elsif (($arr[$fieldIndexer] =~ '[A-Za-z0-9]+:') + || $arr[ $fieldIndexer + 1 ] eq ':') + { + die "unterminated rule at grammar line $.\n" + if $in_rule; + $in_rule = 1; + $non_term_id = $arr[$fieldIndexer]; + $non_term_id =~ tr/://d; + } + else + { + $block = $block . $arr[$fieldIndexer]; + } + } +} + +die "unterminated rule at end of grammar\n" + if $in_rule; + +close $parser_fh; +if ($verbose) +{ + print "$cc rules loaded\n"; +} + +my $ret = 0; +$cc = 0; + +open my $ecpg_fh, '<', $filename or die $!; +while (<$ecpg_fh>) +{ + if (!/^ECPG:/) + { + next; + } + + my @Fld = split(' ', $_, 3); + $cc++; + if (not exists $found{ $Fld[1] }) + { + print $Fld[1], " is not used for building parser!\n"; + $ret = 1; + } +} +close $ecpg_fh; + +if ($verbose) +{ + print "$cc rules checked\n"; +} + +exit $ret; diff --git a/src/interfaces/ecpg/preproc/descriptor.c b/src/interfaces/ecpg/preproc/descriptor.c new file mode 100644 index 0000000..35d9471 --- /dev/null +++ b/src/interfaces/ecpg/preproc/descriptor.c @@ -0,0 +1,367 @@ +/* + * functions needed for descriptor handling + * + * src/interfaces/ecpg/preproc/descriptor.c + * + * since descriptor might be either a string constant or a string var + * we need to check for a constant if we expect a constant + */ + +#include "postgres_fe.h" + +#include "preproc_extern.h" + +/* + * assignment handling function (descriptor) + */ + +static struct assignment *assignments; + +void +push_assignment(char *var, enum ECPGdtype value) +{ + struct assignment *new = (struct assignment *) mm_alloc(sizeof(struct assignment)); + + new->next = assignments; + new->variable = mm_alloc(strlen(var) + 1); + strcpy(new->variable, var); + new->value = value; + assignments = new; +} + +static void +drop_assignments(void) +{ + while (assignments) + { + struct assignment *old_head = assignments; + + assignments = old_head->next; + free(old_head->variable); + free(old_head); + } +} + +static void +ECPGnumeric_lvalue(char *name) +{ + const struct variable *v = find_variable(name); + + switch (v->type->type) + { + case ECPGt_short: + case ECPGt_int: + case ECPGt_long: + case ECPGt_long_long: + case ECPGt_unsigned_short: + case ECPGt_unsigned_int: + case ECPGt_unsigned_long: + case ECPGt_unsigned_long_long: + case ECPGt_const: + fputs(name, base_yyout); + break; + default: + mmerror(PARSE_ERROR, ET_ERROR, "variable \"%s\" must have a numeric type", name); + break; + } +} + +/* + * descriptor name lookup + */ + +static struct descriptor *descriptors; + +void +add_descriptor(char *name, char *connection) +{ + struct descriptor *new; + + if (name[0] != '"') + return; + + new = (struct descriptor *) mm_alloc(sizeof(struct descriptor)); + + new->next = descriptors; + new->name = mm_alloc(strlen(name) + 1); + strcpy(new->name, name); + if (connection) + { + new->connection = mm_alloc(strlen(connection) + 1); + strcpy(new->connection, connection); + } + else + new->connection = connection; + descriptors = new; +} + +void +drop_descriptor(char *name, char *connection) +{ + struct descriptor *i; + struct descriptor **lastptr = &descriptors; + + if (name[0] != '"') + return; + + for (i = descriptors; i; lastptr = &i->next, i = i->next) + { + if (strcmp(name, i->name) == 0) + { + if ((!connection && !i->connection) + || (connection && i->connection + && strcmp(connection, i->connection) == 0)) + { + *lastptr = i->next; + if (i->connection) + free(i->connection); + free(i->name); + free(i); + return; + } + } + } + if (connection) + mmerror(PARSE_ERROR, ET_WARNING, "descriptor %s bound to connection %s does not exist", name, connection); + else + mmerror(PARSE_ERROR, ET_WARNING, "descriptor %s bound to the default connection does not exist", name); +} + +struct descriptor + * +lookup_descriptor(char *name, char *connection) +{ + struct descriptor *i; + + if (name[0] != '"') + return NULL; + + for (i = descriptors; i; i = i->next) + { + if (strcmp(name, i->name) == 0) + { + if ((!connection && !i->connection) + || (connection && i->connection + && strcmp(connection, i->connection) == 0)) + return i; + if (connection && !i->connection) + { + /* overwrite descriptor's connection */ + i->connection = mm_strdup(connection); + return i; + } + } + } + if (connection) + mmerror(PARSE_ERROR, ET_WARNING, "descriptor %s bound to connection %s does not exist", name, connection); + else + mmerror(PARSE_ERROR, ET_WARNING, "descriptor %s bound to the default connection does not exist", name); + return NULL; +} + +void +output_get_descr_header(char *desc_name) +{ + struct assignment *results; + + fprintf(base_yyout, "{ ECPGget_desc_header(__LINE__, %s, &(", desc_name); + for (results = assignments; results != NULL; results = results->next) + { + if (results->value == ECPGd_count) + ECPGnumeric_lvalue(results->variable); + else + mmerror(PARSE_ERROR, ET_WARNING, "descriptor header item \"%d\" does not exist", results->value); + } + + drop_assignments(); + fprintf(base_yyout, "));\n"); + whenever_action(3); +} + +void +output_get_descr(char *desc_name, char *index) +{ + struct assignment *results; + + fprintf(base_yyout, "{ ECPGget_desc(__LINE__, %s, %s,", desc_name, index); + for (results = assignments; results != NULL; results = results->next) + { + const struct variable *v = find_variable(results->variable); + char *str_zero = mm_strdup("0"); + + switch (results->value) + { + case ECPGd_nullable: + mmerror(PARSE_ERROR, ET_WARNING, "nullable is always 1"); + break; + case ECPGd_key_member: + mmerror(PARSE_ERROR, ET_WARNING, "key_member is always 0"); + break; + default: + break; + } + fprintf(base_yyout, "%s,", get_dtype(results->value)); + ECPGdump_a_type(base_yyout, v->name, v->type, v->brace_level, + NULL, NULL, -1, NULL, NULL, str_zero, NULL, NULL); + free(str_zero); + } + drop_assignments(); + fputs("ECPGd_EODT);\n", base_yyout); + + whenever_action(2 | 1); +} + +void +output_set_descr_header(char *desc_name) +{ + struct assignment *results; + + fprintf(base_yyout, "{ ECPGset_desc_header(__LINE__, %s, (int)(", desc_name); + for (results = assignments; results != NULL; results = results->next) + { + if (results->value == ECPGd_count) + ECPGnumeric_lvalue(results->variable); + else + mmerror(PARSE_ERROR, ET_WARNING, "descriptor header item \"%d\" does not exist", results->value); + } + + drop_assignments(); + fprintf(base_yyout, "));\n"); + whenever_action(3); +} + +static const char * +descriptor_item_name(enum ECPGdtype itemcode) +{ + switch (itemcode) + { + case ECPGd_cardinality: + return "CARDINALITY"; + case ECPGd_count: + return "COUNT"; + case ECPGd_data: + return "DATA"; + case ECPGd_di_code: + return "DATETIME_INTERVAL_CODE"; + case ECPGd_di_precision: + return "DATETIME_INTERVAL_PRECISION"; + case ECPGd_indicator: + return "INDICATOR"; + case ECPGd_key_member: + return "KEY_MEMBER"; + case ECPGd_length: + return "LENGTH"; + case ECPGd_name: + return "NAME"; + case ECPGd_nullable: + return "NULLABLE"; + case ECPGd_octet: + return "OCTET_LENGTH"; + case ECPGd_precision: + return "PRECISION"; + case ECPGd_ret_length: + return "RETURNED_LENGTH"; + case ECPGd_ret_octet: + return "RETURNED_OCTET_LENGTH"; + case ECPGd_scale: + return "SCALE"; + case ECPGd_type: + return "TYPE"; + default: + return NULL; + } +} + +void +output_set_descr(char *desc_name, char *index) +{ + struct assignment *results; + + fprintf(base_yyout, "{ ECPGset_desc(__LINE__, %s, %s,", desc_name, index); + for (results = assignments; results != NULL; results = results->next) + { + const struct variable *v = find_variable(results->variable); + + switch (results->value) + { + case ECPGd_cardinality: + case ECPGd_di_code: + case ECPGd_di_precision: + case ECPGd_precision: + case ECPGd_scale: + mmfatal(PARSE_ERROR, "descriptor item \"%s\" is not implemented", + descriptor_item_name(results->value)); + break; + + case ECPGd_key_member: + case ECPGd_name: + case ECPGd_nullable: + case ECPGd_octet: + case ECPGd_ret_length: + case ECPGd_ret_octet: + mmfatal(PARSE_ERROR, "descriptor item \"%s\" cannot be set", + descriptor_item_name(results->value)); + break; + + case ECPGd_data: + case ECPGd_indicator: + case ECPGd_length: + case ECPGd_type: + { + char *str_zero = mm_strdup("0"); + + fprintf(base_yyout, "%s,", get_dtype(results->value)); + ECPGdump_a_type(base_yyout, v->name, v->type, v->brace_level, + NULL, NULL, -1, NULL, NULL, str_zero, NULL, NULL); + free(str_zero); + } + break; + + default: + ; + } + } + drop_assignments(); + fputs("ECPGd_EODT);\n", base_yyout); + + whenever_action(2 | 1); +} + +/* I consider dynamic allocation overkill since at most two descriptor + variables are possible per statement. (input and output descriptor) + And descriptors are no normal variables, so they don't belong into + the variable list. +*/ + +#define MAX_DESCRIPTOR_NAMELEN 128 +struct variable * +descriptor_variable(const char *name, int input) +{ + static char descriptor_names[2][MAX_DESCRIPTOR_NAMELEN]; + static struct ECPGtype descriptor_type = {ECPGt_descriptor, NULL, NULL, NULL, {NULL}, 0}; + static struct variable varspace[2] = { + {descriptor_names[0], &descriptor_type, 0, NULL}, + {descriptor_names[1], &descriptor_type, 0, NULL} + }; + + strlcpy(descriptor_names[input], name, sizeof(descriptor_names[input])); + return &varspace[input]; +} + +struct variable * +sqlda_variable(const char *name) +{ + struct variable *p = (struct variable *) mm_alloc(sizeof(struct variable)); + + p->name = mm_strdup(name); + p->type = (struct ECPGtype *) mm_alloc(sizeof(struct ECPGtype)); + p->type->type = ECPGt_sqlda; + p->type->size = NULL; + p->type->struct_sizeof = NULL; + p->type->u.element = NULL; + p->type->counter = 0; + p->brace_level = 0; + p->next = NULL; + + return p; +} diff --git a/src/interfaces/ecpg/preproc/ecpg.addons b/src/interfaces/ecpg/preproc/ecpg.addons new file mode 100644 index 0000000..94f7d4a --- /dev/null +++ b/src/interfaces/ecpg/preproc/ecpg.addons @@ -0,0 +1,590 @@ +/* src/interfaces/ecpg/preproc/ecpg.addons */ +ECPG: stmtClosePortalStmt block + { + if (INFORMIX_MODE) + { + if (pg_strcasecmp($1+strlen("close "), "database") == 0) + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in CLOSE DATABASE statement"); + + fprintf(base_yyout, "{ ECPGdisconnect(__LINE__, \"CURRENT\");"); + whenever_action(2); + free($1); + break; + } + } + + output_statement($1, 0, ECPGst_normal); + } +ECPG: stmtDeallocateStmt block + { + output_deallocate_prepare_statement($1); + } +ECPG: stmtDeclareCursorStmt block + { output_simple_statement($1, (strncmp($1, "ECPGset_var", strlen("ECPGset_var")) == 0) ? 4 : 0); } +ECPG: stmtDiscardStmt block +ECPG: stmtFetchStmt block + { output_statement($1, 1, ECPGst_normal); } +ECPG: stmtDeleteStmt block +ECPG: stmtInsertStmt block +ECPG: stmtSelectStmt block +ECPG: stmtUpdateStmt block + { output_statement($1, 1, ECPGst_prepnormal); } +ECPG: stmtExecuteStmt block + { + check_declared_list($1.name); + if ($1.type == NULL || strlen($1.type) == 0) + output_statement($1.name, 1, ECPGst_execute); + else + { + if ($1.name[0] != '"') + /* case of char_variable */ + add_variable_to_tail(&argsinsert, find_variable($1.name), &no_indicator); + else + { + /* case of ecpg_ident or CSTRING */ + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *str = mm_strdup($1.name + 1); + + /* It must be cut off double quotation because new_variable() double-quotes. */ + str[strlen(str) - 1] = '\0'; + sprintf(length, "%zu", strlen(str)); + add_variable_to_tail(&argsinsert, new_variable(str, ECPGmake_simple_type(ECPGt_const, length, 0), 0), &no_indicator); + } + output_statement(cat_str(3, mm_strdup("execute"), mm_strdup("$0"), $1.type), 0, ECPGst_exec_with_exprlist); + } + } +ECPG: stmtPrepareStmt block + { + check_declared_list($1.name); + if ($1.type == NULL) + output_prepare_statement($1.name, $1.stmt); + else if (strlen($1.type) == 0) + { + char *stmt = cat_str(3, mm_strdup("\""), $1.stmt, mm_strdup("\"")); + output_prepare_statement($1.name, stmt); + } + else + { + if ($1.name[0] != '"') + /* case of char_variable */ + add_variable_to_tail(&argsinsert, find_variable($1.name), &no_indicator); + else + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *str = mm_strdup($1.name + 1); + + /* It must be cut off double quotation because new_variable() double-quotes. */ + str[strlen(str) - 1] = '\0'; + sprintf(length, "%zu", strlen(str)); + add_variable_to_tail(&argsinsert, new_variable(str, ECPGmake_simple_type(ECPGt_const, length, 0), 0), &no_indicator); + } + output_statement(cat_str(5, mm_strdup("prepare"), mm_strdup("$0"), $1.type, mm_strdup("as"), $1.stmt), 0, ECPGst_prepare); + } + } +ECPG: stmtTransactionStmt block + { + fprintf(base_yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1); + whenever_action(2); + free($1); + } +ECPG: toplevel_stmtTransactionStmtLegacy block + { + fprintf(base_yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1); + whenever_action(2); + free($1); + } +ECPG: stmtViewStmt rule + | ECPGAllocateDescr + { + fprintf(base_yyout,"ECPGallocate_desc(__LINE__, %s);",$1); + whenever_action(0); + free($1); + } + | ECPGConnect + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in CONNECT statement"); + + fprintf(base_yyout, "{ ECPGconnect(__LINE__, %d, %s, %d); ", compat, $1, autocommit); + reset_variables(); + whenever_action(2); + free($1); + } + | ECPGDeclareStmt + { + output_simple_statement($1, 0); + } + | ECPGCursorStmt + { + output_simple_statement($1, (strncmp($1, "ECPGset_var", strlen("ECPGset_var")) == 0) ? 4 : 0); + } + | ECPGDeallocateDescr + { + fprintf(base_yyout,"ECPGdeallocate_desc(__LINE__, %s);",$1); + whenever_action(0); + free($1); + } + | ECPGDeclare + { + output_simple_statement($1, 0); + } + | ECPGDescribe + { + check_declared_list($1.stmt_name); + + fprintf(base_yyout, "{ ECPGdescribe(__LINE__, %d, %d, %s, %s,", compat, $1.input, connection ? connection : "NULL", $1.stmt_name); + dump_variables(argsresult, 1); + fputs("ECPGt_EORT);", base_yyout); + fprintf(base_yyout, "}"); + output_line_number(); + + free($1.stmt_name); + } + | ECPGDisconnect + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in DISCONNECT statement"); + + fprintf(base_yyout, "{ ECPGdisconnect(__LINE__, %s);", + $1 ? $1 : "\"CURRENT\""); + whenever_action(2); + free($1); + } + | ECPGExecuteImmediateStmt { output_statement($1, 0, ECPGst_exec_immediate); } + | ECPGFree + { + const char *con = connection ? connection : "NULL"; + + if (strcmp($1, "all") == 0) + fprintf(base_yyout, "{ ECPGdeallocate_all(__LINE__, %d, %s);", compat, con); + else if ($1[0] == ':') + fprintf(base_yyout, "{ ECPGdeallocate(__LINE__, %d, %s, %s);", compat, con, $1+1); + else + fprintf(base_yyout, "{ ECPGdeallocate(__LINE__, %d, %s, \"%s\");", compat, con, $1); + + whenever_action(2); + free($1); + } + | ECPGGetDescriptor + { + lookup_descriptor($1.name, connection); + output_get_descr($1.name, $1.str); + free($1.name); + free($1.str); + } + | ECPGGetDescriptorHeader + { + lookup_descriptor($1, connection); + output_get_descr_header($1); + free($1); + } + | ECPGOpen + { + struct cursor *ptr; + + if ((ptr = add_additional_variables($1, true)) != NULL) + { + connection = ptr->connection ? mm_strdup(ptr->connection) : NULL; + output_statement(mm_strdup(ptr->command), 0, ECPGst_normal); + ptr->opened = true; + } + } + | ECPGSetAutocommit + { + fprintf(base_yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", $1, connection ? connection : "NULL"); + whenever_action(2); + free($1); + } + | ECPGSetConnection + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in SET CONNECTION statement"); + + fprintf(base_yyout, "{ ECPGsetconn(__LINE__, %s);", $1); + whenever_action(2); + free($1); + } + | ECPGSetDescriptor + { + lookup_descriptor($1.name, connection); + output_set_descr($1.name, $1.str); + free($1.name); + free($1.str); + } + | ECPGSetDescriptorHeader + { + lookup_descriptor($1, connection); + output_set_descr_header($1); + free($1); + } + | ECPGTypedef + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in TYPE statement"); + + fprintf(base_yyout, "%s", $1); + free($1); + output_line_number(); + } + | ECPGVar + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in VAR statement"); + + output_simple_statement($1, 0); + } + | ECPGWhenever + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in WHENEVER statement"); + + output_simple_statement($1, 0); + } +ECPG: where_or_current_clauseWHERECURRENT_POFcursor_name block + { + char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4; + $$ = cat_str(2,mm_strdup("where current of"), cursor_marker); + } +ECPG: CopyStmtCOPYopt_binaryqualified_nameopt_column_listcopy_fromopt_programcopy_file_namecopy_delimiteropt_withcopy_optionswhere_clause addon + if (strcmp($6, "from") == 0 && + (strcmp($7, "stdin") == 0 || strcmp($7, "stdout") == 0)) + mmerror(PARSE_ERROR, ET_WARNING, "COPY FROM STDIN is not implemented"); +ECPG: var_valueNumericOnly addon + if ($1[0] == '$') + { + free($1); + $1 = mm_strdup("$0"); + } +ECPG: fetch_argscursor_name addon + struct cursor *ptr = add_additional_variables($1, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($1[0] == ':') + { + free($1); + $1 = mm_strdup("$0"); + } +ECPG: fetch_argsfrom_incursor_name addon + struct cursor *ptr = add_additional_variables($2, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($2[0] == ':') + { + free($2); + $2 = mm_strdup("$0"); + } +ECPG: fetch_argsNEXTopt_from_incursor_name addon +ECPG: fetch_argsPRIORopt_from_incursor_name addon +ECPG: fetch_argsFIRST_Popt_from_incursor_name addon +ECPG: fetch_argsLAST_Popt_from_incursor_name addon +ECPG: fetch_argsALLopt_from_incursor_name addon + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($3[0] == ':') + { + free($3); + $3 = mm_strdup("$0"); + } +ECPG: fetch_argsSignedIconstopt_from_incursor_name addon + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($3[0] == ':') + { + free($3); + $3 = mm_strdup("$0"); + } + if ($1[0] == '$') + { + free($1); + $1 = mm_strdup("$0"); + } +ECPG: fetch_argsFORWARDALLopt_from_incursor_name addon +ECPG: fetch_argsBACKWARDALLopt_from_incursor_name addon + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($4[0] == ':') + { + free($4); + $4 = mm_strdup("$0"); + } +ECPG: fetch_argsABSOLUTE_PSignedIconstopt_from_incursor_name addon +ECPG: fetch_argsRELATIVE_PSignedIconstopt_from_incursor_name addon +ECPG: fetch_argsFORWARDSignedIconstopt_from_incursor_name addon +ECPG: fetch_argsBACKWARDSignedIconstopt_from_incursor_name addon + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($4[0] == ':') + { + free($4); + $4 = mm_strdup("$0"); + } + if ($2[0] == '$') + { + free($2); + $2 = mm_strdup("$0"); + } +ECPG: cursor_namename rule + | char_civar + { + char *curname = mm_alloc(strlen($1) + 2); + sprintf(curname, ":%s", $1); + free($1); + $1 = curname; + $$ = $1; + } +ECPG: ExplainableStmtExecuteStmt block + { + $$ = $1.name; + } +ECPG: PrepareStmtPREPAREprepared_nameprep_type_clauseASPreparableStmt block + { + $$.name = $2; + $$.type = $3; + $$.stmt = $5; + } + | PREPARE prepared_name FROM execstring + { + $$.name = $2; + $$.type = NULL; + $$.stmt = $4; + } +ECPG: ExecuteStmtEXECUTEprepared_nameexecute_param_clauseexecute_rest block + { + $$.name = $2; + $$.type = $3; + } +ECPG: ExecuteStmtCREATEOptTempTABLEcreate_as_targetASEXECUTEprepared_nameexecute_param_clauseopt_with_dataexecute_rest block + { + $$.name = cat_str(8,mm_strdup("create"),$2,mm_strdup("table"),$4,mm_strdup("as execute"),$7,$8,$9); + } +ECPG: ExecuteStmtCREATEOptTempTABLEIF_PNOTEXISTScreate_as_targetASEXECUTEprepared_nameexecute_param_clauseopt_with_dataexecute_rest block + { + $$.name = cat_str(8,mm_strdup("create"),$2,mm_strdup("table if not exists"),$7,mm_strdup("as execute"),$10,$11,$12); + } +ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectStmt block + { + struct cursor *ptr, *this; + char *cursor_marker = $2[0] == ':' ? mm_strdup("$0") : mm_strdup($2); + char *comment, *c1, *c2; + int (* strcmp_fn)(const char *, const char *) = (($2[0] == ':' || $2[0] == '"') ? strcmp : pg_strcasecmp); + + if (INFORMIX_MODE && pg_strcasecmp($2, "database") == 0) + mmfatal(PARSE_ERROR, "\"database\" cannot be used as cursor name in INFORMIX mode"); + + for (ptr = cur; ptr != NULL; ptr = ptr->next) + { + if (strcmp_fn($2, ptr->name) == 0) + { + if ($2[0] == ':') + mmerror(PARSE_ERROR, ET_ERROR, "using variable \"%s\" in different declare statements is not supported", $2+1); + else + mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" is already defined", $2); + } + } + + this = (struct cursor *) mm_alloc(sizeof(struct cursor)); + + this->next = cur; + this->name = $2; + this->function = (current_function ? mm_strdup(current_function) : NULL); + this->connection = connection ? mm_strdup(connection) : NULL; + this->opened = false; + this->command = cat_str(7, mm_strdup("declare"), cursor_marker, $3, mm_strdup("cursor"), $5, mm_strdup("for"), $7); + this->argsinsert = argsinsert; + this->argsinsert_oos = NULL; + this->argsresult = argsresult; + this->argsresult_oos = NULL; + argsinsert = argsresult = NULL; + cur = this; + + c1 = mm_strdup(this->command); + if ((c2 = strstr(c1, "*/")) != NULL) + { + /* We put this text into a comment, so we better remove [*][/]. */ + c2[0] = '.'; + c2[1] = '.'; + } + comment = cat_str(3, mm_strdup("/*"), c1, mm_strdup("*/")); + + $$ = cat2_str(adjust_outofscope_cursor_vars(this), comment); + } +ECPG: ClosePortalStmtCLOSEcursor_name block + { + char *cursor_marker = $2[0] == ':' ? mm_strdup("$0") : $2; + struct cursor *ptr = NULL; + for (ptr = cur; ptr != NULL; ptr = ptr -> next) + { + if (strcmp($2, ptr -> name) == 0) + { + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + break; + } + } + $$ = cat2_str(mm_strdup("close"), cursor_marker); + } +ECPG: opt_hold block + { + if (compat == ECPG_COMPAT_INFORMIX_SE && autocommit) + $$ = mm_strdup("with hold"); + else + $$ = EMPTY; + } +ECPG: into_clauseINTOOptTempTableName block + { + FoundInto = 1; + $$= cat2_str(mm_strdup("into"), $2); + } + | ecpg_into { $$ = EMPTY; } +ECPG: table_refselect_with_parensopt_alias_clause addon + if ($2 == NULL) + mmerror(PARSE_ERROR, ET_ERROR, "subquery in FROM must have an alias"); +ECPG: table_refLATERAL_Pselect_with_parensopt_alias_clause addon + if ($3 == NULL) + mmerror(PARSE_ERROR, ET_ERROR, "subquery in FROM must have an alias"); +ECPG: TypenameSimpleTypenameopt_array_bounds block + { $$ = cat2_str($1, $2.str); } +ECPG: TypenameSETOFSimpleTypenameopt_array_bounds block + { $$ = cat_str(3, mm_strdup("setof"), $2, $3.str); } +ECPG: opt_array_boundsopt_array_bounds'['']' block + { + $$.index1 = $1.index1; + $$.index2 = $1.index2; + if (strcmp($$.index1, "-1") == 0) + $$.index1 = mm_strdup("0"); + else if (strcmp($1.index2, "-1") == 0) + $$.index2 = mm_strdup("0"); + $$.str = cat_str(2, $1.str, mm_strdup("[]")); + } + | opt_array_bounds '[' Iresult ']' + { + $$.index1 = $1.index1; + $$.index2 = $1.index2; + if (strcmp($1.index1, "-1") == 0) + $$.index1 = mm_strdup($3); + else if (strcmp($1.index2, "-1") == 0) + $$.index2 = mm_strdup($3); + $$.str = cat_str(4, $1.str, mm_strdup("["), $3, mm_strdup("]")); + } +ECPG: opt_array_bounds + { + $$.index1 = mm_strdup("-1"); + $$.index2 = mm_strdup("-1"); + $$.str= EMPTY; + } +ECPG: IconstICONST block + { $$ = make_name(); } +ECPG: AexprConstNULL_P rule + | civar { $$ = $1; } + | civarind { $$ = $1; } +ECPG: ColIdcol_name_keyword rule + | ECPGKeywords { $$ = $1; } + | ECPGCKeywords { $$ = $1; } + | CHAR_P { $$ = mm_strdup("char"); } + | VALUES { $$ = mm_strdup("values"); } +ECPG: type_function_nametype_func_name_keyword rule + | ECPGKeywords { $$ = $1; } + | ECPGTypeName { $$ = $1; } + | ECPGCKeywords { $$ = $1; } +ECPG: VariableShowStmtSHOWALL block + { + mmerror(PARSE_ERROR, ET_ERROR, "SHOW ALL is not implemented"); + $$ = EMPTY; + } +ECPG: FetchStmtMOVEfetch_args rule + | FETCH fetch_args ecpg_fetch_into + { + $$ = cat2_str(mm_strdup("fetch"), $2); + } + | FETCH FORWARD cursor_name opt_ecpg_fetch_into + { + char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3; + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("fetch forward"), cursor_marker); + } + | FETCH FORWARD from_in cursor_name opt_ecpg_fetch_into + { + char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4; + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("fetch forward from"), cursor_marker); + } + | FETCH BACKWARD cursor_name opt_ecpg_fetch_into + { + char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3; + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("fetch backward"), cursor_marker); + } + | FETCH BACKWARD from_in cursor_name opt_ecpg_fetch_into + { + char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4; + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("fetch backward from"), cursor_marker); + } + | MOVE FORWARD cursor_name + { + char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3; + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("move forward"), cursor_marker); + } + | MOVE FORWARD from_in cursor_name + { + char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4; + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("move forward from"), cursor_marker); + } + | MOVE BACKWARD cursor_name + { + char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3; + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("move backward"), cursor_marker); + } + | MOVE BACKWARD from_in cursor_name + { + char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4; + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("move backward from"), cursor_marker); + } +ECPG: limit_clauseLIMITselect_limit_value','select_offset_value block + { + mmerror(PARSE_ERROR, ET_WARNING, "no longer supported LIMIT #,# syntax passed to server"); + $$ = cat_str(4, mm_strdup("limit"), $2, mm_strdup(","), $4); + } +ECPG: SignedIconstIconst rule + | civar { $$ = $1; } diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c new file mode 100644 index 0000000..13e0f8c --- /dev/null +++ b/src/interfaces/ecpg/preproc/ecpg.c @@ -0,0 +1,504 @@ +/* src/interfaces/ecpg/preproc/ecpg.c */ + +/* Main for ecpg, the PostgreSQL embedded SQL precompiler. */ +/* Copyright (c) 1996-2021, PostgreSQL Global Development Group */ + +#include "postgres_fe.h" + +#include + +#include "getopt_long.h" + +#include "preproc_extern.h" + +int ret_value = 0; +bool autocommit = false, + auto_create_c = false, + system_includes = false, + force_indicator = true, + questionmarks = false, + regression_mode = false, + auto_prepare = false; + +char *output_filename; + +enum COMPAT_MODE compat = ECPG_COMPAT_PGSQL; + +struct _include_path *include_paths = NULL; +struct cursor *cur = NULL; +struct typedefs *types = NULL; +struct _defines *defines = NULL; +struct declared_list *g_declared_list = NULL; + +static void +help(const char *progname) +{ + printf(_("%s is the PostgreSQL embedded SQL preprocessor for C programs.\n\n"), + progname); + printf(_("Usage:\n" + " %s [OPTION]... FILE...\n\n"), + progname); + printf(_("Options:\n")); + printf(_(" -c automatically generate C code from embedded SQL code;\n" + " this affects EXEC SQL TYPE\n")); + printf(_(" -C MODE set compatibility mode; MODE can be one of\n" + " \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n")); +#ifdef YYDEBUG + printf(_(" -d generate parser debug output\n")); +#endif + printf(_(" -D SYMBOL define SYMBOL\n")); + printf(_(" -h parse a header file, this option includes option \"-c\"\n")); + printf(_(" -i parse system include files as well\n")); + printf(_(" -I DIRECTORY search DIRECTORY for include files\n")); + printf(_(" -o OUTFILE write result to OUTFILE\n")); + printf(_(" -r OPTION specify run-time behavior; OPTION can be:\n" + " \"no_indicator\", \"prepare\", \"questionmarks\"\n")); + printf(_(" --regression run in regression testing mode\n")); + printf(_(" -t turn on autocommit of transactions\n")); + printf(_(" -V, --version output version information, then exit\n")); + printf(_(" -?, --help show this help, then exit\n")); + printf(_("\nIf no output file is specified, the name is formed by adding .c to the\n" + "input file name, after stripping off .pgc if present.\n")); + printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT); + printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); +} + +static void +add_include_path(char *path) +{ + struct _include_path *ip = include_paths, + *new; + + new = mm_alloc(sizeof(struct _include_path)); + new->path = path; + new->next = NULL; + + if (ip == NULL) + include_paths = new; + else + { + for (; ip->next != NULL; ip = ip->next); + ip->next = new; + } +} + +static void +add_preprocessor_define(char *define) +{ + struct _defines *pd = defines; + char *ptr, + *define_copy = mm_strdup(define); + + defines = mm_alloc(sizeof(struct _defines)); + + /* look for = sign */ + ptr = strchr(define_copy, '='); + if (ptr != NULL) + { + char *tmp; + + /* symbol has a value */ + for (tmp = ptr - 1; *tmp == ' '; tmp--); + tmp[1] = '\0'; + defines->olddef = define_copy; + defines->newdef = ptr + 1; + } + else + { + defines->olddef = define_copy; + defines->newdef = mm_strdup("1"); + } + defines->pertinent = true; + defines->used = NULL; + defines->next = pd; +} + +#define ECPG_GETOPT_LONG_REGRESSION 1 +int +main(int argc, char *const argv[]) +{ + static struct option ecpg_options[] = { + {"regression", no_argument, NULL, ECPG_GETOPT_LONG_REGRESSION}, + {NULL, 0, NULL, 0} + }; + + int fnr, + c, + out_option = 0; + bool verbose = false, + header_mode = false; + struct _include_path *ip; + const char *progname; + char my_exec_path[MAXPGPATH]; + char include_path[MAXPGPATH]; + + set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("ecpg")); + + progname = get_progname(argv[0]); + + if (find_my_exec(argv[0], my_exec_path) < 0) + { + fprintf(stderr, _("%s: could not locate my own executable path\n"), argv[0]); + return ILLEGAL_OPTION; + } + + if (argc > 1) + { + if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0) + { + help(progname); + exit(0); + } + if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0) + { + printf("ecpg (PostgreSQL) %s\n", PG_VERSION); + exit(0); + } + } + + output_filename = NULL; + while ((c = getopt_long(argc, argv, "vcio:I:tD:dC:r:h", ecpg_options, NULL)) != -1) + { + switch (c) + { + case ECPG_GETOPT_LONG_REGRESSION: + regression_mode = true; + break; + case 'o': + output_filename = mm_strdup(optarg); + if (strcmp(output_filename, "-") == 0) + base_yyout = stdout; + else + base_yyout = fopen(output_filename, PG_BINARY_W); + + if (base_yyout == NULL) + { + fprintf(stderr, _("%s: could not open file \"%s\": %s\n"), + progname, output_filename, strerror(errno)); + output_filename = NULL; + } + else + out_option = 1; + break; + case 'I': + add_include_path(optarg); + break; + case 't': + autocommit = true; + break; + case 'v': + verbose = true; + break; + case 'h': + header_mode = true; + /* this must include "-c" to make sense, so fall through */ + /* FALLTHROUGH */ + case 'c': + auto_create_c = true; + break; + case 'i': + system_includes = true; + break; + case 'C': + if (pg_strcasecmp(optarg, "INFORMIX") == 0 || pg_strcasecmp(optarg, "INFORMIX_SE") == 0) + { + char pkginclude_path[MAXPGPATH]; + char informix_path[MAXPGPATH]; + + compat = (pg_strcasecmp(optarg, "INFORMIX") == 0) ? ECPG_COMPAT_INFORMIX : ECPG_COMPAT_INFORMIX_SE; + get_pkginclude_path(my_exec_path, pkginclude_path); + snprintf(informix_path, MAXPGPATH, "%s/informix/esql", pkginclude_path); + add_include_path(informix_path); + } + else if (pg_strcasecmp(optarg, "ORACLE") == 0) + { + compat = ECPG_COMPAT_ORACLE; + } + else + { + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), argv[0]); + return ILLEGAL_OPTION; + } + break; + case 'r': + if (pg_strcasecmp(optarg, "no_indicator") == 0) + force_indicator = false; + else if (pg_strcasecmp(optarg, "prepare") == 0) + auto_prepare = true; + else if (pg_strcasecmp(optarg, "questionmarks") == 0) + questionmarks = true; + else + { + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), argv[0]); + return ILLEGAL_OPTION; + } + break; + case 'D': + add_preprocessor_define(optarg); + break; + case 'd': +#ifdef YYDEBUG + base_yydebug = 1; +#else + fprintf(stderr, _("%s: parser debug support (-d) not available\n"), + progname); +#endif + break; + default: + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), argv[0]); + return ILLEGAL_OPTION; + } + } + + add_include_path("."); + add_include_path("/usr/local/include"); + get_include_path(my_exec_path, include_path); + add_include_path(include_path); + add_include_path("/usr/include"); + + if (verbose) + { + fprintf(stderr, + _("%s, the PostgreSQL embedded C preprocessor, version %s\n"), + progname, PG_VERSION); + fprintf(stderr, _("EXEC SQL INCLUDE ... search starts here:\n")); + for (ip = include_paths; ip != NULL; ip = ip->next) + fprintf(stderr, " %s\n", ip->path); + fprintf(stderr, _("end of search list\n")); + return 0; + } + + if (optind >= argc) /* no files specified */ + { + fprintf(stderr, _("%s: no input files specified\n"), progname); + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), argv[0]); + return ILLEGAL_OPTION; + } + else + { + /* after the options there must not be anything but filenames */ + for (fnr = optind; fnr < argc; fnr++) + { + char *ptr2ext; + + /* If argv[fnr] is "-" we have to read from stdin */ + if (strcmp(argv[fnr], "-") == 0) + { + input_filename = mm_alloc(strlen("stdin") + 1); + strcpy(input_filename, "stdin"); + base_yyin = stdin; + } + else + { + input_filename = mm_alloc(strlen(argv[fnr]) + 5); + strcpy(input_filename, argv[fnr]); + + /* take care of relative paths */ + ptr2ext = last_dir_separator(input_filename); + ptr2ext = (ptr2ext ? strrchr(ptr2ext, '.') : strrchr(input_filename, '.')); + + /* no extension? */ + if (ptr2ext == NULL) + { + ptr2ext = input_filename + strlen(input_filename); + + /* no extension => add .pgc or .pgh */ + ptr2ext[0] = '.'; + ptr2ext[1] = 'p'; + ptr2ext[2] = 'g'; + ptr2ext[3] = (header_mode == true) ? 'h' : 'c'; + ptr2ext[4] = '\0'; + } + + base_yyin = fopen(input_filename, PG_BINARY_R); + } + + if (out_option == 0) /* calculate the output name */ + { + if (strcmp(input_filename, "stdin") == 0) + base_yyout = stdout; + else + { + output_filename = mm_alloc(strlen(input_filename) + 3); + strcpy(output_filename, input_filename); + + ptr2ext = strrchr(output_filename, '.'); + /* make extension = .c resp. .h */ + ptr2ext[1] = (header_mode == true) ? 'h' : 'c'; + ptr2ext[2] = '\0'; + + base_yyout = fopen(output_filename, PG_BINARY_W); + if (base_yyout == NULL) + { + fprintf(stderr, _("%s: could not open file \"%s\": %s\n"), + progname, output_filename, strerror(errno)); + free(output_filename); + output_filename = NULL; + free(input_filename); + continue; + } + } + } + + if (base_yyin == NULL) + fprintf(stderr, _("%s: could not open file \"%s\": %s\n"), + progname, argv[fnr], strerror(errno)); + else + { + struct cursor *ptr; + struct _defines *defptr; + struct typedefs *typeptr; + struct declared_list *list; + + /* remove old cursor definitions if any are still there */ + for (ptr = cur; ptr != NULL;) + { + struct cursor *this = ptr; + struct arguments *l1, + *l2; + + free(ptr->command); + free(ptr->connection); + free(ptr->name); + for (l1 = ptr->argsinsert; l1; l1 = l2) + { + l2 = l1->next; + free(l1); + } + for (l1 = ptr->argsresult; l1; l1 = l2) + { + l2 = l1->next; + free(l1); + } + ptr = ptr->next; + free(this); + } + cur = NULL; + + /* remove old declared statements if any are still there */ + for (list = g_declared_list; list != NULL;) + { + struct declared_list *this = list; + + list = list->next; + free(this); + } + + /* remove non-pertinent old defines as well */ + while (defines && !defines->pertinent) + { + defptr = defines; + defines = defines->next; + + free(defptr->newdef); + free(defptr->olddef); + free(defptr); + } + + for (defptr = defines; defptr != NULL; defptr = defptr->next) + { + struct _defines *this = defptr->next; + + if (this && !this->pertinent) + { + defptr->next = this->next; + + free(this->newdef); + free(this->olddef); + free(this); + } + } + + /* and old typedefs */ + for (typeptr = types; typeptr != NULL;) + { + struct typedefs *this = typeptr; + + free(typeptr->name); + ECPGfree_struct_member(typeptr->struct_member_list); + free(typeptr->type); + typeptr = typeptr->next; + free(this); + } + types = NULL; + + /* initialize whenever structures */ + memset(&when_error, 0, sizeof(struct when)); + memset(&when_nf, 0, sizeof(struct when)); + memset(&when_warn, 0, sizeof(struct when)); + + /* and structure member lists */ + memset(struct_member_list, 0, sizeof(struct_member_list)); + + /* + * and our variable counter for out of scope cursors' + * variables + */ + ecpg_internal_var = 0; + + /* finally the actual connection */ + connection = NULL; + + /* initialize lex */ + lex_init(); + + /* we need several includes */ + /* but not if we are in header mode */ + if (regression_mode) + fprintf(base_yyout, "/* Processed by ecpg (regression mode) */\n"); + else + fprintf(base_yyout, "/* Processed by ecpg (%s) */\n", PG_VERSION); + + if (header_mode == false) + { + fprintf(base_yyout, "/* These include files are added by the preprocessor */\n#include \n#include \n#include \n"); + + /* add some compatibility headers */ + if (INFORMIX_MODE) + fprintf(base_yyout, "/* Needed for informix compatibility */\n#include \n"); + + fprintf(base_yyout, "/* End of automatic include section */\n"); + } + + if (regression_mode) + fprintf(base_yyout, "#define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))\n"); + + output_line_number(); + + /* and parse the source */ + base_yyparse(); + + /* + * Check whether all cursors were indeed opened. It does not + * really make sense to declare a cursor but not open it. + */ + for (ptr = cur; ptr != NULL; ptr = ptr->next) + if (!(ptr->opened)) + mmerror(PARSE_ERROR, ET_WARNING, "cursor \"%s\" has been declared but not opened", ptr->name); + + if (base_yyin != NULL && base_yyin != stdin) + fclose(base_yyin); + if (out_option == 0 && base_yyout != stdout) + fclose(base_yyout); + + /* + * If there was an error, delete the output file. + */ + if (ret_value != 0) + { + if (strcmp(output_filename, "-") != 0 && unlink(output_filename) != 0) + fprintf(stderr, _("could not remove output file \"%s\"\n"), output_filename); + } + } + + if (output_filename && out_option == 0) + { + free(output_filename); + output_filename = NULL; + } + + free(input_filename); + } + } + return ret_value; +} diff --git a/src/interfaces/ecpg/preproc/ecpg.header b/src/interfaces/ecpg/preproc/ecpg.header new file mode 100644 index 0000000..b8508a9 --- /dev/null +++ b/src/interfaces/ecpg/preproc/ecpg.header @@ -0,0 +1,626 @@ +/* src/interfaces/ecpg/preproc/ecpg.header */ + +/* Copyright comment */ +%{ +#include "postgres_fe.h" + +#include "preproc_extern.h" +#include "ecpg_config.h" +#include + +/* Location tracking support --- simpler than bison's default */ +#define YYLLOC_DEFAULT(Current, Rhs, N) \ + do { \ + if (N) \ + (Current) = (Rhs)[1]; \ + else \ + (Current) = (Rhs)[0]; \ + } while (0) + +/* + * The %name-prefix option below will make bison call base_yylex, but we + * really want it to call filtered_base_yylex (see parser.c). + */ +#define base_yylex filtered_base_yylex + +/* + * This is only here so the string gets into the POT. Bison uses it + * internally. + */ +#define bison_gettext_dummy gettext_noop("syntax error") + +/* + * Variables containing simple states. + */ +int struct_level = 0; +int braces_open; /* brace level counter */ +char *current_function; +int ecpg_internal_var = 0; +char *connection = NULL; +char *input_filename = NULL; + +static int FoundInto = 0; +static int initializer = 0; +static int pacounter = 1; +static char pacounter_buffer[sizeof(int) * CHAR_BIT * 10 / 3]; /* a rough guess at the size we need */ +static struct this_type actual_type[STRUCT_DEPTH]; +static char *actual_startline[STRUCT_DEPTH]; +static int varchar_counter = 1; +static int bytea_counter = 1; + +/* temporarily store struct members while creating the data structure */ +struct ECPGstruct_member *struct_member_list[STRUCT_DEPTH] = { NULL }; + +/* also store struct type so we can do a sizeof() later */ +static char *ECPGstruct_sizeof = NULL; + +/* for forward declarations we have to store some data as well */ +static char *forward_name = NULL; + +struct ECPGtype ecpg_no_indicator = {ECPGt_NO_INDICATOR, NULL, NULL, NULL, {NULL}, 0}; +struct variable no_indicator = {"no_indicator", &ecpg_no_indicator, 0, NULL}; + +static struct ECPGtype ecpg_query = {ECPGt_char_variable, NULL, NULL, NULL, {NULL}, 0}; + +static void vmmerror(int error_code, enum errortype type, const char *error, va_list ap) pg_attribute_printf(3, 0); + +static bool check_declared_list(const char*); + +/* + * Handle parsing errors and warnings + */ +static void +vmmerror(int error_code, enum errortype type, const char *error, va_list ap) +{ + /* localize the error message string */ + error = _(error); + + fprintf(stderr, "%s:%d: ", input_filename, base_yylineno); + + switch(type) + { + case ET_WARNING: + fprintf(stderr, _("WARNING: ")); + break; + case ET_ERROR: + fprintf(stderr, _("ERROR: ")); + break; + } + + vfprintf(stderr, error, ap); + + fprintf(stderr, "\n"); + + switch(type) + { + case ET_WARNING: + break; + case ET_ERROR: + ret_value = error_code; + break; + } +} + +void +mmerror(int error_code, enum errortype type, const char *error, ...) +{ + va_list ap; + + va_start(ap, error); + vmmerror(error_code, type, error, ap); + va_end(ap); +} + +void +mmfatal(int error_code, const char *error, ...) +{ + va_list ap; + + va_start(ap, error); + vmmerror(error_code, ET_ERROR, error, ap); + va_end(ap); + + if (base_yyin) + fclose(base_yyin); + if (base_yyout) + fclose(base_yyout); + + if (strcmp(output_filename, "-") != 0 && unlink(output_filename) != 0) + fprintf(stderr, _("could not remove output file \"%s\"\n"), output_filename); + exit(error_code); +} + +/* + * string concatenation + */ + +static char * +cat2_str(char *str1, char *str2) +{ + char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) + 2); + + strcpy(res_str, str1); + if (strlen(str1) != 0 && strlen(str2) != 0) + strcat(res_str, " "); + strcat(res_str, str2); + free(str1); + free(str2); + return res_str; +} + +static char * +cat_str(int count, ...) +{ + va_list args; + int i; + char *res_str; + + va_start(args, count); + + res_str = va_arg(args, char *); + + /* now add all other strings */ + for (i = 1; i < count; i++) + res_str = cat2_str(res_str, va_arg(args, char *)); + + va_end(args); + + return res_str; +} + +static char * +make2_str(char *str1, char *str2) +{ + char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) + 1); + + strcpy(res_str, str1); + strcat(res_str, str2); + free(str1); + free(str2); + return res_str; +} + +static char * +make3_str(char *str1, char *str2, char *str3) +{ + char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) +strlen(str3) + 1); + + strcpy(res_str, str1); + strcat(res_str, str2); + strcat(res_str, str3); + free(str1); + free(str2); + free(str3); + return res_str; +} + +/* and the rest */ +static char * +make_name(void) +{ + return mm_strdup(base_yytext); +} + +static char * +create_questionmarks(char *name, bool array) +{ + struct variable *p = find_variable(name); + int count; + char *result = EMPTY; + + /* In case we have a struct, we have to print as many "?" as there are attributes in the struct + * An array is only allowed together with an element argument + * This is essentially only used for inserts, but using a struct as input parameter is an error anywhere else + * so we don't have to worry here. */ + + if (p->type->type == ECPGt_struct || (array && p->type->type == ECPGt_array && p->type->u.element->type == ECPGt_struct)) + { + struct ECPGstruct_member *m; + + if (p->type->type == ECPGt_struct) + m = p->type->u.members; + else + m = p->type->u.element->u.members; + + for (count = 0; m != NULL; m=m->next, count++); + } + else + count = 1; + + for (; count > 0; count --) + { + sprintf(pacounter_buffer, "$%d", pacounter++); + result = cat_str(3, result, mm_strdup(pacounter_buffer), mm_strdup(" , ")); + } + + /* removed the trailing " ," */ + + result[strlen(result)-3] = '\0'; + return result; +} + +static char * +adjust_outofscope_cursor_vars(struct cursor *cur) +{ + /* Informix accepts DECLARE with variables that are out of scope when OPEN is called. + * For instance you can DECLARE a cursor in one function, and OPEN/FETCH/CLOSE + * it in another functions. This is very useful for e.g. event-driver programming, + * but may also lead to dangerous programming. The limitation when this is allowed + * and doesn't cause problems have to be documented, like the allocated variables + * must not be realloc()'ed. + * + * We have to change the variables to our own struct and just store the pointer + * instead of the variable. Do it only for local variables, not for globals. + */ + + char *result = EMPTY; + int insert; + + for (insert = 1; insert >= 0; insert--) + { + struct arguments *list; + struct arguments *ptr; + struct arguments *newlist = NULL; + struct variable *newvar, *newind; + + list = (insert ? cur->argsinsert : cur->argsresult); + + for (ptr = list; ptr != NULL; ptr = ptr->next) + { + char var_text[20]; + char *original_var; + bool skip_set_var = false; + bool var_ptr = false; + + /* change variable name to "ECPGget_var()" */ + original_var = ptr->variable->name; + sprintf(var_text, "%d))", ecpg_internal_var); + + /* Don't emit ECPGset_var() calls for global variables */ + if (ptr->variable->brace_level == 0) + { + newvar = ptr->variable; + skip_set_var = true; + } + else if ((ptr->variable->type->type == ECPGt_char_variable) + && (strncmp(ptr->variable->name, "ECPGprepared_statement", strlen("ECPGprepared_statement")) == 0)) + { + newvar = ptr->variable; + skip_set_var = true; + } + else if ((ptr->variable->type->type != ECPGt_varchar + && ptr->variable->type->type != ECPGt_char + && ptr->variable->type->type != ECPGt_unsigned_char + && ptr->variable->type->type != ECPGt_string + && ptr->variable->type->type != ECPGt_bytea) + && atoi(ptr->variable->type->size) > 1) + { + newvar = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, + mm_strdup("1"), + ptr->variable->type->u.element->counter), + ptr->variable->type->size), + 0); + } + else if ((ptr->variable->type->type == ECPGt_varchar + || ptr->variable->type->type == ECPGt_char + || ptr->variable->type->type == ECPGt_unsigned_char + || ptr->variable->type->type == ECPGt_string + || ptr->variable->type->type == ECPGt_bytea) + && atoi(ptr->variable->type->size) > 1) + { + newvar = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->variable->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->variable->type->type, + ptr->variable->type->size, + ptr->variable->type->counter), + 0); + if (ptr->variable->type->type == ECPGt_varchar || + ptr->variable->type->type == ECPGt_bytea) + var_ptr = true; + } + else if (ptr->variable->type->type == ECPGt_struct + || ptr->variable->type->type == ECPGt_union) + { + newvar = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->variable->type->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->variable->type->u.members, + ptr->variable->type->type, + ptr->variable->type->type_name, + ptr->variable->type->struct_sizeof), + 0); + var_ptr = true; + } + else if (ptr->variable->type->type == ECPGt_array) + { + if (ptr->variable->type->u.element->type == ECPGt_struct + || ptr->variable->type->u.element->type == ECPGt_union) + { + newvar = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->variable->type->u.element->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->variable->type->u.element->u.members, + ptr->variable->type->u.element->type, + ptr->variable->type->u.element->type_name, + ptr->variable->type->u.element->struct_sizeof), + 0); + } + else + { + newvar = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, + ptr->variable->type->u.element->size, + ptr->variable->type->u.element->counter), + ptr->variable->type->size), + 0); + var_ptr = true; + } + } + else + { + newvar = new_variable(cat_str(4, mm_strdup("*("), + mm_strdup(ecpg_type_name(ptr->variable->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->variable->type->type, + ptr->variable->type->size, + ptr->variable->type->counter), + 0); + var_ptr = true; + } + + /* create call to "ECPGset_var(, , . )" */ + if (!skip_set_var) + { + sprintf(var_text, "%d, %s", ecpg_internal_var++, var_ptr ? "&(" : "("); + result = cat_str(5, result, mm_strdup("ECPGset_var("), + mm_strdup(var_text), mm_strdup(original_var), + mm_strdup("), __LINE__);\n")); + } + + /* now the indicator if there is one and it's not a global variable */ + if ((ptr->indicator->type->type == ECPGt_NO_INDICATOR) || (ptr->indicator->brace_level == 0)) + { + newind = ptr->indicator; + } + else + { + /* change variable name to "ECPGget_var()" */ + original_var = ptr->indicator->name; + sprintf(var_text, "%d))", ecpg_internal_var); + var_ptr = false; + + if (ptr->indicator->type->type == ECPGt_struct + || ptr->indicator->type->type == ECPGt_union) + { + newind = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->indicator->type->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->indicator->type->u.members, + ptr->indicator->type->type, + ptr->indicator->type->type_name, + ptr->indicator->type->struct_sizeof), + 0); + var_ptr = true; + } + else if (ptr->indicator->type->type == ECPGt_array) + { + if (ptr->indicator->type->u.element->type == ECPGt_struct + || ptr->indicator->type->u.element->type == ECPGt_union) + { + newind = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->indicator->type->u.element->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->indicator->type->u.element->u.members, + ptr->indicator->type->u.element->type, + ptr->indicator->type->u.element->type_name, + ptr->indicator->type->u.element->struct_sizeof), + 0); + } + else + { + newind = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->indicator->type->u.element->type)), + mm_strdup(" *)(ECPGget_var("), mm_strdup(var_text)), + ECPGmake_array_type(ECPGmake_simple_type(ptr->indicator->type->u.element->type, + ptr->indicator->type->u.element->size, + ptr->indicator->type->u.element->counter), + ptr->indicator->type->size), + 0); + var_ptr = true; + } + } + else if (atoi(ptr->indicator->type->size) > 1) + { + newind = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->indicator->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->indicator->type->type, + ptr->indicator->type->size, + ptr->variable->type->counter), + 0); + } + else + { + newind = new_variable(cat_str(4, mm_strdup("*("), + mm_strdup(ecpg_type_name(ptr->indicator->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->indicator->type->type, + ptr->indicator->type->size, + ptr->variable->type->counter), + 0); + var_ptr = true; + } + + /* create call to "ECPGset_var(, . )" */ + sprintf(var_text, "%d, %s", ecpg_internal_var++, var_ptr ? "&(" : "("); + result = cat_str(5, result, mm_strdup("ECPGset_var("), + mm_strdup(var_text), mm_strdup(original_var), + mm_strdup("), __LINE__);\n")); + } + + add_variable_to_tail(&newlist, newvar, newind); + } + + if (insert) + cur->argsinsert_oos = newlist; + else + cur->argsresult_oos = newlist; + } + + return result; +} + +/* This tests whether the cursor was declared and opened in the same function. */ +#define SAMEFUNC(cur) \ + ((cur->function == NULL) || \ + (cur->function != NULL && strcmp(cur->function, current_function) == 0)) + +static struct cursor * +add_additional_variables(char *name, bool insert) +{ + struct cursor *ptr; + struct arguments *p; + int (* strcmp_fn)(const char *, const char *) = ((name[0] == ':' || name[0] == '"') ? strcmp : pg_strcasecmp); + + for (ptr = cur; ptr != NULL; ptr=ptr->next) + { + if (strcmp_fn(ptr->name, name) == 0) + break; + } + + if (ptr == NULL) + { + mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" does not exist", name); + return NULL; + } + + if (insert) + { + /* add all those input variables that were given earlier + * note that we have to append here but have to keep the existing order */ + for (p = (SAMEFUNC(ptr) ? ptr->argsinsert : ptr->argsinsert_oos); p; p = p->next) + add_variable_to_tail(&argsinsert, p->variable, p->indicator); + } + + /* add all those output variables that were given earlier */ + for (p = (SAMEFUNC(ptr) ? ptr->argsresult : ptr->argsresult_oos); p; p = p->next) + add_variable_to_tail(&argsresult, p->variable, p->indicator); + + return ptr; +} + +static void +add_typedef(char *name, char *dimension, char *length, enum ECPGttype type_enum, + char *type_dimension, char *type_index, int initializer, int array) +{ + /* add entry to list */ + struct typedefs *ptr, *this; + + if ((type_enum == ECPGt_struct || + type_enum == ECPGt_union) && + initializer == 1) + mmerror(PARSE_ERROR, ET_ERROR, "initializer not allowed in type definition"); + else if (INFORMIX_MODE && strcmp(name, "string") == 0) + mmerror(PARSE_ERROR, ET_ERROR, "type name \"string\" is reserved in Informix mode"); + else + { + for (ptr = types; ptr != NULL; ptr = ptr->next) + { + if (strcmp(name, ptr->name) == 0) + /* re-definition is a bug */ + mmerror(PARSE_ERROR, ET_ERROR, "type \"%s\" is already defined", name); + } + adjust_array(type_enum, &dimension, &length, type_dimension, type_index, array, true); + + this = (struct typedefs *) mm_alloc(sizeof(struct typedefs)); + + /* initial definition */ + this->next = types; + this->name = name; + this->brace_level = braces_open; + this->type = (struct this_type *) mm_alloc(sizeof(struct this_type)); + this->type->type_enum = type_enum; + this->type->type_str = mm_strdup(name); + this->type->type_dimension = dimension; /* dimension of array */ + this->type->type_index = length; /* length of string */ + this->type->type_sizeof = ECPGstruct_sizeof; + this->struct_member_list = (type_enum == ECPGt_struct || type_enum == ECPGt_union) ? + ECPGstruct_member_dup(struct_member_list[struct_level]) : NULL; + + if (type_enum != ECPGt_varchar && + type_enum != ECPGt_bytea && + type_enum != ECPGt_char && + type_enum != ECPGt_unsigned_char && + type_enum != ECPGt_string && + atoi(this->type->type_index) >= 0) + mmerror(PARSE_ERROR, ET_ERROR, "multidimensional arrays for simple data types are not supported"); + + types = this; + } +} + +/* + * check an SQL identifier is declared or not. + * If it is already declared, the global variable + * connection will be changed to the related connection. + */ +static bool +check_declared_list(const char *name) +{ + struct declared_list *ptr = NULL; + for (ptr = g_declared_list; ptr != NULL; ptr = ptr -> next) + { + if (!ptr->connection) + continue; + if (strcmp(name, ptr -> name) == 0) + { + if (connection && strcmp(ptr->connection, connection) != 0) + mmerror(PARSE_ERROR, ET_WARNING, "connection %s is overwritten with %s by DECLARE statement %s", connection, ptr->connection, name); + connection = mm_strdup(ptr -> connection); + return true; + } + } + return false; +} +%} + +%expect 0 +%name-prefix="base_yy" +%locations + +%union { + double dval; + char *str; + int ival; + struct when action; + struct index index; + int tagname; + struct this_type type; + enum ECPGttype type_enum; + enum ECPGdtype dtype_enum; + struct fetch_desc descriptor; + struct su_symbol struct_union; + struct prep prep; + struct exec exec; + struct describe describe; +} diff --git a/src/interfaces/ecpg/preproc/ecpg.tokens b/src/interfaces/ecpg/preproc/ecpg.tokens new file mode 100644 index 0000000..8e0527f --- /dev/null +++ b/src/interfaces/ecpg/preproc/ecpg.tokens @@ -0,0 +1,26 @@ +/* src/interfaces/ecpg/preproc/ecpg.tokens */ + +/* special embedded SQL tokens */ +%token SQL_ALLOCATE SQL_AUTOCOMMIT SQL_BOOL SQL_BREAK + SQL_CARDINALITY SQL_CONNECT + SQL_COUNT + SQL_DATETIME_INTERVAL_CODE + SQL_DATETIME_INTERVAL_PRECISION SQL_DESCRIBE + SQL_DESCRIPTOR SQL_DISCONNECT SQL_FOUND + SQL_FREE SQL_GET SQL_GO SQL_GOTO SQL_IDENTIFIED + SQL_INDICATOR SQL_KEY_MEMBER SQL_LENGTH + SQL_LONG SQL_NULLABLE SQL_OCTET_LENGTH + SQL_OPEN SQL_OUTPUT SQL_REFERENCE + SQL_RETURNED_LENGTH SQL_RETURNED_OCTET_LENGTH SQL_SCALE + SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQLERROR + SQL_SQLPRINT SQL_SQLWARNING SQL_START SQL_STOP + SQL_STRUCT SQL_UNSIGNED SQL_VAR SQL_WHENEVER + +/* C tokens */ +%token S_ADD S_AND S_ANYTHING S_AUTO S_CONST S_DEC S_DIV + S_DOTPOINT S_EQUAL S_EXTERN S_INC S_LSHIFT S_MEMPOINT + S_MEMBER S_MOD S_MUL S_NEQUAL S_OR S_REGISTER S_RSHIFT + S_STATIC S_SUB S_VOLATILE + S_TYPEDEF + +%token CSTRING CVARIABLE CPP_LINE IP diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer new file mode 100644 index 0000000..daf979a --- /dev/null +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -0,0 +1,1931 @@ +/* src/interfaces/ecpg/preproc/ecpg.trailer */ + +statements: /*EMPTY*/ + | statements statement + ; + +statement: ecpgstart at toplevel_stmt ';' + { + if (connection) + free(connection); + connection = NULL; + } + | ecpgstart toplevel_stmt ';' + { + if (connection) + free(connection); + connection = NULL; + } + | ecpgstart ECPGVarDeclaration + { + fprintf(base_yyout, "%s", $2); + free($2); + output_line_number(); + } + | ECPGDeclaration + | c_thing { fprintf(base_yyout, "%s", $1); free($1); } + | CPP_LINE { fprintf(base_yyout, "%s", $1); free($1); } + | '{' { braces_open++; fputs("{", base_yyout); } + | '}' + { + remove_typedefs(braces_open); + remove_variables(braces_open--); + if (braces_open == 0) + { + free(current_function); + current_function = NULL; + } + fputs("}", base_yyout); + } + ; + +CreateAsStmt: CREATE OptTemp TABLE create_as_target AS {FoundInto = 0;} SelectStmt opt_with_data + { + if (FoundInto == 1) + mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE AS cannot specify INTO"); + + $$ = cat_str(7, mm_strdup("create"), $2, mm_strdup("table"), $4, mm_strdup("as"), $7, $8); + } + | CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS {FoundInto = 0;} SelectStmt opt_with_data + { + if (FoundInto == 1) + mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE AS cannot specify INTO"); + + $$ = cat_str(7, mm_strdup("create"), $2, mm_strdup("table if not exists"), $7, mm_strdup("as"), $10, $11); + } + ; + +at: AT connection_object + { + connection = $2; + /* + * Do we have a variable as connection target? Remove the variable + * from the variable list or else it will be used twice. + */ + if (argsinsert != NULL) + argsinsert = NULL; + } + ; + +/* + * the exec sql connect statement: connect to the given database + */ +ECPGConnect: SQL_CONNECT TO connection_target opt_connection_name opt_user + { $$ = cat_str(5, $3, mm_strdup(","), $5, mm_strdup(","), $4); } + | SQL_CONNECT TO DEFAULT + { $$ = mm_strdup("NULL, NULL, NULL, \"DEFAULT\""); } + /* also allow ORACLE syntax */ + | SQL_CONNECT ora_user + { $$ = cat_str(3, mm_strdup("NULL,"), $2, mm_strdup(", NULL")); } + | DATABASE connection_target + { $$ = cat2_str($2, mm_strdup(", NULL, NULL, NULL")); } + ; + +connection_target: opt_database_name opt_server opt_port + { + /* old style: dbname[@server][:port] */ + if (strlen($2) > 0 && *($2) != '@') + mmerror(PARSE_ERROR, ET_ERROR, "expected \"@\", found \"%s\"", $2); + + /* C strings need to be handled differently */ + if ($1[0] == '\"') + $$ = $1; + else + $$ = make3_str(mm_strdup("\""), make3_str($1, $2, $3), mm_strdup("\"")); + } + | db_prefix ':' server opt_port '/' opt_database_name opt_options + { + /* new style: :postgresql://server[:port][/dbname] */ + if (strncmp($1, "unix:postgresql", strlen("unix:postgresql")) != 0 && strncmp($1, "tcp:postgresql", strlen("tcp:postgresql")) != 0) + mmerror(PARSE_ERROR, ET_ERROR, "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported"); + + if (strncmp($3, "//", strlen("//")) != 0) + mmerror(PARSE_ERROR, ET_ERROR, "expected \"://\", found \"%s\"", $3); + + if (strncmp($1, "unix", strlen("unix")) == 0 && + strncmp($3 + strlen("//"), "localhost", strlen("localhost")) != 0 && + strncmp($3 + strlen("//"), "127.0.0.1", strlen("127.0.0.1")) != 0) + mmerror(PARSE_ERROR, ET_ERROR, "Unix-domain sockets only work on \"localhost\" but not on \"%s\"", $3 + strlen("//")); + + $$ = make3_str(make3_str(mm_strdup("\""), $1, mm_strdup(":")), $3, make3_str(make3_str($4, mm_strdup("/"), $6), $7, mm_strdup("\""))); + } + | char_variable + { + $$ = $1; + } + | ecpg_sconst + { + /* We can only process double quoted strings not single quotes ones, + * so we change the quotes. + * Note, that the rule for ecpg_sconst adds these single quotes. */ + $1[0] = '\"'; + $1[strlen($1)-1] = '\"'; + $$ = $1; + } + ; + +opt_database_name: name { $$ = $1; } + | /*EMPTY*/ { $$ = EMPTY; } + ; + +db_prefix: ecpg_ident cvariable + { + if (strcmp($2, "postgresql") != 0 && strcmp($2, "postgres") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "expected \"postgresql\", found \"%s\"", $2); + + if (strcmp($1, "tcp") != 0 && strcmp($1, "unix") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "invalid connection type: %s", $1); + + $$ = make3_str($1, mm_strdup(":"), $2); + } + ; + +server: Op server_name + { + if (strcmp($1, "@") != 0 && strcmp($1, "//") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "expected \"@\" or \"://\", found \"%s\"", $1); + + $$ = make2_str($1, $2); + } + ; + +opt_server: server { $$ = $1; } + | /*EMPTY*/ { $$ = EMPTY; } + ; + +server_name: ColId { $$ = $1; } + | ColId '.' server_name { $$ = make3_str($1, mm_strdup("."), $3); } + | IP { $$ = make_name(); } + ; + +opt_port: ':' Iconst { $$ = make2_str(mm_strdup(":"), $2); } + | /*EMPTY*/ { $$ = EMPTY; } + ; + +opt_connection_name: AS connection_object { $$ = $2; } + | /*EMPTY*/ { $$ = mm_strdup("NULL"); } + ; + +opt_user: USER ora_user { $$ = $2; } + | /*EMPTY*/ { $$ = mm_strdup("NULL, NULL"); } + ; + +ora_user: user_name + { $$ = cat2_str($1, mm_strdup(", NULL")); } + | user_name '/' user_name + { $$ = cat_str(3, $1, mm_strdup(","), $3); } + | user_name SQL_IDENTIFIED BY user_name + { $$ = cat_str(3, $1, mm_strdup(","), $4); } + | user_name USING user_name + { $$ = cat_str(3, $1, mm_strdup(","), $3); } + ; + +user_name: RoleId + { + if ($1[0] == '\"') + $$ = $1; + else + $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); + } + | ecpg_sconst + { + if ($1[0] == '\"') + $$ = $1; + else + $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); + } + | civar + { + enum ECPGttype type = argsinsert->variable->type->type; + + /* if array see what's inside */ + if (type == ECPGt_array) + type = argsinsert->variable->type->u.element->type; + + /* handle varchars */ + if (type == ECPGt_varchar) + $$ = make2_str(mm_strdup(argsinsert->variable->name), mm_strdup(".arr")); + else + $$ = mm_strdup(argsinsert->variable->name); + } + ; + +char_variable: cvariable + { + /* check if we have a string variable */ + struct variable *p = find_variable($1); + enum ECPGttype type = p->type->type; + + /* If we have just one character this is not a string */ + if (atol(p->type->size) == 1) + mmerror(PARSE_ERROR, ET_ERROR, "invalid data type"); + else + { + /* if array see what's inside */ + if (type == ECPGt_array) + type = p->type->u.element->type; + + switch (type) + { + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + $$ = $1; + break; + case ECPGt_varchar: + $$ = make2_str($1, mm_strdup(".arr")); + break; + default: + mmerror(PARSE_ERROR, ET_ERROR, "invalid data type"); + $$ = $1; + break; + } + } + } + ; + +opt_options: Op connect_options + { + if (strlen($1) == 0) + mmerror(PARSE_ERROR, ET_ERROR, "incomplete statement"); + + if (strcmp($1, "?") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "unrecognized token \"%s\"", $1); + + $$ = make2_str(mm_strdup("?"), $2); + } + | /*EMPTY*/ { $$ = EMPTY; } + ; + +connect_options: ColId opt_opt_value + { + $$ = make2_str($1, $2); + } + | ColId opt_opt_value Op connect_options + { + if (strlen($3) == 0) + mmerror(PARSE_ERROR, ET_ERROR, "incomplete statement"); + + if (strcmp($3, "&") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "unrecognized token \"%s\"", $3); + + $$ = cat_str(3, make2_str($1, $2), $3, $4); + } + ; + +opt_opt_value: /*EMPTY*/ + { $$ = EMPTY; } + | '=' Iconst + { $$ = make2_str(mm_strdup("="), $2); } + | '=' ecpg_ident + { $$ = make2_str(mm_strdup("="), $2); } + | '=' civar + { $$ = make2_str(mm_strdup("="), $2); } + ; + +prepared_name: name + { + if ($1[0] == '\"' && $1[strlen($1)-1] == '\"') /* already quoted? */ + $$ = $1; + else /* not quoted => convert to lowercase */ + { + size_t i; + + for (i = 0; i< strlen($1); i++) + $1[i] = tolower((unsigned char) $1[i]); + + $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); + } + } + | char_variable { $$ = $1; } + ; + +/* + * Declare Statement + */ +ECPGDeclareStmt: DECLARE prepared_name STATEMENT + { + struct declared_list *ptr = NULL; + /* Check whether the declared name has been defined or not */ + for (ptr = g_declared_list; ptr != NULL; ptr = ptr->next) + { + if (strcmp($2, ptr->name) == 0) + { + /* re-definition is not allowed */ + mmerror(PARSE_ERROR, ET_ERROR, "name \"%s\" is already declared", ptr->name); + } + } + + /* Add a new declared name into the g_declared_list */ + ptr = NULL; + ptr = (struct declared_list *)mm_alloc(sizeof(struct declared_list)); + if (ptr) + { + /* initial definition */ + ptr -> name = $2; + if (connection) + ptr -> connection = mm_strdup(connection); + else + ptr -> connection = NULL; + + ptr -> next = g_declared_list; + g_declared_list = ptr; + } + + $$ = cat_str(3 , mm_strdup("/* declare "), mm_strdup($2), mm_strdup(" as an SQL identifier */")); + } +; + +/* + * Declare a prepared cursor. The syntax is different from the standard + * declare statement, so we create a new rule. + */ +ECPGCursorStmt: DECLARE cursor_name cursor_options CURSOR opt_hold FOR prepared_name + { + struct cursor *ptr, *this; + char *cursor_marker = $2[0] == ':' ? mm_strdup("$0") : mm_strdup($2); + int (* strcmp_fn)(const char *, const char *) = (($2[0] == ':' || $2[0] == '"') ? strcmp : pg_strcasecmp); + struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable)); + char *comment; + char *con; + + if (INFORMIX_MODE && pg_strcasecmp($2, "database") == 0) + mmfatal(PARSE_ERROR, "\"database\" cannot be used as cursor name in INFORMIX mode"); + + check_declared_list($7); + con = connection ? connection : "NULL"; + for (ptr = cur; ptr != NULL; ptr = ptr->next) + { + if (strcmp_fn($2, ptr->name) == 0) + { + /* re-definition is a bug */ + if ($2[0] == ':') + mmerror(PARSE_ERROR, ET_ERROR, "using variable \"%s\" in different declare statements is not supported", $2+1); + else + mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" is already defined", $2); + } + } + + this = (struct cursor *) mm_alloc(sizeof(struct cursor)); + + /* initial definition */ + this->next = cur; + this->name = $2; + this->function = (current_function ? mm_strdup(current_function) : NULL); + this->connection = connection ? mm_strdup(connection) : NULL; + this->command = cat_str(6, mm_strdup("declare"), cursor_marker, $3, mm_strdup("cursor"), $5, mm_strdup("for $1")); + this->argsresult = NULL; + this->argsresult_oos = NULL; + + thisquery->type = &ecpg_query; + thisquery->brace_level = 0; + thisquery->next = NULL; + thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement(, , __LINE__)") + strlen(con) + strlen($7)); + sprintf(thisquery->name, "ECPGprepared_statement(%s, %s, __LINE__)", con, $7); + + this->argsinsert = NULL; + this->argsinsert_oos = NULL; + if ($2[0] == ':') + { + struct variable *var = find_variable($2 + 1); + remove_variable_from_list(&argsinsert, var); + add_variable_to_head(&(this->argsinsert), var, &no_indicator); + } + add_variable_to_head(&(this->argsinsert), thisquery, &no_indicator); + + cur = this; + + comment = cat_str(3, mm_strdup("/*"), mm_strdup(this->command), mm_strdup("*/")); + + $$ = cat_str(2, adjust_outofscope_cursor_vars(this), + comment); + } + ; + +ECPGExecuteImmediateStmt: EXECUTE IMMEDIATE execstring + { + /* execute immediate means prepare the statement and + * immediately execute it */ + $$ = $3; + }; +/* + * variable declaration outside exec sql declare block + */ +ECPGVarDeclaration: single_vt_declaration; + +single_vt_declaration: type_declaration { $$ = $1; } + | var_declaration { $$ = $1; } + ; + +precision: NumericOnly { $$ = $1; }; + +opt_scale: ',' NumericOnly { $$ = $2; } + | /* EMPTY */ { $$ = EMPTY; } + ; + +ecpg_interval: opt_interval { $$ = $1; } + | YEAR_P TO MINUTE_P { $$ = mm_strdup("year to minute"); } + | YEAR_P TO SECOND_P { $$ = mm_strdup("year to second"); } + | DAY_P TO DAY_P { $$ = mm_strdup("day to day"); } + | MONTH_P TO MONTH_P { $$ = mm_strdup("month to month"); } + ; + +/* + * variable declaration inside exec sql declare block + */ +ECPGDeclaration: sql_startdeclare + { fputs("/* exec sql begin declare section */", base_yyout); } + var_type_declarations sql_enddeclare + { + fprintf(base_yyout, "%s/* exec sql end declare section */", $3); + free($3); + output_line_number(); + } + ; + +sql_startdeclare: ecpgstart BEGIN_P DECLARE SQL_SECTION ';' {}; + +sql_enddeclare: ecpgstart END_P DECLARE SQL_SECTION ';' {}; + +var_type_declarations: /*EMPTY*/ { $$ = EMPTY; } + | vt_declarations { $$ = $1; } + ; + +vt_declarations: single_vt_declaration { $$ = $1; } + | CPP_LINE { $$ = $1; } + | vt_declarations single_vt_declaration { $$ = cat2_str($1, $2); } + | vt_declarations CPP_LINE { $$ = cat2_str($1, $2); } + ; + +variable_declarations: var_declaration { $$ = $1; } + | variable_declarations var_declaration { $$ = cat2_str($1, $2); } + ; + +type_declaration: S_TYPEDEF + { + /* reset this variable so we see if there was */ + /* an initializer specified */ + initializer = 0; + } + var_type opt_pointer ECPGColLabelCommon opt_array_bounds ';' + { + add_typedef($5, $6.index1, $6.index2, $3.type_enum, $3.type_dimension, $3.type_index, initializer, *$4 ? 1 : 0); + + fprintf(base_yyout, "typedef %s %s %s %s;\n", $3.type_str, *$4 ? "*" : "", $5, $6.str); + output_line_number(); + $$ = mm_strdup(""); + }; + +var_declaration: storage_declaration + var_type + { + actual_type[struct_level].type_enum = $2.type_enum; + actual_type[struct_level].type_str = $2.type_str; + actual_type[struct_level].type_dimension = $2.type_dimension; + actual_type[struct_level].type_index = $2.type_index; + actual_type[struct_level].type_sizeof = $2.type_sizeof; + + actual_startline[struct_level] = hashline_number(); + } + variable_list ';' + { + $$ = cat_str(5, actual_startline[struct_level], $1, $2.type_str, $4, mm_strdup(";\n")); + } + | var_type + { + actual_type[struct_level].type_enum = $1.type_enum; + actual_type[struct_level].type_str = $1.type_str; + actual_type[struct_level].type_dimension = $1.type_dimension; + actual_type[struct_level].type_index = $1.type_index; + actual_type[struct_level].type_sizeof = $1.type_sizeof; + + actual_startline[struct_level] = hashline_number(); + } + variable_list ';' + { + $$ = cat_str(4, actual_startline[struct_level], $1.type_str, $3, mm_strdup(";\n")); + } + | struct_union_type_with_symbol ';' + { + $$ = cat2_str($1, mm_strdup(";")); + } + ; + +opt_bit_field: ':' Iconst { $$ =cat2_str(mm_strdup(":"), $2); } + | /* EMPTY */ { $$ = EMPTY; } + ; + +storage_declaration: storage_clause storage_modifier + {$$ = cat2_str ($1, $2); } + | storage_clause {$$ = $1; } + | storage_modifier {$$ = $1; } + ; + +storage_clause : S_EXTERN { $$ = mm_strdup("extern"); } + | S_STATIC { $$ = mm_strdup("static"); } + | S_REGISTER { $$ = mm_strdup("register"); } + | S_AUTO { $$ = mm_strdup("auto"); } + ; + +storage_modifier : S_CONST { $$ = mm_strdup("const"); } + | S_VOLATILE { $$ = mm_strdup("volatile"); } + ; + +var_type: simple_type + { + $$.type_enum = $1; + $$.type_str = mm_strdup(ecpg_type_name($1)); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + | struct_union_type + { + $$.type_str = $1; + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + + if (strncmp($1, "struct", sizeof("struct")-1) == 0) + { + $$.type_enum = ECPGt_struct; + $$.type_sizeof = ECPGstruct_sizeof; + } + else + { + $$.type_enum = ECPGt_union; + $$.type_sizeof = NULL; + } + } + | enum_type + { + $$.type_str = $1; + $$.type_enum = ECPGt_int; + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + | ECPGColLabelCommon '(' precision opt_scale ')' + { + if (strcmp($1, "numeric") == 0) + { + $$.type_enum = ECPGt_numeric; + $$.type_str = mm_strdup("numeric"); + } + else if (strcmp($1, "decimal") == 0) + { + $$.type_enum = ECPGt_decimal; + $$.type_str = mm_strdup("decimal"); + } + else + { + mmerror(PARSE_ERROR, ET_ERROR, "only data types numeric and decimal have precision/scale argument"); + $$.type_enum = ECPGt_numeric; + $$.type_str = mm_strdup("numeric"); + } + + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + | ECPGColLabelCommon ecpg_interval + { + if (strlen($2) != 0 && strcmp ($1, "datetime") != 0 && strcmp ($1, "interval") != 0) + mmerror (PARSE_ERROR, ET_ERROR, "interval specification not allowed here"); + + /* + * Check for type names that the SQL grammar treats as + * unreserved keywords + */ + if (strcmp($1, "varchar") == 0) + { + $$.type_enum = ECPGt_varchar; + $$.type_str = EMPTY; /*mm_strdup("varchar");*/ + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "bytea") == 0) + { + $$.type_enum = ECPGt_bytea; + $$.type_str = EMPTY; + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "float") == 0) + { + $$.type_enum = ECPGt_float; + $$.type_str = mm_strdup("float"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "double") == 0) + { + $$.type_enum = ECPGt_double; + $$.type_str = mm_strdup("double"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "numeric") == 0) + { + $$.type_enum = ECPGt_numeric; + $$.type_str = mm_strdup("numeric"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "decimal") == 0) + { + $$.type_enum = ECPGt_decimal; + $$.type_str = mm_strdup("decimal"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "date") == 0) + { + $$.type_enum = ECPGt_date; + $$.type_str = mm_strdup("date"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "timestamp") == 0) + { + $$.type_enum = ECPGt_timestamp; + $$.type_str = mm_strdup("timestamp"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "interval") == 0) + { + $$.type_enum = ECPGt_interval; + $$.type_str = mm_strdup("interval"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "datetime") == 0) + { + $$.type_enum = ECPGt_timestamp; + $$.type_str = mm_strdup("timestamp"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if ((strcmp($1, "string") == 0) && INFORMIX_MODE) + { + $$.type_enum = ECPGt_string; + $$.type_str = mm_strdup("char"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else + { + /* this is for typedef'ed types */ + struct typedefs *this = get_typedef($1); + + $$.type_str = (this->type->type_enum == ECPGt_varchar || this->type->type_enum == ECPGt_bytea) ? EMPTY : mm_strdup(this->name); + $$.type_enum = this->type->type_enum; + $$.type_dimension = this->type->type_dimension; + $$.type_index = this->type->type_index; + if (this->type->type_sizeof && strlen(this->type->type_sizeof) != 0) + $$.type_sizeof = this->type->type_sizeof; + else + $$.type_sizeof = cat_str(3, mm_strdup("sizeof("), mm_strdup(this->name), mm_strdup(")")); + + struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list); + } + } + | s_struct_union_symbol + { + /* this is for named structs/unions */ + char *name; + struct typedefs *this; + bool forward = (forward_name != NULL && strcmp($1.symbol, forward_name) == 0 && strcmp($1.su, "struct") == 0); + + name = cat2_str($1.su, $1.symbol); + /* Do we have a forward definition? */ + if (!forward) + { + /* No */ + + this = get_typedef(name); + $$.type_str = mm_strdup(this->name); + $$.type_enum = this->type->type_enum; + $$.type_dimension = this->type->type_dimension; + $$.type_index = this->type->type_index; + $$.type_sizeof = this->type->type_sizeof; + struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list); + free(name); + } + else + { + $$.type_str = name; + $$.type_enum = ECPGt_long; + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = mm_strdup(""); + struct_member_list[struct_level] = NULL; + } + } + ; + +enum_type: ENUM_P symbol enum_definition + { $$ = cat_str(3, mm_strdup("enum"), $2, $3); } + | ENUM_P enum_definition + { $$ = cat2_str(mm_strdup("enum"), $2); } + | ENUM_P symbol + { $$ = cat2_str(mm_strdup("enum"), $2); } + ; + +enum_definition: '{' c_list '}' + { $$ = cat_str(3, mm_strdup("{"), $2, mm_strdup("}")); }; + +struct_union_type_with_symbol: s_struct_union_symbol + { + struct_member_list[struct_level++] = NULL; + if (struct_level >= STRUCT_DEPTH) + mmerror(PARSE_ERROR, ET_ERROR, "too many levels in nested structure/union definition"); + forward_name = mm_strdup($1.symbol); + } + '{' variable_declarations '}' + { + struct typedefs *ptr, *this; + struct this_type su_type; + + ECPGfree_struct_member(struct_member_list[struct_level]); + struct_member_list[struct_level] = NULL; + struct_level--; + if (strncmp($1.su, "struct", sizeof("struct")-1) == 0) + su_type.type_enum = ECPGt_struct; + else + su_type.type_enum = ECPGt_union; + su_type.type_str = cat2_str($1.su, $1.symbol); + free(forward_name); + forward_name = NULL; + + /* This is essentially a typedef but needs the keyword struct/union as well. + * So we create the typedef for each struct definition with symbol */ + for (ptr = types; ptr != NULL; ptr = ptr->next) + { + if (strcmp(su_type.type_str, ptr->name) == 0) + /* re-definition is a bug */ + mmerror(PARSE_ERROR, ET_ERROR, "type \"%s\" is already defined", su_type.type_str); + } + + this = (struct typedefs *) mm_alloc(sizeof(struct typedefs)); + + /* initial definition */ + this->next = types; + this->name = mm_strdup(su_type.type_str); + this->brace_level = braces_open; + this->type = (struct this_type *) mm_alloc(sizeof(struct this_type)); + this->type->type_enum = su_type.type_enum; + this->type->type_str = mm_strdup(su_type.type_str); + this->type->type_dimension = mm_strdup("-1"); /* dimension of array */ + this->type->type_index = mm_strdup("-1"); /* length of string */ + this->type->type_sizeof = ECPGstruct_sizeof; + this->struct_member_list = struct_member_list[struct_level]; + + types = this; + $$ = cat_str(4, su_type.type_str, mm_strdup("{"), $4, mm_strdup("}")); + } + ; + +struct_union_type: struct_union_type_with_symbol { $$ = $1; } + | s_struct_union + { + struct_member_list[struct_level++] = NULL; + if (struct_level >= STRUCT_DEPTH) + mmerror(PARSE_ERROR, ET_ERROR, "too many levels in nested structure/union definition"); + } + '{' variable_declarations '}' + { + ECPGfree_struct_member(struct_member_list[struct_level]); + struct_member_list[struct_level] = NULL; + struct_level--; + $$ = cat_str(4, $1, mm_strdup("{"), $4, mm_strdup("}")); + } + ; + +s_struct_union_symbol: SQL_STRUCT symbol + { + $$.su = mm_strdup("struct"); + $$.symbol = $2; + ECPGstruct_sizeof = cat_str(3, mm_strdup("sizeof("), cat2_str(mm_strdup($$.su), mm_strdup($$.symbol)), mm_strdup(")")); + } + | UNION symbol + { + $$.su = mm_strdup("union"); + $$.symbol = $2; + } + ; + +s_struct_union: SQL_STRUCT + { + ECPGstruct_sizeof = mm_strdup(""); /* This must not be NULL to distinguish from simple types. */ + $$ = mm_strdup("struct"); + } + | UNION + { + $$ = mm_strdup("union"); + } + ; + +simple_type: unsigned_type { $$=$1; } + | opt_signed signed_type { $$=$2; } + ; + +unsigned_type: SQL_UNSIGNED SQL_SHORT { $$ = ECPGt_unsigned_short; } + | SQL_UNSIGNED SQL_SHORT INT_P { $$ = ECPGt_unsigned_short; } + | SQL_UNSIGNED { $$ = ECPGt_unsigned_int; } + | SQL_UNSIGNED INT_P { $$ = ECPGt_unsigned_int; } + | SQL_UNSIGNED SQL_LONG { $$ = ECPGt_unsigned_long; } + | SQL_UNSIGNED SQL_LONG INT_P { $$ = ECPGt_unsigned_long; } + | SQL_UNSIGNED SQL_LONG SQL_LONG { $$ = ECPGt_unsigned_long_long; } + | SQL_UNSIGNED SQL_LONG SQL_LONG INT_P { $$ = ECPGt_unsigned_long_long; } + | SQL_UNSIGNED CHAR_P { $$ = ECPGt_unsigned_char; } + ; + +signed_type: SQL_SHORT { $$ = ECPGt_short; } + | SQL_SHORT INT_P { $$ = ECPGt_short; } + | INT_P { $$ = ECPGt_int; } + | SQL_LONG { $$ = ECPGt_long; } + | SQL_LONG INT_P { $$ = ECPGt_long; } + | SQL_LONG SQL_LONG { $$ = ECPGt_long_long; } + | SQL_LONG SQL_LONG INT_P { $$ = ECPGt_long_long; } + | SQL_BOOL { $$ = ECPGt_bool; } + | CHAR_P { $$ = ECPGt_char; } + | DOUBLE_P { $$ = ECPGt_double; } + ; + +opt_signed: SQL_SIGNED + | /* EMPTY */ + ; + +variable_list: variable + { $$ = $1; } + | variable_list ',' variable + { + if (actual_type[struct_level].type_enum == ECPGt_varchar || actual_type[struct_level].type_enum == ECPGt_bytea) + $$ = cat_str(3, $1, mm_strdup(";"), $3); + else + $$ = cat_str(3, $1, mm_strdup(","), $3); + } + ; + +variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initializer + { + struct ECPGtype * type; + char *dimension = $3.index1; /* dimension of array */ + char *length = $3.index2; /* length of string */ + char *dim_str; + char *vcn; + int *varlen_type_counter; + char *struct_name; + + adjust_array(actual_type[struct_level].type_enum, &dimension, &length, actual_type[struct_level].type_dimension, actual_type[struct_level].type_index, strlen($1), false); + switch (actual_type[struct_level].type_enum) + { + case ECPGt_struct: + case ECPGt_union: + if (atoi(dimension) < 0) + type = ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, actual_type[struct_level].type_str, actual_type[struct_level].type_sizeof); + else + type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, actual_type[struct_level].type_str, actual_type[struct_level].type_sizeof), dimension); + + $$ = cat_str(5, $1, mm_strdup($2), $3.str, $4, $5); + break; + + case ECPGt_varchar: + case ECPGt_bytea: + if (actual_type[struct_level].type_enum == ECPGt_varchar) + { + varlen_type_counter = &varchar_counter; + struct_name = " struct varchar_"; + } + else + { + varlen_type_counter = &bytea_counter; + struct_name = " struct bytea_"; + } + if (atoi(dimension) < 0) + type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length, *varlen_type_counter); + else + type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, *varlen_type_counter), dimension); + + if (strcmp(dimension, "0") == 0 || abs(atoi(dimension)) == 1) + dim_str=mm_strdup(""); + else + dim_str=cat_str(3, mm_strdup("["), mm_strdup(dimension), mm_strdup("]")); + /* cannot check for atoi <= 0 because a defined constant will yield 0 here as well */ + if (atoi(length) < 0 || strcmp(length, "0") == 0) + mmerror(PARSE_ERROR, ET_ERROR, "pointers to varchar are not implemented"); + + /* make sure varchar struct name is unique by adding a unique counter to its definition */ + vcn = (char *) mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + sprintf(vcn, "%d", *varlen_type_counter); + if (strcmp(dimension, "0") == 0) + $$ = cat_str(7, make2_str(mm_strdup(struct_name), vcn), mm_strdup(" { int len; char arr["), mm_strdup(length), mm_strdup("]; } *"), mm_strdup($2), $4, $5); + else + $$ = cat_str(8, make2_str(mm_strdup(struct_name), vcn), mm_strdup(" { int len; char arr["), mm_strdup(length), mm_strdup("]; } "), mm_strdup($2), dim_str, $4, $5); + (*varlen_type_counter)++; + break; + + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + if (atoi(dimension) == -1) + { + int i = strlen($5); + + if (atoi(length) == -1 && i > 0) /* char [] = "string" */ + { + /* if we have an initializer but no string size set, let's use the initializer's length */ + free(length); + length = mm_alloc(i+sizeof("sizeof()")); + sprintf(length, "sizeof(%s)", $5+2); + } + type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length, 0); + } + else + type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, 0), dimension); + + $$ = cat_str(5, $1, mm_strdup($2), $3.str, $4, $5); + break; + + default: + if (atoi(dimension) < 0) + type = ECPGmake_simple_type(actual_type[struct_level].type_enum, mm_strdup("1"), 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, mm_strdup("1"), 0), dimension); + + $$ = cat_str(5, $1, mm_strdup($2), $3.str, $4, $5); + break; + } + + if (struct_level == 0) + new_variable($2, type, braces_open); + else + ECPGmake_struct_member($2, type, &(struct_member_list[struct_level - 1])); + + free($2); + } + ; + +opt_initializer: /*EMPTY*/ + { $$ = EMPTY; } + | '=' c_term + { + initializer = 1; + $$ = cat2_str(mm_strdup("="), $2); + } + ; + +opt_pointer: /*EMPTY*/ { $$ = EMPTY; } + | '*' { $$ = mm_strdup("*"); } + | '*' '*' { $$ = mm_strdup("**"); } + ; + +/* + * We try to simulate the correct DECLARE syntax here so we get dynamic SQL + */ +ECPGDeclare: DECLARE STATEMENT ecpg_ident + { + /* this is only supported for compatibility */ + $$ = cat_str(3, mm_strdup("/* declare statement"), $3, mm_strdup("*/")); + } + ; +/* + * the exec sql disconnect statement: disconnect from the given database + */ +ECPGDisconnect: SQL_DISCONNECT dis_name { $$ = $2; } + ; + +dis_name: connection_object { $$ = $1; } + | CURRENT_P { $$ = mm_strdup("\"CURRENT\""); } + | ALL { $$ = mm_strdup("\"ALL\""); } + | /* EMPTY */ { $$ = mm_strdup("\"CURRENT\""); } + ; + +connection_object: name { $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); } + | DEFAULT { $$ = mm_strdup("\"DEFAULT\""); } + | char_variable { $$ = $1; } + ; + +execstring: char_variable + { $$ = $1; } + | CSTRING + { $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); } + ; + +/* + * the exec sql free command to deallocate a previously + * prepared statement + */ +ECPGFree: SQL_FREE cursor_name { $$ = $2; } + | SQL_FREE ALL { $$ = mm_strdup("all"); } + ; + +/* + * open is an open cursor, at the moment this has to be removed + */ +ECPGOpen: SQL_OPEN cursor_name opt_ecpg_using + { + if ($2[0] == ':') + remove_variable_from_list(&argsinsert, find_variable($2 + 1)); + $$ = $2; + } + ; + +opt_ecpg_using: /*EMPTY*/ { $$ = EMPTY; } + | ecpg_using { $$ = $1; } + ; + +ecpg_using: USING using_list { $$ = EMPTY; } + | using_descriptor { $$ = $1; } + ; + +using_descriptor: USING SQL_P SQL_DESCRIPTOR quoted_ident_stringvar + { + add_variable_to_head(&argsinsert, descriptor_variable($4,0), &no_indicator); + $$ = EMPTY; + } + | USING SQL_DESCRIPTOR name + { + add_variable_to_head(&argsinsert, sqlda_variable($3), &no_indicator); + $$ = EMPTY; + } + ; + +into_descriptor: INTO SQL_P SQL_DESCRIPTOR quoted_ident_stringvar + { + add_variable_to_head(&argsresult, descriptor_variable($4,1), &no_indicator); + $$ = EMPTY; + } + | INTO SQL_DESCRIPTOR name + { + add_variable_to_head(&argsresult, sqlda_variable($3), &no_indicator); + $$ = EMPTY; + } + ; + +into_sqlda: INTO name + { + add_variable_to_head(&argsresult, sqlda_variable($2), &no_indicator); + $$ = EMPTY; + } + ; + +using_list: UsingValue | UsingValue ',' using_list; + +UsingValue: UsingConst + { + char *length = mm_alloc(32); + + sprintf(length, "%zu", strlen($1)); + add_variable_to_head(&argsinsert, new_variable($1, ECPGmake_simple_type(ECPGt_const, length, 0), 0), &no_indicator); + } + | civar { $$ = EMPTY; } + | civarind { $$ = EMPTY; } + ; + +UsingConst: Iconst { $$ = $1; } + | '+' Iconst { $$ = cat_str(2, mm_strdup("+"), $2); } + | '-' Iconst { $$ = cat_str(2, mm_strdup("-"), $2); } + | ecpg_fconst { $$ = $1; } + | '+' ecpg_fconst { $$ = cat_str(2, mm_strdup("+"), $2); } + | '-' ecpg_fconst { $$ = cat_str(2, mm_strdup("-"), $2); } + | ecpg_sconst { $$ = $1; } + | ecpg_bconst { $$ = $1; } + | ecpg_xconst { $$ = $1; } + ; + +/* + * We accept DESCRIBE [OUTPUT] but do nothing with DESCRIBE INPUT so far. + */ +ECPGDescribe: SQL_DESCRIBE INPUT_P prepared_name using_descriptor + { + $$.input = 1; + $$.stmt_name = $3; + } + | SQL_DESCRIBE opt_output prepared_name using_descriptor + { + struct variable *var; + var = argsinsert->variable; + remove_variable_from_list(&argsinsert, var); + add_variable_to_head(&argsresult, var, &no_indicator); + + $$.input = 0; + $$.stmt_name = $3; + } + | SQL_DESCRIBE opt_output prepared_name into_descriptor + { + $$.input = 0; + $$.stmt_name = $3; + } + | SQL_DESCRIBE INPUT_P prepared_name into_sqlda + { + $$.input = 1; + $$.stmt_name = $3; + } + | SQL_DESCRIBE opt_output prepared_name into_sqlda + { + $$.input = 0; + $$.stmt_name = $3; + } + ; + +opt_output: SQL_OUTPUT { $$ = mm_strdup("output"); } + | /* EMPTY */ { $$ = EMPTY; } + ; + +/* + * dynamic SQL: descriptor based access + * originally written by Christof Petig + * and Peter Eisentraut + */ + +/* + * allocate a descriptor + */ +ECPGAllocateDescr: SQL_ALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar + { + add_descriptor($3,connection); + $$ = $3; + } + ; + + +/* + * deallocate a descriptor + */ +ECPGDeallocateDescr: DEALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar + { + drop_descriptor($3,connection); + $$ = $3; + } + ; + +/* + * manipulate a descriptor header + */ + +ECPGGetDescriptorHeader: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar ECPGGetDescHeaderItems + { $$ = $3; } + ; + +ECPGGetDescHeaderItems: ECPGGetDescHeaderItem + | ECPGGetDescHeaderItems ',' ECPGGetDescHeaderItem + ; + +ECPGGetDescHeaderItem: cvariable '=' desc_header_item + { push_assignment($1, $3); } + ; + + +ECPGSetDescriptorHeader: SET SQL_DESCRIPTOR quoted_ident_stringvar ECPGSetDescHeaderItems + { $$ = $3; } + ; + +ECPGSetDescHeaderItems: ECPGSetDescHeaderItem + | ECPGSetDescHeaderItems ',' ECPGSetDescHeaderItem + ; + +ECPGSetDescHeaderItem: desc_header_item '=' IntConstVar + { + push_assignment($3, $1); + } + ; + +IntConstVar: Iconst + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + + sprintf(length, "%zu", strlen($1)); + new_variable($1, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + $$ = $1; + } + | cvariable + { + $$ = $1; + } + ; + +desc_header_item: SQL_COUNT { $$ = ECPGd_count; } + ; + +/* + * manipulate a descriptor + */ + +ECPGGetDescriptor: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar VALUE_P IntConstVar ECPGGetDescItems + { $$.str = $5; $$.name = $3; } + ; + +ECPGGetDescItems: ECPGGetDescItem + | ECPGGetDescItems ',' ECPGGetDescItem + ; + +ECPGGetDescItem: cvariable '=' descriptor_item { push_assignment($1, $3); }; + + +ECPGSetDescriptor: SET SQL_DESCRIPTOR quoted_ident_stringvar VALUE_P IntConstVar ECPGSetDescItems + { $$.str = $5; $$.name = $3; } + ; + +ECPGSetDescItems: ECPGSetDescItem + | ECPGSetDescItems ',' ECPGSetDescItem + ; + +ECPGSetDescItem: descriptor_item '=' AllConstVar + { + push_assignment($3, $1); + } + ; + +AllConstVar: ecpg_fconst + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + + sprintf(length, "%zu", strlen($1)); + new_variable($1, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + $$ = $1; + } + + | IntConstVar + { + $$ = $1; + } + + | '-' ecpg_fconst + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *var = cat2_str(mm_strdup("-"), $2); + + sprintf(length, "%zu", strlen(var)); + new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + $$ = var; + } + + | '-' Iconst + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *var = cat2_str(mm_strdup("-"), $2); + + sprintf(length, "%zu", strlen(var)); + new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + $$ = var; + } + + | ecpg_sconst + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *var = $1 + 1; + + var[strlen(var) - 1] = '\0'; + sprintf(length, "%zu", strlen(var)); + new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + $$ = var; + } + ; + +descriptor_item: SQL_CARDINALITY { $$ = ECPGd_cardinality; } + | DATA_P { $$ = ECPGd_data; } + | SQL_DATETIME_INTERVAL_CODE { $$ = ECPGd_di_code; } + | SQL_DATETIME_INTERVAL_PRECISION { $$ = ECPGd_di_precision; } + | SQL_INDICATOR { $$ = ECPGd_indicator; } + | SQL_KEY_MEMBER { $$ = ECPGd_key_member; } + | SQL_LENGTH { $$ = ECPGd_length; } + | NAME_P { $$ = ECPGd_name; } + | SQL_NULLABLE { $$ = ECPGd_nullable; } + | SQL_OCTET_LENGTH { $$ = ECPGd_octet; } + | PRECISION { $$ = ECPGd_precision; } + | SQL_RETURNED_LENGTH { $$ = ECPGd_length; } + | SQL_RETURNED_OCTET_LENGTH { $$ = ECPGd_ret_octet; } + | SQL_SCALE { $$ = ECPGd_scale; } + | TYPE_P { $$ = ECPGd_type; } + ; + +/* + * set/reset the automatic transaction mode, this needs a different handling + * as the other set commands + */ +ECPGSetAutocommit: SET SQL_AUTOCOMMIT '=' on_off { $$ = $4; } + | SET SQL_AUTOCOMMIT TO on_off { $$ = $4; } + ; + +on_off: ON { $$ = mm_strdup("on"); } + | OFF { $$ = mm_strdup("off"); } + ; + +/* + * set the actual connection, this needs a different handling as the other + * set commands + */ +ECPGSetConnection: SET CONNECTION TO connection_object { $$ = $4; } + | SET CONNECTION '=' connection_object { $$ = $4; } + | SET CONNECTION connection_object { $$ = $3; } + ; + +/* + * define a new type for embedded SQL + */ +ECPGTypedef: TYPE_P + { + /* reset this variable so we see if there was */ + /* an initializer specified */ + initializer = 0; + } + ECPGColLabelCommon IS var_type opt_array_bounds opt_reference + { + add_typedef($3, $6.index1, $6.index2, $5.type_enum, $5.type_dimension, $5.type_index, initializer, *$7 ? 1 : 0); + + if (auto_create_c == false) + $$ = cat_str(7, mm_strdup("/* exec sql type"), mm_strdup($3), mm_strdup("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, mm_strdup("*/")); + else + $$ = cat_str(6, mm_strdup("typedef "), mm_strdup($5.type_str), *$7?mm_strdup("*"):mm_strdup(""), mm_strdup($3), mm_strdup($6.str), mm_strdup(";")); + } + ; + +opt_reference: SQL_REFERENCE { $$ = mm_strdup("reference"); } + | /*EMPTY*/ { $$ = EMPTY; } + ; + +/* + * define the type of one variable for embedded SQL + */ +ECPGVar: SQL_VAR + { + /* reset this variable so we see if there was */ + /* an initializer specified */ + initializer = 0; + } + ColLabel IS var_type opt_array_bounds opt_reference + { + struct variable *p = find_variable($3); + char *dimension = $6.index1; + char *length = $6.index2; + struct ECPGtype * type; + + if (($5.type_enum == ECPGt_struct || + $5.type_enum == ECPGt_union) && + initializer == 1) + mmerror(PARSE_ERROR, ET_ERROR, "initializer not allowed in EXEC SQL VAR command"); + else + { + adjust_array($5.type_enum, &dimension, &length, $5.type_dimension, $5.type_index, *$7?1:0, false); + + switch ($5.type_enum) + { + case ECPGt_struct: + case ECPGt_union: + if (atoi(dimension) < 0) + type = ECPGmake_struct_type(struct_member_list[struct_level], $5.type_enum, $5.type_str, $5.type_sizeof); + else + type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], $5.type_enum, $5.type_str, $5.type_sizeof), dimension); + break; + + case ECPGt_varchar: + case ECPGt_bytea: + if (atoi(dimension) == -1) + type = ECPGmake_simple_type($5.type_enum, length, 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, length, 0), dimension); + break; + + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + if (atoi(dimension) == -1) + type = ECPGmake_simple_type($5.type_enum, length, 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, length, 0), dimension); + break; + + default: + if (atoi(length) >= 0) + mmerror(PARSE_ERROR, ET_ERROR, "multidimensional arrays for simple data types are not supported"); + + if (atoi(dimension) < 0) + type = ECPGmake_simple_type($5.type_enum, mm_strdup("1"), 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, mm_strdup("1"), 0), dimension); + break; + } + + ECPGfree_type(p->type); + p->type = type; + } + + $$ = cat_str(7, mm_strdup("/* exec sql var"), mm_strdup($3), mm_strdup("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, mm_strdup("*/")); + } + ; + +/* + * whenever statement: decide what to do in case of error/no data found + * according to SQL standards we lack: SQLSTATE, CONSTRAINT and SQLEXCEPTION + */ +ECPGWhenever: SQL_WHENEVER SQL_SQLERROR action + { + when_error.code = $3.code; + when_error.command = $3.command; + $$ = cat_str(3, mm_strdup("/* exec sql whenever sqlerror "), $3.str, mm_strdup("; */")); + } + | SQL_WHENEVER NOT SQL_FOUND action + { + when_nf.code = $4.code; + when_nf.command = $4.command; + $$ = cat_str(3, mm_strdup("/* exec sql whenever not found "), $4.str, mm_strdup("; */")); + } + | SQL_WHENEVER SQL_SQLWARNING action + { + when_warn.code = $3.code; + when_warn.command = $3.command; + $$ = cat_str(3, mm_strdup("/* exec sql whenever sql_warning "), $3.str, mm_strdup("; */")); + } + ; + +action : CONTINUE_P + { + $$.code = W_NOTHING; + $$.command = NULL; + $$.str = mm_strdup("continue"); + } + | SQL_SQLPRINT + { + $$.code = W_SQLPRINT; + $$.command = NULL; + $$.str = mm_strdup("sqlprint"); + } + | SQL_STOP + { + $$.code = W_STOP; + $$.command = NULL; + $$.str = mm_strdup("stop"); + } + | SQL_GOTO name + { + $$.code = W_GOTO; + $$.command = mm_strdup($2); + $$.str = cat2_str(mm_strdup("goto "), $2); + } + | SQL_GO TO name + { + $$.code = W_GOTO; + $$.command = mm_strdup($3); + $$.str = cat2_str(mm_strdup("goto "), $3); + } + | DO name '(' c_args ')' + { + $$.code = W_DO; + $$.command = cat_str(4, $2, mm_strdup("("), $4, mm_strdup(")")); + $$.str = cat2_str(mm_strdup("do"), mm_strdup($$.command)); + } + | DO SQL_BREAK + { + $$.code = W_BREAK; + $$.command = NULL; + $$.str = mm_strdup("break"); + } + | DO CONTINUE_P + { + $$.code = W_CONTINUE; + $$.command = NULL; + $$.str = mm_strdup("continue"); + } + | CALL name '(' c_args ')' + { + $$.code = W_DO; + $$.command = cat_str(4, $2, mm_strdup("("), $4, mm_strdup(")")); + $$.str = cat2_str(mm_strdup("call"), mm_strdup($$.command)); + } + | CALL name + { + $$.code = W_DO; + $$.command = cat2_str($2, mm_strdup("()")); + $$.str = cat2_str(mm_strdup("call"), mm_strdup($$.command)); + } + ; + +/* some other stuff for ecpg */ + +/* additional unreserved keywords */ +ECPGKeywords: ECPGKeywords_vanames { $$ = $1; } + | ECPGKeywords_rest { $$ = $1; } + ; + +ECPGKeywords_vanames: SQL_BREAK { $$ = mm_strdup("break"); } + | SQL_CARDINALITY { $$ = mm_strdup("cardinality"); } + | SQL_COUNT { $$ = mm_strdup("count"); } + | SQL_DATETIME_INTERVAL_CODE { $$ = mm_strdup("datetime_interval_code"); } + | SQL_DATETIME_INTERVAL_PRECISION { $$ = mm_strdup("datetime_interval_precision"); } + | SQL_FOUND { $$ = mm_strdup("found"); } + | SQL_GO { $$ = mm_strdup("go"); } + | SQL_GOTO { $$ = mm_strdup("goto"); } + | SQL_IDENTIFIED { $$ = mm_strdup("identified"); } + | SQL_INDICATOR { $$ = mm_strdup("indicator"); } + | SQL_KEY_MEMBER { $$ = mm_strdup("key_member"); } + | SQL_LENGTH { $$ = mm_strdup("length"); } + | SQL_NULLABLE { $$ = mm_strdup("nullable"); } + | SQL_OCTET_LENGTH { $$ = mm_strdup("octet_length"); } + | SQL_RETURNED_LENGTH { $$ = mm_strdup("returned_length"); } + | SQL_RETURNED_OCTET_LENGTH { $$ = mm_strdup("returned_octet_length"); } + | SQL_SCALE { $$ = mm_strdup("scale"); } + | SQL_SECTION { $$ = mm_strdup("section"); } + | SQL_SQLERROR { $$ = mm_strdup("sqlerror"); } + | SQL_SQLPRINT { $$ = mm_strdup("sqlprint"); } + | SQL_SQLWARNING { $$ = mm_strdup("sqlwarning"); } + | SQL_STOP { $$ = mm_strdup("stop"); } + ; + +ECPGKeywords_rest: SQL_CONNECT { $$ = mm_strdup("connect"); } + | SQL_DESCRIBE { $$ = mm_strdup("describe"); } + | SQL_DISCONNECT { $$ = mm_strdup("disconnect"); } + | SQL_OPEN { $$ = mm_strdup("open"); } + | SQL_VAR { $$ = mm_strdup("var"); } + | SQL_WHENEVER { $$ = mm_strdup("whenever"); } + ; + +/* additional keywords that can be SQL type names (but not ECPGColLabels) */ +ECPGTypeName: SQL_BOOL { $$ = mm_strdup("bool"); } + | SQL_LONG { $$ = mm_strdup("long"); } + | SQL_OUTPUT { $$ = mm_strdup("output"); } + | SQL_SHORT { $$ = mm_strdup("short"); } + | SQL_STRUCT { $$ = mm_strdup("struct"); } + | SQL_SIGNED { $$ = mm_strdup("signed"); } + | SQL_UNSIGNED { $$ = mm_strdup("unsigned"); } + ; + +symbol: ColLabel { $$ = $1; } + ; + +ECPGColId: ecpg_ident { $$ = $1; } + | unreserved_keyword { $$ = $1; } + | col_name_keyword { $$ = $1; } + | ECPGunreserved_interval { $$ = $1; } + | ECPGKeywords { $$ = $1; } + | ECPGCKeywords { $$ = $1; } + | CHAR_P { $$ = mm_strdup("char"); } + | VALUES { $$ = mm_strdup("values"); } + ; + +/* + * Name classification hierarchy. + * + * These productions should match those in the core grammar, except that + * we use all_unreserved_keyword instead of unreserved_keyword, and + * where possible include ECPG keywords as well as core keywords. + */ + +/* Column identifier --- names that can be column, table, etc names. + */ +ColId: ecpg_ident { $$ = $1; } + | all_unreserved_keyword { $$ = $1; } + | col_name_keyword { $$ = $1; } + | ECPGKeywords { $$ = $1; } + | ECPGCKeywords { $$ = $1; } + | CHAR_P { $$ = mm_strdup("char"); } + | VALUES { $$ = mm_strdup("values"); } + ; + +/* Type/function identifier --- names that can be type or function names. + */ +type_function_name: ecpg_ident { $$ = $1; } + | all_unreserved_keyword { $$ = $1; } + | type_func_name_keyword { $$ = $1; } + | ECPGKeywords { $$ = $1; } + | ECPGCKeywords { $$ = $1; } + | ECPGTypeName { $$ = $1; } + ; + +/* Column label --- allowed labels in "AS" clauses. + * This presently includes *all* Postgres keywords. + */ +ColLabel: ECPGColLabel { $$ = $1; } + | ECPGTypeName { $$ = $1; } + | CHAR_P { $$ = mm_strdup("char"); } + | CURRENT_P { $$ = mm_strdup("current"); } + | INPUT_P { $$ = mm_strdup("input"); } + | INT_P { $$ = mm_strdup("int"); } + | TO { $$ = mm_strdup("to"); } + | UNION { $$ = mm_strdup("union"); } + | VALUES { $$ = mm_strdup("values"); } + | ECPGCKeywords { $$ = $1; } + | ECPGunreserved_interval { $$ = $1; } + ; + +ECPGColLabel: ECPGColLabelCommon { $$ = $1; } + | unreserved_keyword { $$ = $1; } + | reserved_keyword { $$ = $1; } + | ECPGKeywords_rest { $$ = $1; } + | CONNECTION { $$ = mm_strdup("connection"); } + ; + +ECPGColLabelCommon: ecpg_ident { $$ = $1; } + | col_name_keyword { $$ = $1; } + | type_func_name_keyword { $$ = $1; } + | ECPGKeywords_vanames { $$ = $1; } + ; + +ECPGCKeywords: S_AUTO { $$ = mm_strdup("auto"); } + | S_CONST { $$ = mm_strdup("const"); } + | S_EXTERN { $$ = mm_strdup("extern"); } + | S_REGISTER { $$ = mm_strdup("register"); } + | S_STATIC { $$ = mm_strdup("static"); } + | S_TYPEDEF { $$ = mm_strdup("typedef"); } + | S_VOLATILE { $$ = mm_strdup("volatile"); } + ; + +/* "Unreserved" keywords --- available for use as any kind of name. + */ + +/* + * The following symbols must be excluded from ECPGColLabel and directly + * included into ColLabel to enable C variables to get names from ECPGColLabel: + * DAY_P, HOUR_P, MINUTE_P, MONTH_P, SECOND_P, YEAR_P. + * + * We also have to exclude CONNECTION, CURRENT, and INPUT for various reasons. + * CONNECTION can be added back in all_unreserved_keyword, but CURRENT and + * INPUT are reserved for ecpg purposes. + * + * The mentioned exclusions are done by $replace_line settings in parse.pl. + */ +all_unreserved_keyword: unreserved_keyword { $$ = $1; } + | ECPGunreserved_interval { $$ = $1; } + | CONNECTION { $$ = mm_strdup("connection"); } + ; + +ECPGunreserved_interval: DAY_P { $$ = mm_strdup("day"); } + | HOUR_P { $$ = mm_strdup("hour"); } + | MINUTE_P { $$ = mm_strdup("minute"); } + | MONTH_P { $$ = mm_strdup("month"); } + | SECOND_P { $$ = mm_strdup("second"); } + | YEAR_P { $$ = mm_strdup("year"); } + ; + + +into_list : coutputvariable | into_list ',' coutputvariable + ; + +ecpgstart: SQL_START { + reset_variables(); + pacounter = 1; + } + ; + +c_args: /*EMPTY*/ { $$ = EMPTY; } + | c_list { $$ = $1; } + ; + +coutputvariable: cvariable indicator + { add_variable_to_head(&argsresult, find_variable($1), find_variable($2)); } + | cvariable + { add_variable_to_head(&argsresult, find_variable($1), &no_indicator); } + ; + + +civarind: cvariable indicator + { + if (find_variable($2)->type->type == ECPGt_array) + mmerror(PARSE_ERROR, ET_ERROR, "arrays of indicators are not allowed on input"); + + add_variable_to_head(&argsinsert, find_variable($1), find_variable($2)); + $$ = create_questionmarks($1, false); + } + ; + +char_civar: char_variable + { + char *ptr = strstr($1, ".arr"); + + if (ptr) /* varchar, we need the struct name here, not the struct element */ + *ptr = '\0'; + add_variable_to_head(&argsinsert, find_variable($1), &no_indicator); + $$ = $1; + } + ; + +civar: cvariable + { + add_variable_to_head(&argsinsert, find_variable($1), &no_indicator); + $$ = create_questionmarks($1, false); + } + ; + +indicator: cvariable { check_indicator((find_variable($1))->type); $$ = $1; } + | SQL_INDICATOR cvariable { check_indicator((find_variable($2))->type); $$ = $2; } + | SQL_INDICATOR name { check_indicator((find_variable($2))->type); $$ = $2; } + ; + +cvariable: CVARIABLE + { + /* As long as multidimensional arrays are not implemented we have to check for those here */ + char *ptr = $1; + int brace_open=0, brace = false; + + for (; *ptr; ptr++) + { + switch (*ptr) + { + case '[': + if (brace) + mmfatal(PARSE_ERROR, "multidimensional arrays for simple data types are not supported"); + brace_open++; + break; + case ']': + brace_open--; + if (brace_open == 0) + brace = true; + break; + case '\t': + case ' ': + break; + default: + if (brace_open == 0) + brace = false; + break; + } + } + $$ = $1; + } + ; + +ecpg_param: PARAM { $$ = make_name(); } ; + +ecpg_bconst: BCONST { $$ = $1; } ; + +ecpg_fconst: FCONST { $$ = make_name(); } ; + +ecpg_sconst: SCONST { $$ = $1; } ; + +ecpg_xconst: XCONST { $$ = $1; } ; + +ecpg_ident: IDENT { $$ = $1; } + | CSTRING { $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); } + ; + +quoted_ident_stringvar: name + { $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); } + | char_variable + { $$ = make3_str(mm_strdup("("), $1, mm_strdup(")")); } + ; + +/* + * C stuff + */ + +c_stuff_item: c_anything { $$ = $1; } + | '(' ')' { $$ = mm_strdup("()"); } + | '(' c_stuff ')' + { $$ = cat_str(3, mm_strdup("("), $2, mm_strdup(")")); } + ; + +c_stuff: c_stuff_item { $$ = $1; } + | c_stuff c_stuff_item + { $$ = cat2_str($1, $2); } + ; + +c_list: c_term { $$ = $1; } + | c_list ',' c_term { $$ = cat_str(3, $1, mm_strdup(","), $3); } + ; + +c_term: c_stuff { $$ = $1; } + | '{' c_list '}' { $$ = cat_str(3, mm_strdup("{"), $2, mm_strdup("}")); } + ; + +c_thing: c_anything { $$ = $1; } + | '(' { $$ = mm_strdup("("); } + | ')' { $$ = mm_strdup(")"); } + | ',' { $$ = mm_strdup(","); } + | ';' { $$ = mm_strdup(";"); } + ; + +c_anything: ecpg_ident { $$ = $1; } + | Iconst { $$ = $1; } + | ecpg_fconst { $$ = $1; } + | ecpg_sconst { $$ = $1; } + | '*' { $$ = mm_strdup("*"); } + | '+' { $$ = mm_strdup("+"); } + | '-' { $$ = mm_strdup("-"); } + | '/' { $$ = mm_strdup("/"); } + | '%' { $$ = mm_strdup("%"); } + | NULL_P { $$ = mm_strdup("NULL"); } + | S_ADD { $$ = mm_strdup("+="); } + | S_AND { $$ = mm_strdup("&&"); } + | S_ANYTHING { $$ = make_name(); } + | S_AUTO { $$ = mm_strdup("auto"); } + | S_CONST { $$ = mm_strdup("const"); } + | S_DEC { $$ = mm_strdup("--"); } + | S_DIV { $$ = mm_strdup("/="); } + | S_DOTPOINT { $$ = mm_strdup(".*"); } + | S_EQUAL { $$ = mm_strdup("=="); } + | S_EXTERN { $$ = mm_strdup("extern"); } + | S_INC { $$ = mm_strdup("++"); } + | S_LSHIFT { $$ = mm_strdup("<<"); } + | S_MEMBER { $$ = mm_strdup("->"); } + | S_MEMPOINT { $$ = mm_strdup("->*"); } + | S_MOD { $$ = mm_strdup("%="); } + | S_MUL { $$ = mm_strdup("*="); } + | S_NEQUAL { $$ = mm_strdup("!="); } + | S_OR { $$ = mm_strdup("||"); } + | S_REGISTER { $$ = mm_strdup("register"); } + | S_RSHIFT { $$ = mm_strdup(">>"); } + | S_STATIC { $$ = mm_strdup("static"); } + | S_SUB { $$ = mm_strdup("-="); } + | S_TYPEDEF { $$ = mm_strdup("typedef"); } + | S_VOLATILE { $$ = mm_strdup("volatile"); } + | SQL_BOOL { $$ = mm_strdup("bool"); } + | ENUM_P { $$ = mm_strdup("enum"); } + | HOUR_P { $$ = mm_strdup("hour"); } + | INT_P { $$ = mm_strdup("int"); } + | SQL_LONG { $$ = mm_strdup("long"); } + | MINUTE_P { $$ = mm_strdup("minute"); } + | MONTH_P { $$ = mm_strdup("month"); } + | SECOND_P { $$ = mm_strdup("second"); } + | SQL_SHORT { $$ = mm_strdup("short"); } + | SQL_SIGNED { $$ = mm_strdup("signed"); } + | SQL_STRUCT { $$ = mm_strdup("struct"); } + | SQL_UNSIGNED { $$ = mm_strdup("unsigned"); } + | YEAR_P { $$ = mm_strdup("year"); } + | CHAR_P { $$ = mm_strdup("char"); } + | FLOAT_P { $$ = mm_strdup("float"); } + | TO { $$ = mm_strdup("to"); } + | UNION { $$ = mm_strdup("union"); } + | VARCHAR { $$ = mm_strdup("varchar"); } + | '[' { $$ = mm_strdup("["); } + | ']' { $$ = mm_strdup("]"); } + | '=' { $$ = mm_strdup("="); } + | ':' { $$ = mm_strdup(":"); } + ; + +DeallocateStmt: DEALLOCATE prepared_name { check_declared_list($2); $$ = $2; } + | DEALLOCATE PREPARE prepared_name { check_declared_list($3); $$ = $3; } + | DEALLOCATE ALL { $$ = mm_strdup("all"); } + | DEALLOCATE PREPARE ALL { $$ = mm_strdup("all"); } + ; + +Iresult: Iconst { $$ = $1; } + | '(' Iresult ')' { $$ = cat_str(3, mm_strdup("("), $2, mm_strdup(")")); } + | Iresult '+' Iresult { $$ = cat_str(3, $1, mm_strdup("+"), $3); } + | Iresult '-' Iresult { $$ = cat_str(3, $1, mm_strdup("-"), $3); } + | Iresult '*' Iresult { $$ = cat_str(3, $1, mm_strdup("*"), $3); } + | Iresult '/' Iresult { $$ = cat_str(3, $1, mm_strdup("/"), $3); } + | Iresult '%' Iresult { $$ = cat_str(3, $1, mm_strdup("%"), $3); } + | ecpg_sconst { $$ = $1; } + | ColId { $$ = $1; } + | ColId '(' var_type ')' { if (pg_strcasecmp($1, "sizeof") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "operator not allowed in variable definition"); + else + $$ = cat_str(4, $1, mm_strdup("("), $3.type_str, mm_strdup(")")); + } + ; + +execute_rest: /* EMPTY */ { $$ = EMPTY; } + | ecpg_using opt_ecpg_into { $$ = EMPTY; } + | ecpg_into ecpg_using { $$ = EMPTY; } + | ecpg_into { $$ = EMPTY; } + ; + +ecpg_into: INTO into_list { $$ = EMPTY; } + | into_descriptor { $$ = $1; } + ; + +opt_ecpg_into: /* EMPTY */ { $$ = EMPTY; } + | ecpg_into { $$ = $1; } + ; + +ecpg_fetch_into: ecpg_into { $$ = $1; } + | using_descriptor + { + struct variable *var; + + var = argsinsert->variable; + remove_variable_from_list(&argsinsert, var); + add_variable_to_head(&argsresult, var, &no_indicator); + $$ = $1; + } + ; + +opt_ecpg_fetch_into: /* EMPTY */ { $$ = EMPTY; } + | ecpg_fetch_into { $$ = $1; } + ; + +%% + +void base_yyerror(const char *error) +{ + /* translator: %s is typically the translation of "syntax error" */ + mmerror(PARSE_ERROR, ET_ERROR, "%s at or near \"%s\"", + _(error), token_start ? token_start : base_yytext); +} + +void parser_init(void) +{ + /* This function is empty. It only exists for compatibility with the backend parser right now. */ +} diff --git a/src/interfaces/ecpg/preproc/ecpg.type b/src/interfaces/ecpg/preproc/ecpg.type new file mode 100644 index 0000000..e4b77fa --- /dev/null +++ b/src/interfaces/ecpg/preproc/ecpg.type @@ -0,0 +1,146 @@ +/* src/interfaces/ecpg/preproc/ecpg.type */ +%type ECPGAllocateDescr +%type ECPGCKeywords +%type ECPGColId +%type ECPGColLabel +%type ECPGColLabelCommon +%type ECPGConnect +%type ECPGCursorStmt +%type ECPGDeallocateDescr +%type ECPGDeclaration +%type ECPGDeclare +%type ECPGDeclareStmt +%type ECPGDisconnect +%type ECPGExecuteImmediateStmt +%type ECPGFree +%type ECPGGetDescHeaderItem +%type ECPGGetDescItem +%type ECPGGetDescriptorHeader +%type ECPGKeywords +%type ECPGKeywords_rest +%type ECPGKeywords_vanames +%type ECPGOpen +%type ECPGSetAutocommit +%type ECPGSetConnection +%type ECPGSetDescHeaderItem +%type ECPGSetDescItem +%type ECPGSetDescriptorHeader +%type ECPGTypeName +%type ECPGTypedef +%type ECPGVar +%type ECPGVarDeclaration +%type ECPGWhenever +%type ECPGunreserved_interval +%type UsingConst +%type UsingValue +%type all_unreserved_keyword +%type c_anything +%type c_args +%type c_list +%type c_stuff +%type c_stuff_item +%type c_term +%type c_thing +%type char_variable +%type char_civar +%type civar +%type civarind +%type ColId +%type ColLabel +%type connect_options +%type connection_object +%type connection_target +%type coutputvariable +%type cvariable +%type db_prefix +%type CreateAsStmt +%type DeallocateStmt +%type dis_name +%type ecpg_bconst +%type ecpg_fconst +%type ecpg_ident +%type ecpg_interval +%type ecpg_into +%type ecpg_fetch_into +%type ecpg_param +%type ecpg_sconst +%type ecpg_using +%type ecpg_xconst +%type enum_definition +%type enum_type +%type execstring +%type execute_rest +%type indicator +%type into_descriptor +%type into_sqlda +%type Iresult +%type on_off +%type opt_bit_field +%type opt_connection_name +%type opt_database_name +%type opt_ecpg_into +%type opt_ecpg_fetch_into +%type opt_ecpg_using +%type opt_initializer +%type opt_options +%type opt_output +%type opt_pointer +%type opt_port +%type opt_reference +%type opt_scale +%type opt_server +%type opt_user +%type opt_opt_value +%type ora_user +%type precision +%type prepared_name +%type quoted_ident_stringvar +%type s_struct_union +%type server +%type server_name +%type single_vt_declaration +%type storage_clause +%type storage_declaration +%type storage_modifier +%type struct_union_type +%type struct_union_type_with_symbol +%type symbol +%type type_declaration +%type type_function_name +%type user_name +%type using_descriptor +%type var_declaration +%type var_type_declarations +%type variable +%type variable_declarations +%type variable_list +%type vt_declarations + +%type Op +%type IntConstVar +%type AllConstVar +%type CSTRING +%type CPP_LINE +%type CVARIABLE +%type BCONST +%type SCONST +%type XCONST +%type IDENT + +%type s_struct_union_symbol + +%type ECPGGetDescriptor +%type ECPGSetDescriptor + +%type simple_type +%type signed_type +%type unsigned_type + +%type descriptor_item +%type desc_header_item + +%type var_type + +%type action + +%type ECPGDescribe \ No newline at end of file diff --git a/src/interfaces/ecpg/preproc/ecpg_keywords.c b/src/interfaces/ecpg/preproc/ecpg_keywords.c new file mode 100644 index 0000000..a2db06f --- /dev/null +++ b/src/interfaces/ecpg/preproc/ecpg_keywords.c @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------- + * + * ecpg_keywords.c + * lexical token lookup for reserved words in postgres embedded SQL + * + * IDENTIFICATION + * src/interfaces/ecpg/preproc/ecpg_keywords.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres_fe.h" + +#include + +/* ScanKeywordList lookup data for ECPG keywords */ +#include "ecpg_kwlist_d.h" +#include "preproc_extern.h" +#include "preproc.h" + +/* Token codes for ECPG keywords */ +#define PG_KEYWORD(kwname, value) value, + +static const uint16 ECPGScanKeywordTokens[] = { +#include "ecpg_kwlist.h" +}; + +#undef PG_KEYWORD + + +/* + * ScanECPGKeywordLookup - see if a given word is a keyword + * + * Returns the token value of the keyword, or -1 if no match. + * + * Keywords are matched using the same case-folding rules as in the backend. + */ +int +ScanECPGKeywordLookup(const char *text) +{ + int kwnum; + + /* First check SQL symbols defined by the backend. */ + kwnum = ScanKeywordLookup(text, &ScanKeywords); + if (kwnum >= 0) + return SQLScanKeywordTokens[kwnum]; + + /* Try ECPG-specific keywords. */ + kwnum = ScanKeywordLookup(text, &ScanECPGKeywords); + if (kwnum >= 0) + return ECPGScanKeywordTokens[kwnum]; + + return -1; +} diff --git a/src/interfaces/ecpg/preproc/ecpg_kwlist.h b/src/interfaces/ecpg/preproc/ecpg_kwlist.h new file mode 100644 index 0000000..3c466f8 --- /dev/null +++ b/src/interfaces/ecpg/preproc/ecpg_kwlist.h @@ -0,0 +1,67 @@ +/*------------------------------------------------------------------------- + * + * ecpg_kwlist.h + * + * The keyword lists are kept in their own source files for use by + * automatic tools. The exact representation of a keyword is determined + * by the PG_KEYWORD macro, which is not defined in this file; it can + * be defined by the caller for special purposes. + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/interfaces/ecpg/preproc/ecpg_kwlist.h + * + *------------------------------------------------------------------------- + */ + +/* There is deliberately not an #ifndef ECPG_KWLIST_H here. */ + +/* + * List of (keyword-name, keyword-token-value) pairs. + * + * Note: gen_keywordlist.pl requires the entries to appear in ASCII order. + */ + +/* name, value */ +PG_KEYWORD("allocate", SQL_ALLOCATE) +PG_KEYWORD("autocommit", SQL_AUTOCOMMIT) +PG_KEYWORD("bool", SQL_BOOL) +PG_KEYWORD("break", SQL_BREAK) +PG_KEYWORD("cardinality", SQL_CARDINALITY) +PG_KEYWORD("connect", SQL_CONNECT) +PG_KEYWORD("count", SQL_COUNT) +PG_KEYWORD("datetime_interval_code", SQL_DATETIME_INTERVAL_CODE) +PG_KEYWORD("datetime_interval_precision", SQL_DATETIME_INTERVAL_PRECISION) +PG_KEYWORD("describe", SQL_DESCRIBE) +PG_KEYWORD("descriptor", SQL_DESCRIPTOR) +PG_KEYWORD("disconnect", SQL_DISCONNECT) +PG_KEYWORD("found", SQL_FOUND) +PG_KEYWORD("free", SQL_FREE) +PG_KEYWORD("get", SQL_GET) +PG_KEYWORD("go", SQL_GO) +PG_KEYWORD("goto", SQL_GOTO) +PG_KEYWORD("identified", SQL_IDENTIFIED) +PG_KEYWORD("indicator", SQL_INDICATOR) +PG_KEYWORD("key_member", SQL_KEY_MEMBER) +PG_KEYWORD("length", SQL_LENGTH) +PG_KEYWORD("long", SQL_LONG) +PG_KEYWORD("nullable", SQL_NULLABLE) +PG_KEYWORD("octet_length", SQL_OCTET_LENGTH) +PG_KEYWORD("open", SQL_OPEN) +PG_KEYWORD("output", SQL_OUTPUT) +PG_KEYWORD("reference", SQL_REFERENCE) +PG_KEYWORD("returned_length", SQL_RETURNED_LENGTH) +PG_KEYWORD("returned_octet_length", SQL_RETURNED_OCTET_LENGTH) +PG_KEYWORD("scale", SQL_SCALE) +PG_KEYWORD("section", SQL_SECTION) +PG_KEYWORD("short", SQL_SHORT) +PG_KEYWORD("signed", SQL_SIGNED) +PG_KEYWORD("sqlerror", SQL_SQLERROR) +PG_KEYWORD("sqlprint", SQL_SQLPRINT) +PG_KEYWORD("sqlwarning", SQL_SQLWARNING) +PG_KEYWORD("stop", SQL_STOP) +PG_KEYWORD("struct", SQL_STRUCT) +PG_KEYWORD("unsigned", SQL_UNSIGNED) +PG_KEYWORD("var", SQL_VAR) +PG_KEYWORD("whenever", SQL_WHENEVER) diff --git a/src/interfaces/ecpg/preproc/ecpg_kwlist_d.h b/src/interfaces/ecpg/preproc/ecpg_kwlist_d.h new file mode 100644 index 0000000..2196577 --- /dev/null +++ b/src/interfaces/ecpg/preproc/ecpg_kwlist_d.h @@ -0,0 +1,152 @@ +/*------------------------------------------------------------------------- + * + * ecpg_kwlist_d.h + * List of keywords represented as a ScanKeywordList. + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * NOTES + * ****************************** + * *** DO NOT EDIT THIS FILE! *** + * ****************************** + * + * It has been GENERATED by src/tools/gen_keywordlist.pl + * + *------------------------------------------------------------------------- + */ + +#ifndef ECPG_KWLIST_D_H +#define ECPG_KWLIST_D_H + +#include "common/kwlookup.h" + +static const char ScanECPGKeywords_kw_string[] = + "allocate\0" + "autocommit\0" + "bool\0" + "break\0" + "cardinality\0" + "connect\0" + "count\0" + "datetime_interval_code\0" + "datetime_interval_precision\0" + "describe\0" + "descriptor\0" + "disconnect\0" + "found\0" + "free\0" + "get\0" + "go\0" + "goto\0" + "identified\0" + "indicator\0" + "key_member\0" + "length\0" + "long\0" + "nullable\0" + "octet_length\0" + "open\0" + "output\0" + "reference\0" + "returned_length\0" + "returned_octet_length\0" + "scale\0" + "section\0" + "short\0" + "signed\0" + "sqlerror\0" + "sqlprint\0" + "sqlwarning\0" + "stop\0" + "struct\0" + "unsigned\0" + "var\0" + "whenever"; + +static const uint16 ScanECPGKeywords_kw_offsets[] = { + 0, + 9, + 20, + 25, + 31, + 43, + 51, + 57, + 80, + 108, + 117, + 128, + 139, + 145, + 150, + 154, + 157, + 162, + 173, + 183, + 194, + 201, + 206, + 215, + 228, + 233, + 240, + 250, + 266, + 288, + 294, + 302, + 308, + 315, + 324, + 333, + 344, + 349, + 356, + 365, + 369, +}; + +#define SCANECPGKEYWORDS_NUM_KEYWORDS 41 + +static int +ScanECPGKeywords_hash_func(const void *key, size_t keylen) +{ + static const int8 h[83] = { + -10, -4, 127, 0, 32, 27, 127, -10, + 127, 37, -28, 127, 3, 31, 127, -17, + 127, 127, -3, 127, 127, 0, 15, 127, + 127, 34, 127, 127, 127, 24, 41, 3, + 34, -24, 127, 127, 0, 127, 127, 127, + 16, 0, 33, 127, 127, 127, 14, 127, + 127, 18, 0, 127, 127, -4, -20, 21, + 0, 0, 30, 5, 0, 127, 23, 6, + 127, -14, 127, 127, 54, 0, -6, 0, + 0, -2, 36, 12, 0, -12, 41, 8, + 19, 127, 11 + }; + + const unsigned char *k = (const unsigned char *) key; + uint32 a = 0; + uint32 b = 1; + + while (keylen--) + { + unsigned char c = *k++ | 0x20; + + a = a * 257 + c; + b = b * 17 + c; + } + return h[a % 83] + h[b % 83]; +} + +static const ScanKeywordList ScanECPGKeywords = { + ScanECPGKeywords_kw_string, + ScanECPGKeywords_kw_offsets, + ScanECPGKeywords_hash_func, + SCANECPGKEYWORDS_NUM_KEYWORDS, + 27 +}; + +#endif /* ECPG_KWLIST_D_H */ diff --git a/src/interfaces/ecpg/preproc/keywords.c b/src/interfaces/ecpg/preproc/keywords.c new file mode 100644 index 0000000..83609e3 --- /dev/null +++ b/src/interfaces/ecpg/preproc/keywords.c @@ -0,0 +1,38 @@ +/*------------------------------------------------------------------------- + * + * keywords.c + * lexical token lookup for key words in PostgreSQL + * + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * src/interfaces/ecpg/preproc/keywords.c + * + *------------------------------------------------------------------------- + */ +#include "postgres_fe.h" + +/* + * This is much trickier than it looks. We are #include'ing kwlist.h + * but the token numbers that go into the table are from preproc.h + * not the backend's gram.h. Therefore this token table will match + * the ScanKeywords table supplied from common/keywords.c, including all + * keywords known to the backend, but it will supply the token numbers used + * by ecpg's grammar, which is what we need. The ecpg grammar must + * define all the same token names the backend does, else we'll get + * undefined-symbol failures in this compile. + */ + +#include "preproc_extern.h" +#include "preproc.h" + +#define PG_KEYWORD(kwname, value, category, collabel) value, + +const uint16 SQLScanKeywordTokens[] = { +#include "parser/kwlist.h" +}; + +#undef PG_KEYWORD diff --git a/src/interfaces/ecpg/preproc/nls.mk b/src/interfaces/ecpg/preproc/nls.mk new file mode 100644 index 0000000..fed0f7c --- /dev/null +++ b/src/interfaces/ecpg/preproc/nls.mk @@ -0,0 +1,6 @@ +# src/interfaces/ecpg/preproc/nls.mk +CATALOG_NAME = ecpg +AVAIL_LANGUAGES = cs de el es fr it ja ko pl pt_BR ru sv tr uk vi zh_CN zh_TW +GETTEXT_FILES = descriptor.c ecpg.c pgc.c preproc.c type.c variable.c +GETTEXT_TRIGGERS = mmerror:3 mmfatal:2 +GETTEXT_FLAGS = mmerror:3:c-format mmfatal:2:c-format diff --git a/src/interfaces/ecpg/preproc/output.c b/src/interfaces/ecpg/preproc/output.c new file mode 100644 index 0000000..cf8aadd --- /dev/null +++ b/src/interfaces/ecpg/preproc/output.c @@ -0,0 +1,251 @@ +/* src/interfaces/ecpg/preproc/output.c */ + +#include "postgres_fe.h" + +#include "preproc_extern.h" + +static void output_escaped_str(char *cmd, bool quoted); + +void +output_line_number(void) +{ + char *line = hashline_number(); + + fprintf(base_yyout, "%s", line); + free(line); +} + +void +output_simple_statement(char *stmt, int whenever_mode) +{ + output_escaped_str(stmt, false); + if (whenever_mode) + whenever_action(whenever_mode); + output_line_number(); + free(stmt); +} + + +/* + * store the whenever action here + */ +struct when when_error, + when_nf, + when_warn; + +static void +print_action(struct when *w) +{ + switch (w->code) + { + case W_SQLPRINT: + fprintf(base_yyout, "sqlprint();"); + break; + case W_GOTO: + fprintf(base_yyout, "goto %s;", w->command); + break; + case W_DO: + fprintf(base_yyout, "%s;", w->command); + break; + case W_STOP: + fprintf(base_yyout, "exit (1);"); + break; + case W_BREAK: + fprintf(base_yyout, "break;"); + break; + case W_CONTINUE: + fprintf(base_yyout, "continue;"); + break; + default: + fprintf(base_yyout, "{/* %d not implemented yet */}", w->code); + break; + } +} + +void +whenever_action(int mode) +{ + if ((mode & 1) == 1 && when_nf.code != W_NOTHING) + { + output_line_number(); + fprintf(base_yyout, "\nif (sqlca.sqlcode == ECPG_NOT_FOUND) "); + print_action(&when_nf); + } + if (when_warn.code != W_NOTHING) + { + output_line_number(); + fprintf(base_yyout, "\nif (sqlca.sqlwarn[0] == 'W') "); + print_action(&when_warn); + } + if (when_error.code != W_NOTHING) + { + output_line_number(); + fprintf(base_yyout, "\nif (sqlca.sqlcode < 0) "); + print_action(&when_error); + } + + if ((mode & 2) == 2) + fputc('}', base_yyout); + + output_line_number(); +} + +char * +hashline_number(void) +{ + /* do not print line numbers if we are in debug mode */ + if (input_filename +#ifdef YYDEBUG + && !base_yydebug +#endif + ) + { + /* "* 2" here is for escaping '\' and '"' below */ + char *line = mm_alloc(strlen("\n#line %d \"%s\"\n") + sizeof(int) * CHAR_BIT * 10 / 3 + strlen(input_filename) * 2); + char *src, + *dest; + + sprintf(line, "\n#line %d \"", base_yylineno); + src = input_filename; + dest = line + strlen(line); + while (*src) + { + if (*src == '\\' || *src == '"') + *dest++ = '\\'; + *dest++ = *src++; + } + *dest = '\0'; + strcat(dest, "\"\n"); + + return line; + } + + return EMPTY; +} + +static char *ecpg_statement_type_name[] = { + "ECPGst_normal", + "ECPGst_execute", + "ECPGst_exec_immediate", + "ECPGst_prepnormal", + "ECPGst_prepare", + "ECPGst_exec_with_exprlist" +}; + +void +output_statement(char *stmt, int whenever_mode, enum ECPG_statement_type st) +{ + fprintf(base_yyout, "{ ECPGdo(__LINE__, %d, %d, %s, %d, ", compat, force_indicator, connection ? connection : "NULL", questionmarks); + + if (st == ECPGst_prepnormal && !auto_prepare) + st = ECPGst_normal; + + /* + * In following cases, stmt is CSTRING or char_variable. They must be + * output directly. - prepared_name of EXECUTE without exprlist - + * execstring of EXECUTE IMMEDIATE + */ + fprintf(base_yyout, "%s, ", ecpg_statement_type_name[st]); + if (st == ECPGst_execute || st == ECPGst_exec_immediate) + fprintf(base_yyout, "%s, ", stmt); + else + { + fputs("\"", base_yyout); + output_escaped_str(stmt, false); + fputs("\", ", base_yyout); + } + + /* dump variables to C file */ + dump_variables(argsinsert, 1); + fputs("ECPGt_EOIT, ", base_yyout); + dump_variables(argsresult, 1); + fputs("ECPGt_EORT);", base_yyout); + reset_variables(); + + whenever_action(whenever_mode | 2); + free(stmt); +} + +void +output_prepare_statement(char *name, char *stmt) +{ + fprintf(base_yyout, "{ ECPGprepare(__LINE__, %s, %d, ", connection ? connection : "NULL", questionmarks); + output_escaped_str(name, true); + fputs(", ", base_yyout); + output_escaped_str(stmt, true); + fputs(");", base_yyout); + whenever_action(2); + free(name); +} + +void +output_deallocate_prepare_statement(char *name) +{ + const char *con = connection ? connection : "NULL"; + + if (strcmp(name, "all") != 0) + { + fprintf(base_yyout, "{ ECPGdeallocate(__LINE__, %d, %s, ", compat, con); + output_escaped_str(name, true); + fputs(");", base_yyout); + } + else + fprintf(base_yyout, "{ ECPGdeallocate_all(__LINE__, %d, %s);", compat, con); + + whenever_action(2); + free(name); +} + +static void +output_escaped_str(char *str, bool quoted) +{ + int i = 0; + int len = strlen(str); + + if (quoted && str[0] == '"' && str[len - 1] == '"') /* do not escape quotes + * at beginning and end + * if quoted string */ + { + i = 1; + len--; + fputs("\"", base_yyout); + } + + /* output this char by char as we have to filter " and \n */ + for (; i < len; i++) + { + if (str[i] == '"') + fputs("\\\"", base_yyout); + else if (str[i] == '\n') + fputs("\\\n", base_yyout); + else if (str[i] == '\\') + { + int j = i; + + /* + * check whether this is a continuation line if it is, do not + * output anything because newlines are escaped anyway + */ + + /* accept blanks after the '\' as some other compilers do too */ + do + { + j++; + } while (str[j] == ' ' || str[j] == '\t'); + + if ((str[j] != '\n') && (str[j] != '\r' || str[j + 1] != '\n')) /* not followed by a + * newline */ + fputs("\\\\", base_yyout); + } + else if (str[i] == '\r' && str[i + 1] == '\n') + { + fputs("\\\r\n", base_yyout); + i++; + } + else + fputc(str[i], base_yyout); + } + + if (quoted && str[0] == '"' && str[len] == '"') + fputs("\"", base_yyout); +} diff --git a/src/interfaces/ecpg/preproc/parse.pl b/src/interfaces/ecpg/preproc/parse.pl new file mode 100644 index 0000000..1e24801 --- /dev/null +++ b/src/interfaces/ecpg/preproc/parse.pl @@ -0,0 +1,698 @@ +#!/usr/bin/perl +# src/interfaces/ecpg/preproc/parse.pl +# parser generator for ecpg version 2 +# call with backend parser as stdin +# +# Copyright (c) 2007-2021, PostgreSQL Global Development Group +# +# Written by Mike Aubury +# Michael Meskes +# Andy Colson +# +# Placed under the same license as PostgreSQL. +# + +use strict; +use warnings; +no warnings 'uninitialized'; + +my $path = shift @ARGV; +$path = "." unless $path; + +my $copymode = 0; +my $brace_indent = 0; +my $yaccmode = 0; +my $in_rule = 0; +my $header_included = 0; +my $feature_not_supported = 0; +my $tokenmode = 0; + +my (%buff, $infield, $comment, %tokens, %addons); +my ($stmt_mode, @fields); +my ($line, $non_term_id); + + +# some token have to be replaced by other symbols +# either in the rule +my %replace_token = ( + 'BCONST' => 'ecpg_bconst', + 'FCONST' => 'ecpg_fconst', + 'Sconst' => 'ecpg_sconst', + 'XCONST' => 'ecpg_xconst', + 'IDENT' => 'ecpg_ident', + 'PARAM' => 'ecpg_param',); + +# or in the block +my %replace_string = ( + 'NOT_LA' => 'not', + 'NULLS_LA' => 'nulls', + 'WITH_LA' => 'with', + 'TYPECAST' => '::', + 'DOT_DOT' => '..', + 'COLON_EQUALS' => ':=', + 'EQUALS_GREATER' => '=>', + 'LESS_EQUALS' => '<=', + 'GREATER_EQUALS' => '>=', + 'NOT_EQUALS' => '<>',); + +# specific replace_types for specific non-terminals - never include the ':' +# ECPG-only replace_types are defined in ecpg-replace_types +my %replace_types = ( + 'PrepareStmt' => '', + 'ExecuteStmt' => '', + 'opt_array_bounds' => '', + + # "ignore" means: do not create type and rules for this non-term-id + 'parse_toplevel' => 'ignore', + 'stmtmulti' => 'ignore', + 'CreateAsStmt' => 'ignore', + 'DeallocateStmt' => 'ignore', + 'ColId' => 'ignore', + 'type_function_name' => 'ignore', + 'ColLabel' => 'ignore', + 'Sconst' => 'ignore', + 'opt_distinct_clause' => 'ignore', + 'PLpgSQL_Expr' => 'ignore', + 'PLAssignStmt' => 'ignore', + 'plassign_target' => 'ignore', + 'plassign_equals' => 'ignore',); + +# these replace_line commands excise certain keywords from the core keyword +# lists. Be sure to account for these in ColLabel and related productions. +my %replace_line = ( + 'unreserved_keywordCONNECTION' => 'ignore', + 'unreserved_keywordCURRENT_P' => 'ignore', + 'unreserved_keywordDAY_P' => 'ignore', + 'unreserved_keywordHOUR_P' => 'ignore', + 'unreserved_keywordINPUT_P' => 'ignore', + 'unreserved_keywordMINUTE_P' => 'ignore', + 'unreserved_keywordMONTH_P' => 'ignore', + 'unreserved_keywordSECOND_P' => 'ignore', + 'unreserved_keywordYEAR_P' => 'ignore', + 'col_name_keywordCHAR_P' => 'ignore', + 'col_name_keywordINT_P' => 'ignore', + 'col_name_keywordVALUES' => 'ignore', + 'reserved_keywordTO' => 'ignore', + 'reserved_keywordUNION' => 'ignore', + + # some other production rules have to be ignored or replaced + 'fetch_argsFORWARDopt_from_incursor_name' => 'ignore', + 'fetch_argsBACKWARDopt_from_incursor_name' => 'ignore', + "opt_array_boundsopt_array_bounds'['Iconst']'" => 'ignore', + 'VariableShowStmtSHOWvar_name' => 'SHOW var_name ecpg_into', + 'VariableShowStmtSHOWTIMEZONE' => 'SHOW TIME ZONE ecpg_into', + 'VariableShowStmtSHOWTRANSACTIONISOLATIONLEVEL' => + 'SHOW TRANSACTION ISOLATION LEVEL ecpg_into', + 'VariableShowStmtSHOWSESSIONAUTHORIZATION' => + 'SHOW SESSION AUTHORIZATION ecpg_into', + 'returning_clauseRETURNINGtarget_list' => + 'RETURNING target_list opt_ecpg_into', + 'ExecuteStmtEXECUTEnameexecute_param_clause' => + 'EXECUTE prepared_name execute_param_clause execute_rest', + 'ExecuteStmtCREATEOptTempTABLEcreate_as_targetASEXECUTEnameexecute_param_clauseopt_with_data' + => 'CREATE OptTemp TABLE create_as_target AS EXECUTE prepared_name execute_param_clause opt_with_data execute_rest', + 'ExecuteStmtCREATEOptTempTABLEIF_PNOTEXISTScreate_as_targetASEXECUTEnameexecute_param_clauseopt_with_data' + => 'CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS EXECUTE prepared_name execute_param_clause opt_with_data execute_rest', + 'PrepareStmtPREPAREnameprep_type_clauseASPreparableStmt' => + 'PREPARE prepared_name prep_type_clause AS PreparableStmt', + 'var_nameColId' => 'ECPGColId'); + +preload_addons(); + +main(); + +dump_buffer('header'); +dump_buffer('tokens'); +dump_buffer('types'); +dump_buffer('ecpgtype'); +dump_buffer('orig_tokens'); +print '%%', "\n"; +print 'prog: statements;', "\n"; +dump_buffer('rules'); +include_file('trailer', 'ecpg.trailer'); +dump_buffer('trailer'); + +sub main +{ + line: while (<>) + { + if (/ERRCODE_FEATURE_NOT_SUPPORTED/) + { + $feature_not_supported = 1; + next line; + } + + chomp; + + # comment out the line below to make the result file match (blank line wise) + # the prior version. + #next if ($_ eq ''); + + # Dump the action for a rule - + # stmt_mode indicates if we are processing the 'stmt:' + # rule (mode==0 means normal, mode==1 means stmt:) + # flds are the fields to use. These may start with a '$' - in + # which case they are the result of a previous non-terminal + # + # if they don't start with a '$' then they are token name + # + # len is the number of fields in flds... + # leadin is the padding to apply at the beginning (just use for formatting) + + if (/^%%/) + { + $tokenmode = 2; + $copymode = 1; + $yaccmode++; + $infield = 0; + } + + my $prec = 0; + + # Make sure any braces are split + s/{/ { /g; + s/}/ } /g; + + # Any comments are split + s|\/\*| /* |g; + s|\*\/| */ |g; + + # Now split the line into individual fields + my @arr = split(' '); + + if ($arr[0] eq '%token' && $tokenmode == 0) + { + $tokenmode = 1; + include_file('tokens', 'ecpg.tokens'); + } + elsif ($arr[0] eq '%type' && $header_included == 0) + { + include_file('header', 'ecpg.header'); + include_file('ecpgtype', 'ecpg.type'); + $header_included = 1; + } + + if ($tokenmode == 1) + { + my $str = ''; + my $prior = ''; + for my $a (@arr) + { + if ($a eq '/*') + { + $comment++; + next; + } + if ($a eq '*/') + { + $comment--; + next; + } + if ($comment) + { + next; + } + if (substr($a, 0, 1) eq '<') + { + next; + + # its a type + } + $tokens{$a} = 1; + + $str = $str . ' ' . $a; + if ($a eq 'IDENT' && $prior eq '%nonassoc') + { + + # add more tokens to the list + $str = $str . "\n%nonassoc CSTRING"; + } + $prior = $a; + } + add_to_buffer('orig_tokens', $str); + next line; + } + + # Don't worry about anything if we're not in the right section of gram.y + if ($yaccmode != 1) + { + next line; + } + + + # Go through each field in turn + for ( + my $fieldIndexer = 0; + $fieldIndexer < scalar(@arr); + $fieldIndexer++) + { + if ($arr[$fieldIndexer] eq '*/' && $comment) + { + $comment = 0; + next; + } + elsif ($comment) + { + next; + } + elsif ($arr[$fieldIndexer] eq '/*') + { + + # start of a multiline comment + $comment = 1; + next; + } + elsif ($arr[$fieldIndexer] eq '//') + { + next line; + } + elsif ($arr[$fieldIndexer] eq '}') + { + $brace_indent--; + next; + } + elsif ($arr[$fieldIndexer] eq '{') + { + $brace_indent++; + next; + } + + if ($brace_indent > 0) + { + next; + } + if ($arr[$fieldIndexer] eq ';') + { + if ($copymode) + { + if ($infield) + { + dump_line($stmt_mode, \@fields); + } + add_to_buffer('rules', ";\n\n"); + } + else + { + $copymode = 1; + } + @fields = (); + $infield = 0; + $line = ''; + $in_rule = 0; + next; + } + + if ($arr[$fieldIndexer] eq '|') + { + if ($copymode) + { + if ($infield) + { + $infield = $infield + dump_line($stmt_mode, \@fields); + } + if ($infield > 1) + { + $line = '| '; + } + } + @fields = (); + next; + } + + if (exists $replace_token{ $arr[$fieldIndexer] }) + { + $arr[$fieldIndexer] = $replace_token{ $arr[$fieldIndexer] }; + } + + # Are we looking at a declaration of a non-terminal ? + if (($arr[$fieldIndexer] =~ /[A-Za-z0-9]+:/) + || $arr[ $fieldIndexer + 1 ] eq ':') + { + $non_term_id = $arr[$fieldIndexer]; + $non_term_id =~ tr/://d; + + if (not defined $replace_types{$non_term_id}) + { + $replace_types{$non_term_id} = ''; + $copymode = 1; + } + elsif ($replace_types{$non_term_id} eq 'ignore') + { + $copymode = 0; + $line = ''; + next line; + } + $line = $line . ' ' . $arr[$fieldIndexer]; + + # Do we have the : attached already ? + # If yes, we'll have already printed the ':' + if (!($arr[$fieldIndexer] =~ '[A-Za-z0-9]+:')) + { + + # Consume the ':' which is next... + $line = $line . ':'; + $fieldIndexer++; + } + + # Special mode? + if ($non_term_id eq 'stmt') + { + $stmt_mode = 1; + } + else + { + $stmt_mode = 0; + } + my $tstr = + '%type ' + . $replace_types{$non_term_id} . ' ' + . $non_term_id; + add_to_buffer('types', $tstr); + + if ($copymode) + { + add_to_buffer('rules', $line); + } + $line = ''; + @fields = (); + $infield = 1; + die "unterminated rule at grammar line $.\n" + if $in_rule; + $in_rule = 1; + next; + } + elsif ($copymode) + { + $line = $line . ' ' . $arr[$fieldIndexer]; + } + if ($arr[$fieldIndexer] eq '%prec') + { + $prec = 1; + next; + } + + if ( $copymode + && !$prec + && !$comment + && length($arr[$fieldIndexer]) + && $infield) + { + if ($arr[$fieldIndexer] ne 'Op' + && ( $tokens{ $arr[$fieldIndexer] } > 0 + || $arr[$fieldIndexer] =~ /'.+'/) + || $stmt_mode == 1) + { + my $S; + if (exists $replace_string{ $arr[$fieldIndexer] }) + { + $S = $replace_string{ $arr[$fieldIndexer] }; + } + else + { + $S = $arr[$fieldIndexer]; + } + $S =~ s/_P//g; + $S =~ tr/'//d; + if ($stmt_mode == 1) + { + push(@fields, $S); + } + else + { + push(@fields, lc($S)); + } + } + else + { + push(@fields, '$' . (scalar(@fields) + 1)); + } + } + } + } + die "unterminated rule at end of grammar\n" + if $in_rule; + return; +} + + +# append a file onto a buffer. +# Arguments: buffer_name, filename (without path) +sub include_file +{ + my ($buffer, $filename) = @_; + my $full = "$path/$filename"; + open(my $fh, '<', $full) or die; + while (<$fh>) + { + chomp; + add_to_buffer($buffer, $_); + } + close($fh); + return; +} + +sub include_addon +{ + my ($buffer, $block, $fields, $stmt_mode) = @_; + my $rec = $addons{$block}; + return 0 unless $rec; + + if ($rec->{type} eq 'rule') + { + dump_fields($stmt_mode, $fields, ' { '); + } + elsif ($rec->{type} eq 'addon') + { + add_to_buffer('rules', ' { '); + } + + #add_to_buffer( $stream, $_ ); + #We have an array to add to the buffer, we'll add it ourself instead of + #calling add_to_buffer, which does not know about arrays + + push(@{ $buff{$buffer} }, @{ $rec->{lines} }); + + if ($rec->{type} eq 'addon') + { + dump_fields($stmt_mode, $fields, ''); + } + + + # if we added something (ie there are lines in our array), return 1 + return 1 if (scalar(@{ $rec->{lines} }) > 0); + return 0; +} + + +# include_addon does this same thing, but does not call this +# sub... so if you change this, you need to fix include_addon too +# Pass: buffer_name, string_to_append +sub add_to_buffer +{ + push(@{ $buff{ $_[0] } }, "$_[1]\n"); + return; +} + +sub dump_buffer +{ + my ($buffer) = @_; + print '/* ', $buffer, ' */', "\n"; + my $ref = $buff{$buffer}; + print @$ref; + return; +} + +sub dump_fields +{ + my ($mode, $flds, $ln) = @_; + my $len = scalar(@$flds); + + if ($mode == 0) + { + + #Normal + add_to_buffer('rules', $ln); + if ($feature_not_supported == 1) + { + + # we found an unsupported feature, but we have to + # filter out ExecuteStmt: CREATE OptTemp TABLE ... + # because the warning there is only valid in some situations + if ($flds->[0] ne 'create' || $flds->[2] ne 'table') + { + add_to_buffer('rules', + 'mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server");' + ); + } + $feature_not_supported = 0; + } + + if ($len == 0) + { + + # We have no fields ? + add_to_buffer('rules', ' $$=EMPTY; }'); + } + else + { + + # Go through each field and try to 'aggregate' the tokens + # into a single 'mm_strdup' where possible + my @flds_new; + my $str; + for (my $z = 0; $z < $len; $z++) + { + if (substr($flds->[$z], 0, 1) eq '$') + { + push(@flds_new, $flds->[$z]); + next; + } + + $str = $flds->[$z]; + + while (1) + { + if ($z >= $len - 1 + || substr($flds->[ $z + 1 ], 0, 1) eq '$') + { + + # We're at the end... + push(@flds_new, "mm_strdup(\"$str\")"); + last; + } + $z++; + $str = $str . ' ' . $flds->[$z]; + } + } + + # So - how many fields did we end up with ? + $len = scalar(@flds_new); + if ($len == 1) + { + + # Straight assignment + $str = ' $$ = ' . $flds_new[0] . ';'; + add_to_buffer('rules', $str); + } + else + { + + # Need to concatenate the results to form + # our final string + $str = + ' $$ = cat_str(' . $len . ',' . join(',', @flds_new) . ');'; + add_to_buffer('rules', $str); + } + add_to_buffer('rules', '}'); + } + } + else + { + + # we're in the stmt: rule + if ($len) + { + + # or just the statement ... + add_to_buffer('rules', + ' { output_statement($1, 0, ECPGst_normal); }'); + } + else + { + add_to_buffer('rules', ' { $$ = NULL; }'); + } + } + return; +} + + +sub dump_line +{ + my ($stmt_mode, $fields) = @_; + my $block = $non_term_id . $line; + $block =~ tr/ |//d; + my $rep = $replace_line{$block}; + if ($rep) + { + if ($rep eq 'ignore') + { + return 0; + } + + if (index($line, '|') != -1) + { + $line = '| ' . $rep; + } + else + { + $line = $rep; + } + $block = $non_term_id . $line; + $block =~ tr/ |//d; + } + add_to_buffer('rules', $line); + my $i = include_addon('rules', $block, $fields, $stmt_mode); + if ($i == 0) + { + dump_fields($stmt_mode, $fields, ' { '); + } + return 1; +} + +=top + load addons into cache + %addons = { + stmtClosePortalStmt => { 'type' => 'block', 'lines' => [ "{", "if (INFORMIX_MODE)" ..., "}" ] }, + stmtViewStmt => { 'type' => 'rule', 'lines' => [ "| ECPGAllocateDescr", ... ] } + } + +=cut + +sub preload_addons +{ + my $filename = $path . "/ecpg.addons"; + open(my $fh, '<', $filename) or die; + + # there may be multiple lines starting ECPG: and then multiple lines of code. + # the code need to be add to all prior ECPG records. + my (@needsRules, @code, $record); + + # there may be comments before the first ECPG line, skip them + my $skip = 1; + while (<$fh>) + { + if (/^ECPG:\s(\S+)\s?(\w+)?/) + { + $skip = 0; + if (@code) + { + for my $x (@needsRules) + { + push(@{ $x->{lines} }, @code); + } + @code = (); + @needsRules = (); + } + $record = {}; + $record->{type} = $2; + $record->{lines} = []; + if (exists $addons{$1}) { die "Ga! there are dups!\n"; } + $addons{$1} = $record; + push(@needsRules, $record); + } + else + { + next if $skip; + push(@code, $_); + } + } + close($fh); + if (@code) + { + for my $x (@needsRules) + { + push(@{ $x->{lines} }, @code); + } + } + return; +} diff --git a/src/interfaces/ecpg/preproc/parser.c b/src/interfaces/ecpg/preproc/parser.c new file mode 100644 index 0000000..a8571a3 --- /dev/null +++ b/src/interfaces/ecpg/preproc/parser.c @@ -0,0 +1,231 @@ +/*------------------------------------------------------------------------- + * + * parser.c + * Main entry point/driver for PostgreSQL grammar + * + * This should match src/backend/parser/parser.c, except that we do not + * need to bother with re-entrant interfaces. + * + * Note: ECPG doesn't report error location like the backend does. + * This file will need work if we ever want it to. + * + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/interfaces/ecpg/preproc/parser.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres_fe.h" + +#include "preproc_extern.h" +#include "preproc.h" + + +static bool have_lookahead; /* is lookahead info valid? */ +static int lookahead_token; /* one-token lookahead */ +static YYSTYPE lookahead_yylval; /* yylval for lookahead token */ +static YYLTYPE lookahead_yylloc; /* yylloc for lookahead token */ +static char *lookahead_yytext; /* start current token */ + +static bool check_uescapechar(unsigned char escape); +static bool ecpg_isspace(char ch); + + +/* + * Intermediate filter between parser and base lexer (base_yylex in scan.l). + * + * This filter is needed because in some cases the standard SQL grammar + * requires more than one token lookahead. We reduce these cases to one-token + * lookahead by replacing tokens here, in order to keep the grammar LALR(1). + * + * Using a filter is simpler than trying to recognize multiword tokens + * directly in scan.l, because we'd have to allow for comments between the + * words. Furthermore it's not clear how to do that without re-introducing + * scanner backtrack, which would cost more performance than this filter + * layer does. + * + * We also use this filter to convert UIDENT and USCONST sequences into + * plain IDENT and SCONST tokens. While that could be handled by additional + * productions in the main grammar, it's more efficient to do it like this. + */ +int +filtered_base_yylex(void) +{ + int cur_token; + int next_token; + YYSTYPE cur_yylval; + YYLTYPE cur_yylloc; + char *cur_yytext; + + /* Get next token --- we might already have it */ + if (have_lookahead) + { + cur_token = lookahead_token; + base_yylval = lookahead_yylval; + base_yylloc = lookahead_yylloc; + base_yytext = lookahead_yytext; + have_lookahead = false; + } + else + cur_token = base_yylex(); + + /* + * If this token isn't one that requires lookahead, just return it. + */ + switch (cur_token) + { + case NOT: + case NULLS_P: + case WITH: + case UIDENT: + case USCONST: + break; + default: + return cur_token; + } + + /* Save and restore lexer output variables around the call */ + cur_yylval = base_yylval; + cur_yylloc = base_yylloc; + cur_yytext = base_yytext; + + /* Get next token, saving outputs into lookahead variables */ + next_token = base_yylex(); + + lookahead_token = next_token; + lookahead_yylval = base_yylval; + lookahead_yylloc = base_yylloc; + lookahead_yytext = base_yytext; + + base_yylval = cur_yylval; + base_yylloc = cur_yylloc; + base_yytext = cur_yytext; + + have_lookahead = true; + + /* Replace cur_token if needed, based on lookahead */ + switch (cur_token) + { + case NOT: + /* Replace NOT by NOT_LA if it's followed by BETWEEN, IN, etc */ + switch (next_token) + { + case BETWEEN: + case IN_P: + case LIKE: + case ILIKE: + case SIMILAR: + cur_token = NOT_LA; + break; + } + break; + + case NULLS_P: + /* Replace NULLS_P by NULLS_LA if it's followed by FIRST or LAST */ + switch (next_token) + { + case FIRST_P: + case LAST_P: + cur_token = NULLS_LA; + break; + } + break; + + case WITH: + /* Replace WITH by WITH_LA if it's followed by TIME or ORDINALITY */ + switch (next_token) + { + case TIME: + case ORDINALITY: + cur_token = WITH_LA; + break; + } + break; + case UIDENT: + case USCONST: + /* Look ahead for UESCAPE */ + if (next_token == UESCAPE) + { + /* Yup, so get third token, which had better be SCONST */ + const char *escstr; + + /* + * Again save and restore lexer output variables around the + * call + */ + cur_yylval = base_yylval; + cur_yylloc = base_yylloc; + cur_yytext = base_yytext; + + /* Get third token */ + next_token = base_yylex(); + + if (next_token != SCONST) + mmerror(PARSE_ERROR, ET_ERROR, "UESCAPE must be followed by a simple string literal"); + + /* + * Save and check escape string, which the scanner returns + * with quotes + */ + escstr = base_yylval.str; + if (strlen(escstr) != 3 || !check_uescapechar(escstr[1])) + mmerror(PARSE_ERROR, ET_ERROR, "invalid Unicode escape character"); + + base_yylval = cur_yylval; + base_yylloc = cur_yylloc; + base_yytext = cur_yytext; + + /* Combine 3 tokens into 1 */ + base_yylval.str = psprintf("%s UESCAPE %s", base_yylval.str, escstr); + + /* Clear have_lookahead, thereby consuming all three tokens */ + have_lookahead = false; + } + + if (cur_token == UIDENT) + cur_token = IDENT; + else if (cur_token == USCONST) + cur_token = SCONST; + break; + } + + return cur_token; +} + +/* + * check_uescapechar() and ecpg_isspace() should match their equivalents + * in pgc.l. + */ + +/* is 'escape' acceptable as Unicode escape character (UESCAPE syntax) ? */ +static bool +check_uescapechar(unsigned char escape) +{ + if (isxdigit(escape) + || escape == '+' + || escape == '\'' + || escape == '"' + || ecpg_isspace(escape)) + return false; + else + return true; +} + +/* + * ecpg_isspace() --- return true if flex scanner considers char whitespace + */ +static bool +ecpg_isspace(char ch) +{ + if (ch == ' ' || + ch == '\t' || + ch == '\n' || + ch == '\r' || + ch == '\f') + return true; + return false; +} diff --git a/src/interfaces/ecpg/preproc/pgc.c b/src/interfaces/ecpg/preproc/pgc.c new file mode 100644 index 0000000..9a2171f --- /dev/null +++ b/src/interfaces/ecpg/preproc/pgc.c @@ -0,0 +1,5005 @@ +#line 2 "pgc.c" +/*------------------------------------------------------------------------- + * + * pgc.l + * lexical scanner for ecpg + * + * This is a modified version of src/backend/parser/scan.l + * + * The ecpg scanner is not backup-free, so the fail rules are + * only here to simplify syncing this file with scan.l. + * + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/interfaces/ecpg/preproc/pgc.l + * + *------------------------------------------------------------------------- + */ +#include "postgres_fe.h" + +#include +#include + +#include "common/string.h" + +#include "preproc_extern.h" +#include "preproc.h" + +#line 32 "pgc.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define yy_create_buffer base_yy_create_buffer +#define yy_delete_buffer base_yy_delete_buffer +#define yy_scan_buffer base_yy_scan_buffer +#define yy_scan_string base_yy_scan_string +#define yy_scan_bytes base_yy_scan_bytes +#define yy_init_buffer base_yy_init_buffer +#define yy_flush_buffer base_yy_flush_buffer +#define yy_load_buffer_state base_yy_load_buffer_state +#define yy_switch_to_buffer base_yy_switch_to_buffer +#define yypush_buffer_state base_yypush_buffer_state +#define yypop_buffer_state base_yypop_buffer_state +#define yyensure_buffer_stack base_yyensure_buffer_stack +#define yy_flex_debug base_yy_flex_debug +#define yyin base_yyin +#define yyleng base_yyleng +#define yylex base_yylex +#define yylineno base_yylineno +#define yyout base_yyout +#define yyrestart base_yyrestart +#define yytext base_yytext +#define yywrap base_yywrap +#define yyalloc base_yyalloc +#define yyrealloc base_yyrealloc +#define yyfree base_yyfree + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define base_yy_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer base_yy_create_buffer +#endif + +#ifdef yy_delete_buffer +#define base_yy_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer base_yy_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define base_yy_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer base_yy_scan_buffer +#endif + +#ifdef yy_scan_string +#define base_yy_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string base_yy_scan_string +#endif + +#ifdef yy_scan_bytes +#define base_yy_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes base_yy_scan_bytes +#endif + +#ifdef yy_init_buffer +#define base_yy_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer base_yy_init_buffer +#endif + +#ifdef yy_flush_buffer +#define base_yy_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer base_yy_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define base_yy_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state base_yy_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define base_yy_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer base_yy_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define base_yypush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state base_yypush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define base_yypop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state base_yypop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define base_yyensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack base_yyensure_buffer_stack +#endif + +#ifdef yylex +#define base_yylex_ALREADY_DEFINED +#else +#define yylex base_yylex +#endif + +#ifdef yyrestart +#define base_yyrestart_ALREADY_DEFINED +#else +#define yyrestart base_yyrestart +#endif + +#ifdef yylex_init +#define base_yylex_init_ALREADY_DEFINED +#else +#define yylex_init base_yylex_init +#endif + +#ifdef yylex_init_extra +#define base_yylex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra base_yylex_init_extra +#endif + +#ifdef yylex_destroy +#define base_yylex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy base_yylex_destroy +#endif + +#ifdef yyget_debug +#define base_yyget_debug_ALREADY_DEFINED +#else +#define yyget_debug base_yyget_debug +#endif + +#ifdef yyset_debug +#define base_yyset_debug_ALREADY_DEFINED +#else +#define yyset_debug base_yyset_debug +#endif + +#ifdef yyget_extra +#define base_yyget_extra_ALREADY_DEFINED +#else +#define yyget_extra base_yyget_extra +#endif + +#ifdef yyset_extra +#define base_yyset_extra_ALREADY_DEFINED +#else +#define yyset_extra base_yyset_extra +#endif + +#ifdef yyget_in +#define base_yyget_in_ALREADY_DEFINED +#else +#define yyget_in base_yyget_in +#endif + +#ifdef yyset_in +#define base_yyset_in_ALREADY_DEFINED +#else +#define yyset_in base_yyset_in +#endif + +#ifdef yyget_out +#define base_yyget_out_ALREADY_DEFINED +#else +#define yyget_out base_yyget_out +#endif + +#ifdef yyset_out +#define base_yyset_out_ALREADY_DEFINED +#else +#define yyset_out base_yyset_out +#endif + +#ifdef yyget_leng +#define base_yyget_leng_ALREADY_DEFINED +#else +#define yyget_leng base_yyget_leng +#endif + +#ifdef yyget_text +#define base_yyget_text_ALREADY_DEFINED +#else +#define yyget_text base_yyget_text +#endif + +#ifdef yyget_lineno +#define base_yyget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno base_yyget_lineno +#endif + +#ifdef yyset_lineno +#define base_yyset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno base_yyset_lineno +#endif + +#ifdef yywrap +#define base_yywrap_ALREADY_DEFINED +#else +#define yywrap base_yywrap +#endif + +#ifdef yyalloc +#define base_yyalloc_ALREADY_DEFINED +#else +#define yyalloc base_yyalloc +#endif + +#ifdef yyrealloc +#define base_yyrealloc_ALREADY_DEFINED +#else +#define yyrealloc base_yyrealloc +#endif + +#ifdef yyfree +#define base_yyfree_ALREADY_DEFINED +#else +#define yyfree base_yyfree +#endif + +#ifdef yytext +#define base_yytext_ALREADY_DEFINED +#else +#define yytext base_yytext +#endif + +#ifdef yyleng +#define base_yyleng_ALREADY_DEFINED +#else +#define yyleng base_yyleng +#endif + +#ifdef yyin +#define base_yyin_ALREADY_DEFINED +#else +#define yyin base_yyin +#endif + +#ifdef yyout +#define base_yyout_ALREADY_DEFINED +#else +#define yyout base_yyout +#endif + +#ifdef yy_flex_debug +#define base_yy_flex_debug_ALREADY_DEFINED +#else +#define yy_flex_debug base_yy_flex_debug +#endif + +#ifdef yylineno +#define base_yylineno_ALREADY_DEFINED +#else +#define yylineno base_yylineno +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern int yyleng; + +extern FILE *yyin, *yyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires + * access to the local variable yy_act. Since yyless() is a macro, it would break + * existing scanners that call yyless() from OUTSIDE yylex. + * One obvious solution it to make yy_act a global. I tried that, and saw + * a 5% performance hit in a non-yylineno scanner, because yy_act is + * normally declared as a register variable-- so it is not worth it. + */ + #define YY_LESS_LINENO(n) \ + do { \ + int yyl;\ + for ( yyl = n; yyl < yyleng; ++yyl )\ + if ( yytext[yyl] == '\n' )\ + --yylineno;\ + }while(0) + #define YY_LINENO_REWIND_TO(dst) \ + do {\ + const char *p;\ + for ( p = yy_cp-1; p >= (dst); --p)\ + if ( *p == '\n' )\ + --yylineno;\ + }while(0) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when yytext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int yyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = NULL; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void yyrestart ( FILE *input_file ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); +void yy_delete_buffer ( YY_BUFFER_STATE b ); +void yy_flush_buffer ( YY_BUFFER_STATE b ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state ( void ); + +static void yyensure_buffer_stack ( void ); +static void yy_load_buffer_state ( void ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); + +void *yyalloc ( yy_size_t ); +void *yyrealloc ( void *, yy_size_t ); +void yyfree ( void * ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define base_yywrap() (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +FILE *yyin = NULL, *yyout = NULL; + +typedef int yy_state_type; + +extern int yylineno; +int yylineno = 1; + +extern char *yytext; +#ifdef yytext_ptr +#undef yytext_ptr +#endif +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state ( void ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); +static int yy_get_next_buffer ( void ); +static void yynoreturn yy_fatal_error ( const char* msg ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; +#define YY_NUM_RULES 139 +#define YY_END_OF_BUFFER 140 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[566] = + { 0, + 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 19, 19, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 140, 138, 10, 17, 5, 5, + 6, 6, 42, 38, 44, 39, 44, 9, 23, 17, + 20, 19, 19, 19, 19, 24, 24, 17, 29, 23, + 33, 33, 35, 40, 129, 129, 127, 86, 86, 127, + 127, 108, 86, 86, 108, 43, 108, 68, 80, 108, + 12, 84, 85, 79, 82, 78, 83, 108, 81, 58, + + 58, 76, 77, 108, 91, 108, 74, 74, 89, 90, + 87, 108, 88, 66, 1, 1, 55, 36, 55, 53, + 54, 55, 14, 54, 54, 54, 54, 58, 54, 54, + 54, 54, 65, 65, 65, 65, 65, 65, 137, 137, + 137, 137, 133, 133, 132, 131, 130, 114, 114, 10, + 5, 7, 4, 3, 42, 41, 44, 9, 23, 21, + 19, 19, 19, 19, 18, 19, 19, 24, 26, 27, + 26, 26, 26, 22, 33, 32, 34, 0, 0, 128, + 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, + 0, 0, 105, 96, 0, 75, 103, 97, 101, 98, + + 102, 92, 107, 59, 2, 0, 104, 59, 58, 62, + 70, 94, 99, 93, 74, 74, 95, 1, 0, 55, + 52, 55, 0, 0, 30, 56, 31, 1, 46, 2, + 59, 58, 45, 47, 64, 49, 51, 48, 50, 65, + 8, 15, 13, 0, 11, 0, 136, 0, 0, 0, + 132, 130, 0, 0, 113, 3, 19, 19, 19, 19, + 27, 0, 0, 28, 34, 0, 0, 0, 0, 0, + 73, 73, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 106, 2, 0, 69, 60, 59, + 63, 61, 70, 74, 55, 55, 31, 1, 1, 2, + + 59, 58, 64, 0, 0, 0, 37, 16, 135, 134, + 19, 19, 18, 19, 19, 27, 0, 0, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 73, 73, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 74, 55, 0, 59, 64, 0, 0, 0, 64, 135, + 135, 134, 134, 19, 0, 0, 122, 0, 0, 0, + 0, 0, 0, 0, 73, 73, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 74, 55, 55, 0, 59, 64, 0, 0, 0, 0, + 0, 25, 122, 0, 124, 0, 118, 0, 0, 0, + + 0, 0, 0, 73, 73, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 112, 0, 74, 55, 0, + 0, 0, 0, 0, 0, 64, 64, 0, 0, 126, + 118, 120, 0, 0, 0, 0, 110, 0, 112, 0, + 67, 57, 0, 0, 0, 0, 0, 64, 0, 120, + 0, 0, 0, 71, 71, 110, 116, 67, 67, 74, + 74, 74, 74, 57, 64, 0, 0, 0, 0, 71, + 71, 71, 0, 71, 0, 116, 0, 0, 0, 74, + 74, 74, 74, 74, 74, 57, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 74, 74, + + 74, 74, 74, 74, 74, 121, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 74, 74, 74, 74, 74, + 74, 74, 74, 121, 0, 123, 0, 117, 0, 0, + 0, 0, 0, 0, 74, 74, 74, 74, 74, 74, + 0, 125, 117, 119, 72, 72, 0, 0, 111, 74, + 74, 74, 111, 119, 72, 72, 72, 72, 109, 0, + 109, 74, 115, 115, 0 + } ; + +static const YY_CHAR yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 2, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, + 21, 21, 21, 21, 21, 22, 22, 23, 24, 25, + 26, 27, 28, 28, 29, 30, 31, 32, 33, 34, + 35, 35, 36, 35, 35, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 35, 35, 47, 35, 35, + 48, 49, 50, 51, 52, 28, 29, 30, 31, 32, + + 33, 34, 35, 35, 53, 35, 35, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 54, 35, 35, 55, + 35, 35, 56, 57, 58, 28, 1, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59 + } ; + +static const YY_CHAR yy_meta[60] = + { 0, + 1, 2, 3, 3, 4, 5, 4, 6, 7, 4, + 8, 9, 9, 10, 7, 1, 11, 12, 13, 14, + 14, 14, 15, 16, 17, 18, 19, 4, 20, 20, + 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 12, 22, 9, + 4, 21, 21, 21, 21, 1, 4, 1, 21 + } ; + +static const flex_int16_t yy_base[631] = + { 0, + 0, 0, 2149, 2148, 0, 53, 2152, 2151, 0, 5, + 2145, 2144, 2140, 2138, 2137, 2133, 18, 27, 1, 34, + 7, 12, 0, 30, 2137, 2136, 2130, 2129, 110, 0, + 38, 168, 201, 0, 260, 0, 28, 60, 71, 171, + 319, 0, 378, 0, 2138, 2578, 0, 2578, 0, 0, + 29, 2123, 0, 2130, 2578, 2578, 10, 0, 0, 2124, + 2578, 86, 89, 175, 2117, 0, 0, 2122, 418, 2121, + 0, 0, 2119, 2120, 2578, 438, 2578, 2578, 2578, 147, + 22, 2578, 94, 186, 2099, 2578, 11, 412, 2097, 2110, + 2578, 2578, 2578, 168, 50, 2578, 82, 177, 433, 435, + + 456, 2578, 2578, 2094, 2091, 2089, 0, 39, 2578, 2578, + 2578, 2055, 2578, 2578, 447, 477, 2085, 2578, 486, 477, + 0, 0, 2578, 2578, 2093, 449, 2095, 486, 13, 158, + 2081, 2080, 0, 2094, 2093, 2092, 2092, 2090, 2076, 0, + 2578, 0, 2578, 514, 2578, 2578, 0, 2578, 521, 0, + 0, 88, 2578, 0, 0, 2578, 2578, 0, 0, 2578, + 524, 529, 2057, 545, 2578, 2056, 548, 0, 2578, 440, + 0, 0, 0, 2578, 0, 2578, 2064, 551, 555, 2578, + 449, 2036, 2035, 564, 410, 2578, 579, 496, 535, 2034, + 453, 2027, 2578, 2578, 496, 2578, 2578, 2578, 2578, 2578, + + 2578, 2051, 2578, 619, 0, 2061, 2578, 624, 629, 638, + 0, 2578, 2578, 2578, 0, 2030, 2578, 661, 508, 0, + 0, 664, 526, 538, 2578, 655, 2054, 717, 2578, 0, + 664, 678, 2578, 2578, 670, 0, 0, 0, 0, 0, + 2578, 2578, 2578, 637, 2578, 2036, 2578, 2053, 2013, 699, + 2578, 0, 704, 735, 2578, 0, 744, 747, 750, 754, + 500, 0, 0, 0, 1991, 676, 1945, 470, 1924, 746, + 2578, 0, 1916, 0, 691, 497, 1875, 1882, 531, 1848, + 1503, 1499, 1501, 1499, 2578, 0, 1527, 2578, 2578, 774, + 782, 788, 0, 1498, 806, 1513, 1518, 0, 859, 0, + + 806, 820, 687, 1498, 0, 833, 2578, 2578, 841, 856, + 844, 886, 889, 909, 892, 2578, 0, 0, 2578, 1490, + 1490, 677, 1489, 1489, 915, 911, 815, 868, 919, 1487, + 1487, 1477, 1479, 1480, 1480, 1471, 1473, 680, 1472, 1475, + 925, 967, 911, 916, 692, 937, 940, 948, 997, 943, + 2578, 959, 2578, 1000, 0, 0, 976, 1003, 1473, 1472, + 1472, 1006, 1462, 1009, 1489, 1016, 642, 1029, 1468, 1449, + 1437, 429, 1445, 1426, 1401, 626, 1402, 671, 1392, 1035, + 1352, 0, 700, 1031, 1039, 834, 1079, 1060, 1136, 1038, + 0, 2578, 1064, 1067, 2578, 1090, 1071, 1359, 1347, 1366, + + 746, 1365, 1097, 1190, 1194, 0, 1325, 1313, 1324, 0, + 1312, 1286, 1294, 1278, 1276, 1115, 1256, 1254, 1276, 1100, + 1105, 1243, 0, 0, 1265, 887, 1300, 0, 1197, 2578, + 1129, 1139, 1222, 1232, 0, 1230, 1157, 1219, 1203, 1186, + 1349, 1190, 1204, 1203, 745, 1375, 0, 1433, 0, 1212, + 1228, 775, 1169, 1225, 1231, 1215, 1234, 1482, 0, 1169, + 817, 828, 1148, 1220, 1536, 0, 920, 1153, 731, 1270, + 1276, 1282, 1125, 1285, 1123, 1293, 1119, 868, 1108, 1100, + 922, 1092, 734, 1077, 1074, 2578, 0, 1063, 1043, 769, + 1023, 1022, 1011, 1003, 991, 991, 989, 845, 957, 922, + + 932, 920, 916, 887, 875, 1303, 1318, 867, 865, 846, + 751, 941, 993, 840, 842, 810, 1321, 1330, 796, 795, + 764, 943, 735, 1326, 1333, 2578, 1336, 1341, 707, 625, + 622, 627, 980, 620, 509, 1359, 1362, 460, 411, 1365, + 1368, 2578, 1371, 1374, 1384, 1387, 163, 149, 1394, 1397, + 1421, 72, 1429, 1436, 1451, 1454, 1459, 1462, 1465, 49, + 1468, 1471, 1474, 1485, 2578, 1595, 1617, 1639, 1661, 1683, + 1705, 1727, 1749, 1771, 1793, 1815, 1837, 1859, 1881, 1903, + 1925, 1947, 1969, 1991, 2012, 2034, 1092, 2055, 2076, 2093, + 2111, 2125, 2132, 2148, 2169, 2191, 2213, 2230, 2250, 2268, + + 2287, 1095, 1237, 1242, 2304, 2322, 2341, 1256, 2358, 2379, + 2398, 2412, 2433, 1296, 1327, 1335, 557, 2454, 1429, 1476, + 2475, 2492, 1477, 1478, 2513, 2535, 1479, 2556, 1480, 1481 + } ; + +static const flex_int16_t yy_def[631] = + { 0, + 566, 566, 567, 567, 568, 568, 569, 569, 570, 570, + 571, 571, 572, 572, 572, 572, 573, 573, 574, 574, + 572, 572, 575, 575, 569, 569, 572, 572, 565, 29, + 576, 576, 565, 33, 565, 35, 577, 577, 578, 578, + 565, 41, 565, 43, 565, 565, 579, 565, 580, 580, + 565, 565, 581, 565, 565, 565, 565, 582, 583, 565, + 565, 565, 565, 565, 565, 584, 584, 565, 585, 583, + 586, 586, 587, 565, 565, 588, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 589, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + + 565, 565, 565, 565, 565, 565, 590, 590, 565, 565, + 565, 565, 565, 565, 565, 565, 591, 565, 589, 592, + 591, 591, 565, 565, 591, 565, 591, 565, 593, 591, + 591, 591, 594, 594, 594, 594, 594, 594, 595, 596, + 565, 597, 565, 565, 565, 565, 598, 565, 599, 579, + 580, 565, 565, 600, 581, 565, 565, 582, 583, 565, + 565, 565, 565, 565, 565, 565, 601, 584, 565, 565, + 602, 603, 604, 565, 586, 565, 605, 565, 588, 565, + 565, 565, 565, 565, 589, 565, 565, 187, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + + 565, 565, 565, 565, 606, 607, 565, 565, 565, 565, + 608, 565, 565, 565, 590, 590, 565, 565, 589, 591, + 591, 187, 187, 565, 565, 565, 609, 610, 565, 611, + 565, 565, 565, 565, 612, 591, 591, 591, 591, 594, + 565, 565, 565, 565, 565, 595, 565, 596, 597, 565, + 565, 598, 565, 599, 565, 600, 613, 601, 601, 601, + 565, 614, 615, 616, 605, 565, 565, 565, 565, 187, + 565, 270, 270, 187, 270, 187, 187, 187, 270, 565, + 565, 565, 565, 565, 565, 606, 607, 565, 565, 565, + 565, 565, 608, 590, 270, 295, 609, 610, 610, 611, + + 565, 565, 612, 565, 617, 618, 565, 565, 565, 565, + 613, 613, 613, 613, 601, 565, 619, 620, 565, 565, + 565, 565, 565, 565, 565, 621, 270, 270, 270, 187, + 187, 187, 187, 270, 270, 565, 565, 565, 565, 565, + 590, 621, 565, 565, 622, 618, 618, 618, 618, 565, + 565, 565, 565, 613, 623, 624, 565, 565, 565, 565, + 565, 565, 565, 621, 625, 621, 270, 621, 187, 187, + 187, 187, 270, 270, 565, 565, 565, 565, 565, 565, + 590, 342, 295, 565, 565, 622, 626, 618, 565, 618, + 627, 565, 565, 565, 565, 565, 565, 565, 565, 625, + + 565, 270, 621, 621, 621, 187, 187, 187, 187, 270, + 270, 565, 565, 565, 565, 565, 565, 590, 295, 565, + 565, 626, 422, 422, 422, 422, 628, 629, 565, 565, + 565, 565, 565, 187, 270, 565, 565, 565, 565, 565, + 590, 565, 565, 422, 422, 422, 422, 628, 630, 565, + 565, 565, 565, 187, 565, 565, 565, 565, 458, 590, + 590, 590, 590, 565, 565, 624, 565, 565, 565, 270, + 565, 270, 270, 565, 565, 565, 565, 565, 565, 590, + 590, 590, 590, 590, 590, 565, 465, 565, 565, 565, + 565, 565, 270, 565, 565, 565, 565, 590, 590, 590, + + 590, 590, 590, 590, 590, 565, 565, 565, 565, 565, + 270, 565, 565, 565, 565, 590, 590, 590, 590, 590, + 590, 590, 590, 565, 565, 565, 565, 565, 565, 270, + 565, 565, 565, 565, 590, 590, 590, 590, 590, 590, + 565, 565, 565, 565, 270, 565, 565, 565, 565, 590, + 590, 590, 565, 565, 270, 565, 270, 565, 565, 565, + 565, 590, 565, 565, 0, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565 + } ; + +static const flex_int16_t yy_nxt[2638] = + { 0, + 565, 565, 72, 67, 50, 56, 50, 73, 50, 50, + 56, 68, 565, 51, 50, 157, 50, 48, 52, 62, + 63, 64, 48, 565, 50, 50, 50, 50, 62, 63, + 64, 565, 72, 140, 65, 233, 67, 73, 234, 78, + 79, 78, 152, 65, 68, 80, 188, 153, 57, 69, + 50, 141, 142, 57, 141, 70, 50, 50, 157, 50, + 70, 50, 50, 189, 198, 140, 51, 50, 183, 50, + 81, 52, 144, 144, 144, 199, 183, 50, 50, 50, + 50, 563, 69, 141, 142, 216, 141, 161, 162, 162, + 164, 164, 164, 216, 145, 184, 184, 184, 200, 165, + + 185, 152, 163, 50, 562, 166, 153, 201, 202, 50, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, + 75, 76, 76, 76, 76, 75, 75, 75, 76, 78, + 79, 78, 144, 144, 144, 80, 164, 164, 164, 181, + 560, 195, 182, 236, 237, 165, 196, 184, 184, 184, + 203, 166, 185, 197, 145, 559, 204, 204, 204, 182, + + 81, 82, 83, 84, 83, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 101, 102, 103, 104, 105, 106, 82, 107, + 107, 107, 107, 108, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 109, 82, + 110, 82, 107, 107, 107, 107, 111, 112, 113, 107, + 114, 115, 116, 115, 117, 118, 119, 120, 121, 122, + 123, 124, 124, 121, 121, 124, 125, 126, 127, 128, + 128, 128, 129, 124, 130, 131, 132, 122, 133, 134, + 133, 133, 135, 133, 133, 133, 133, 133, 136, 133, + + 133, 133, 133, 133, 133, 137, 138, 124, 114, 124, + 121, 133, 133, 137, 138, 114, 122, 114, 133, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, + 147, 147, 147, 147, 146, 146, 146, 147, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + + 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 148, 148, 148, 148, 149, + 149, 149, 149, 148, 148, 148, 149, 170, 170, 178, + 178, 178, 552, 190, 181, 188, 205, 191, 218, 218, + 218, 206, 208, 219, 209, 209, 209, 192, 207, 261, + 261, 180, 189, 171, 191, 192, 229, 210, 204, 204, + 204, 172, 173, 208, 409, 209, 209, 209, 218, 218, + 218, 211, 409, 219, 225, 266, 268, 267, 210, 211, + 222, 283, 222, 551, 222, 222, 226, 226, 226, 222, + + 222, 323, 222, 231, 222, 232, 232, 232, 324, 195, + 222, 222, 222, 222, 196, 250, 250, 250, 210, 316, + 316, 223, 253, 253, 253, 161, 162, 162, 330, 276, + 164, 164, 164, 277, 278, 331, 222, 251, 224, 165, + 163, 550, 222, 223, 255, 166, 164, 164, 164, 259, + 162, 162, 178, 178, 178, 165, 178, 178, 178, 276, + 224, 166, 334, 277, 260, 184, 184, 184, 279, 335, + 185, 279, 280, 281, 180, 280, 345, 345, 180, 270, + 270, 271, 272, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 273, 270, 270, + + 270, 270, 270, 270, 270, 270, 270, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 270, 275, 270, 270, + 270, 274, 274, 274, 270, 270, 270, 270, 204, 204, + 204, 289, 307, 290, 290, 290, 208, 308, 209, 209, + 209, 210, 291, 549, 291, 367, 210, 292, 292, 292, + 402, 210, 218, 218, 218, 547, 546, 219, 295, 545, + 295, 413, 295, 295, 226, 226, 226, 295, 295, 413, + 295, 289, 296, 301, 301, 301, 304, 305, 295, 295, + 295, 295, 327, 328, 329, 231, 210, 302, 302, 302, + + 250, 250, 250, 304, 305, 253, 253, 253, 304, 305, + 210, 320, 359, 383, 295, 377, 415, 306, 419, 321, + 295, 299, 251, 299, 415, 299, 299, 255, 320, 359, + 299, 299, 377, 299, 306, 299, 253, 253, 253, 306, + 544, 299, 299, 299, 299, 312, 164, 164, 259, 162, + 162, 259, 162, 162, 313, 259, 162, 162, 255, 401, + 314, 425, 491, 260, 270, 502, 260, 299, 540, 492, + 315, 446, 503, 299, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 290, 290, 290, 538, 530, 270, 270, + + 270, 292, 292, 292, 508, 530, 210, 292, 292, 292, + 295, 467, 295, 468, 295, 295, 327, 328, 329, 295, + 295, 508, 295, 343, 296, 344, 344, 344, 537, 536, + 295, 295, 295, 295, 346, 346, 346, 231, 210, 209, + 209, 209, 350, 350, 350, 312, 164, 164, 535, 348, + 304, 305, 210, 481, 313, 482, 295, 352, 352, 352, + 314, 483, 295, 299, 351, 299, 484, 299, 299, 327, + 328, 329, 299, 299, 534, 299, 533, 299, 529, 353, + 516, 306, 349, 299, 299, 299, 299, 312, 164, 164, + 312, 164, 164, 259, 162, 162, 313, 516, 528, 313, + + 527, 469, 314, 445, 446, 314, 496, 523, 315, 299, + 312, 164, 164, 365, 366, 299, 362, 362, 362, 313, + 327, 328, 329, 522, 367, 354, 380, 380, 380, 273, + 384, 384, 384, 343, 447, 385, 385, 385, 346, 346, + 346, 346, 346, 346, 350, 350, 350, 521, 210, 346, + 346, 346, 520, 348, 518, 488, 348, 499, 363, 368, + 352, 352, 352, 489, 387, 500, 351, 519, 381, 365, + 366, 382, 488, 382, 499, 382, 382, 393, 393, 393, + 383, 382, 353, 382, 519, 296, 349, 531, 539, 349, + 517, 382, 382, 382, 382, 531, 539, 349, 346, 346, + + 346, 312, 164, 164, 394, 394, 394, 362, 362, 362, + 313, 365, 366, 388, 389, 368, 354, 382, 365, 366, + 515, 514, 367, 382, 513, 548, 395, 273, 532, 367, + 403, 404, 405, 548, 273, 512, 380, 380, 380, 346, + 346, 346, 367, 511, 390, 532, 349, 273, 420, 363, + 421, 421, 421, 510, 348, 509, 343, 368, 290, 290, + 290, 346, 346, 346, 368, 393, 393, 393, 394, 394, + 394, 210, 431, 431, 431, 507, 387, 368, 417, 422, + 423, 346, 346, 422, 422, 422, 389, 349, 422, 422, + 395, 429, 429, 429, 422, 425, 506, 177, 403, 404, + + 405, 422, 422, 422, 422, 505, 422, 504, 262, 349, + 367, 177, 177, 430, 262, 273, 439, 439, 439, 442, + 442, 442, 420, 501, 443, 443, 443, 422, 426, 422, + 431, 431, 431, 498, 422, 422, 422, 346, 346, 346, + 450, 450, 450, 347, 347, 368, 497, 347, 347, 347, + 347, 495, 348, 347, 347, 347, 347, 347, 456, 456, + 456, 494, 347, 493, 427, 427, 427, 427, 427, 427, + 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, + 427, 427, 427, 347, 490, 349, 485, 427, 427, 427, + 427, 403, 404, 405, 427, 403, 404, 405, 429, 429, + + 429, 480, 469, 367, 439, 439, 439, 367, 273, 464, + 464, 464, 273, 450, 450, 450, 456, 456, 456, 425, + 430, 420, 458, 451, 451, 451, 470, 471, 472, 451, + 451, 451, 474, 474, 474, 476, 476, 476, 368, 486, + 486, 486, 368, 422, 423, 346, 346, 422, 422, 422, + 263, 457, 422, 422, 452, 264, 263, 453, 422, 444, + 452, 264, 455, 453, 454, 422, 422, 422, 422, 293, + 422, 470, 471, 472, 453, 293, 473, 474, 474, 474, + 453, 425, 475, 470, 471, 472, 474, 474, 474, 342, + 441, 422, 426, 422, 476, 476, 476, 440, 422, 422, + + 422, 346, 346, 346, 524, 524, 524, 438, 347, 317, + 437, 347, 347, 347, 347, 317, 388, 389, 347, 525, + 525, 525, 524, 524, 524, 436, 347, 524, 524, 524, + 435, 525, 525, 525, 525, 525, 525, 541, 541, 541, + 318, 526, 543, 543, 543, 410, 318, 390, 319, 349, + 459, 459, 459, 526, 319, 434, 526, 406, 406, 542, + 541, 541, 541, 543, 543, 543, 553, 553, 553, 541, + 541, 541, 543, 543, 543, 554, 554, 554, 326, 401, + 460, 461, 542, 433, 462, 555, 556, 557, 558, 558, + 558, 542, 432, 418, 463, 553, 553, 553, 561, 561, + + 561, 462, 463, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 554, 554, 554, 416, 465, 465, 465, 465, + 553, 553, 553, 465, 346, 346, 346, 554, 554, 554, + 414, 347, 355, 412, 347, 347, 347, 347, 355, 388, + 389, 347, 555, 556, 557, 558, 558, 558, 411, 347, + 555, 556, 557, 558, 558, 558, 561, 561, 561, 561, + 561, 561, 564, 564, 564, 564, 564, 564, 410, 408, + 390, 407, 349, 459, 459, 459, 564, 564, 564, 356, + 391, 392, 428, 449, 466, 356, 391, 392, 428, 449, + + 466, 406, 401, 399, 398, 397, 396, 379, 378, 376, + 375, 374, 373, 477, 452, 372, 371, 478, 370, 369, + 361, 360, 358, 357, 305, 225, 342, 479, 341, 288, + 340, 339, 338, 337, 478, 479, 422, 423, 346, 346, + 422, 422, 422, 487, 424, 422, 422, 424, 424, 424, + 424, 422, 445, 446, 424, 487, 487, 487, 422, 422, + 422, 422, 424, 422, 487, 487, 487, 487, 487, 487, + 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, + 487, 487, 487, 447, 422, 426, 422, 487, 487, 487, + 487, 422, 422, 422, 487, 46, 46, 46, 46, 46, + + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, + + 55, 55, 55, 55, 55, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 71, 71, 71, 71, 71, 71, 71, + + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 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, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 150, 150, 150, 150, 150, 150, 150, 336, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 333, 151, 151, 332, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 155, 155, 155, 155, 326, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 158, 158, 158, + 158, 158, 158, 158, 325, 158, 158, 158, 158, 158, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, + 159, 159, 159, 159, 159, 159, 322, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 168, 168, 168, 168, 168, 168, 168, 176, 168, + + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 175, 175, 175, 175, 175, 310, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 179, 179, 309, 247, + 179, 225, 294, 288, 285, 284, 282, 269, 179, 268, + 179, 176, 257, 167, 179, 179, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 215, 247, + + 245, 244, 243, 242, 241, 239, 215, 238, 230, 228, + 221, 217, 215, 215, 220, 214, 213, 220, 212, 194, + 220, 220, 193, 220, 186, 156, 176, 220, 220, 220, + 227, 174, 160, 167, 160, 156, 154, 565, 227, 60, + 60, 74, 74, 60, 227, 227, 235, 60, 60, 235, + 60, 235, 235, 240, 48, 48, 54, 54, 48, 48, + 565, 240, 565, 565, 565, 565, 565, 240, 240, 246, + 246, 246, 246, 565, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 565, 246, 565, 246, 246, + 246, 248, 248, 248, 248, 565, 248, 248, 248, 248, + + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 565, 249, 249, 249, 252, 565, 565, 565, 565, + 565, 565, 565, 252, 565, 565, 565, 565, 565, 252, + 252, 254, 254, 565, 565, 254, 565, 565, 565, 565, + 565, 565, 565, 254, 565, 254, 565, 565, 565, 254, + 254, 256, 565, 565, 256, 565, 565, 256, 256, 565, + 256, 565, 565, 565, 256, 256, 256, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + + 258, 258, 258, 258, 258, 258, 258, 258, 258, 265, + 565, 565, 565, 565, 565, 565, 565, 265, 565, 565, + 565, 565, 565, 265, 265, 286, 565, 565, 286, 565, + 565, 286, 286, 565, 286, 565, 565, 565, 286, 286, + 286, 287, 287, 287, 287, 287, 287, 287, 287, 287, + 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, + 287, 287, 287, 297, 565, 565, 565, 565, 565, 565, + 565, 297, 565, 565, 565, 565, 565, 297, 297, 298, + 298, 565, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 300, 565, 565, 300, 565, 565, 300, 300, 565, + 300, 565, 565, 565, 300, 300, 300, 303, 565, 565, + 565, 565, 303, 303, 565, 303, 565, 565, 565, 565, + 565, 303, 303, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 347, 347, 565, 565, 347, + 347, 565, 347, 347, 347, 347, 347, 347, 565, 565, + 565, 565, 347, 347, 347, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 386, 565, 565, + + 565, 565, 386, 386, 565, 386, 565, 565, 565, 565, + 565, 386, 386, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 565, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 424, 424, 424, 424, 424, + 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, + 424, 424, 424, 424, 424, 424, 424, 448, 448, 565, + 565, 448, 448, 565, 448, 448, 448, 448, 448, 448, + 565, 565, 565, 565, 448, 448, 448, 45, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565 + } ; + +static const flex_int16_t yy_chk[2638] = + { 0, + 0, 0, 23, 19, 5, 9, 5, 23, 5, 5, + 10, 19, 0, 5, 5, 57, 5, 21, 5, 17, + 17, 17, 22, 0, 5, 5, 5, 5, 18, 18, + 18, 0, 24, 37, 17, 129, 20, 24, 129, 31, + 31, 31, 51, 18, 20, 31, 87, 51, 9, 19, + 5, 37, 37, 10, 37, 21, 5, 6, 57, 6, + 22, 6, 6, 87, 95, 38, 6, 6, 81, 6, + 31, 6, 39, 39, 39, 95, 81, 6, 6, 6, + 6, 560, 20, 38, 38, 108, 38, 62, 62, 62, + 63, 63, 63, 108, 39, 83, 83, 83, 97, 63, + + 83, 152, 62, 6, 552, 63, 152, 97, 97, 6, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 32, + 32, 32, 40, 40, 40, 32, 64, 64, 64, 80, + 548, 94, 80, 130, 130, 64, 94, 84, 84, 84, + 98, 64, 84, 94, 40, 547, 98, 98, 98, 80, + + 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 69, 69, 76, + 76, 76, 539, 88, 88, 185, 99, 88, 115, 115, + 115, 99, 100, 115, 100, 100, 100, 88, 99, 170, + 170, 76, 185, 69, 88, 88, 126, 100, 126, 126, + 126, 69, 69, 101, 372, 101, 101, 101, 116, 116, + 116, 100, 372, 116, 120, 181, 191, 181, 101, 100, + 119, 191, 119, 538, 119, 119, 120, 120, 120, 119, + + 119, 268, 119, 128, 119, 128, 128, 128, 268, 195, + 119, 119, 119, 119, 195, 144, 144, 144, 128, 261, + 261, 119, 149, 149, 149, 161, 161, 161, 276, 188, + 162, 162, 162, 188, 188, 276, 119, 144, 119, 162, + 161, 535, 119, 219, 149, 162, 164, 164, 164, 167, + 167, 167, 178, 178, 178, 164, 179, 179, 179, 223, + 219, 164, 279, 223, 167, 184, 184, 184, 189, 279, + 184, 224, 189, 189, 178, 224, 617, 617, 179, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 204, 204, + 204, 208, 244, 208, 208, 208, 209, 244, 209, 209, + 209, 204, 210, 534, 210, 367, 208, 210, 210, 210, + 367, 209, 218, 218, 218, 532, 531, 218, 222, 530, + 222, 376, 222, 222, 226, 226, 226, 222, 222, 376, + 222, 231, 222, 231, 231, 231, 235, 235, 222, 222, + 222, 222, 275, 275, 275, 232, 231, 232, 232, 232, + + 250, 250, 250, 303, 303, 253, 253, 253, 345, 345, + 232, 266, 322, 383, 222, 338, 378, 235, 383, 266, + 222, 228, 250, 228, 378, 228, 228, 253, 266, 322, + 228, 228, 338, 228, 303, 228, 254, 254, 254, 345, + 529, 228, 228, 228, 228, 257, 257, 257, 258, 258, + 258, 259, 259, 259, 257, 260, 260, 260, 254, 401, + 257, 445, 469, 258, 401, 483, 259, 228, 523, 469, + 260, 445, 483, 228, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 290, 290, 290, 521, 511, 270, 270, + + 270, 291, 291, 291, 490, 511, 290, 292, 292, 292, + 295, 452, 295, 452, 295, 295, 327, 327, 327, 295, + 295, 490, 295, 301, 295, 301, 301, 301, 520, 519, + 295, 295, 295, 295, 306, 306, 306, 302, 301, 302, + 302, 302, 309, 309, 309, 311, 311, 311, 516, 306, + 386, 386, 302, 461, 311, 461, 295, 310, 310, 310, + 311, 462, 295, 299, 309, 299, 462, 299, 299, 328, + 328, 328, 299, 299, 515, 299, 514, 299, 510, 310, + 498, 386, 306, 299, 299, 299, 299, 312, 312, 312, + 313, 313, 313, 315, 315, 315, 312, 498, 509, 313, + + 508, 478, 312, 426, 426, 313, 478, 505, 315, 299, + 314, 314, 314, 326, 326, 299, 325, 325, 325, 314, + 329, 329, 329, 504, 326, 314, 341, 341, 341, 326, + 343, 343, 343, 344, 426, 344, 344, 344, 346, 346, + 346, 347, 347, 347, 350, 350, 350, 503, 344, 348, + 348, 348, 502, 346, 500, 467, 347, 481, 325, 326, + 352, 352, 352, 467, 348, 481, 350, 501, 341, 342, + 342, 342, 467, 342, 481, 342, 342, 357, 357, 357, + 342, 342, 352, 342, 501, 342, 346, 512, 522, 347, + 499, 342, 342, 342, 342, 512, 522, 348, 349, 349, + + 349, 354, 354, 354, 358, 358, 358, 362, 362, 362, + 354, 364, 364, 349, 349, 342, 354, 342, 366, 366, + 497, 496, 364, 342, 495, 533, 358, 364, 513, 366, + 368, 368, 368, 533, 366, 494, 380, 380, 380, 390, + 390, 390, 368, 493, 349, 513, 349, 368, 384, 362, + 384, 384, 384, 492, 390, 491, 385, 364, 385, 385, + 385, 388, 388, 388, 366, 393, 393, 393, 394, 394, + 394, 385, 397, 397, 397, 489, 388, 368, 380, 387, + 387, 387, 387, 387, 387, 387, 388, 390, 387, 387, + 394, 396, 396, 396, 387, 387, 488, 587, 403, 403, + + 403, 387, 387, 387, 387, 485, 387, 484, 602, 388, + 403, 587, 587, 396, 602, 403, 416, 416, 416, 420, + 420, 420, 421, 482, 421, 421, 421, 387, 387, 387, + 431, 431, 431, 480, 387, 387, 387, 389, 389, 389, + 432, 432, 432, 389, 389, 403, 479, 389, 389, 389, + 389, 477, 389, 389, 389, 389, 389, 389, 437, 437, + 437, 475, 389, 473, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 468, 389, 463, 389, 389, 389, + 389, 404, 404, 404, 389, 405, 405, 405, 429, 429, + + 429, 460, 453, 404, 439, 439, 439, 405, 404, 442, + 442, 442, 405, 450, 450, 450, 456, 456, 456, 444, + 429, 443, 440, 433, 433, 433, 454, 454, 454, 451, + 451, 451, 455, 455, 455, 457, 457, 457, 404, 464, + 464, 464, 405, 422, 422, 422, 422, 422, 422, 422, + 603, 438, 422, 422, 433, 604, 603, 433, 422, 422, + 451, 604, 436, 451, 434, 422, 422, 422, 422, 608, + 422, 470, 470, 470, 433, 608, 454, 471, 471, 471, + 451, 425, 455, 472, 472, 472, 474, 474, 474, 419, + 418, 422, 422, 422, 476, 476, 476, 417, 422, 422, + + 422, 427, 427, 427, 506, 506, 506, 415, 427, 614, + 414, 427, 427, 427, 427, 614, 427, 427, 427, 507, + 507, 507, 517, 517, 517, 413, 427, 524, 524, 524, + 412, 518, 518, 518, 525, 525, 525, 527, 527, 527, + 615, 507, 528, 528, 528, 411, 615, 427, 616, 427, + 441, 441, 441, 518, 616, 409, 525, 408, 407, 527, + 536, 536, 536, 537, 537, 537, 540, 540, 540, 541, + 541, 541, 543, 543, 543, 544, 544, 544, 402, 400, + 441, 441, 536, 399, 441, 545, 545, 545, 546, 546, + 546, 541, 398, 381, 441, 549, 549, 549, 550, 550, + + 550, 441, 441, 446, 446, 446, 446, 446, 446, 446, + 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, + 446, 446, 551, 551, 551, 379, 446, 446, 446, 446, + 553, 553, 553, 446, 448, 448, 448, 554, 554, 554, + 377, 448, 619, 375, 448, 448, 448, 448, 619, 448, + 448, 448, 555, 555, 555, 556, 556, 556, 374, 448, + 557, 557, 557, 558, 558, 558, 559, 559, 559, 561, + 561, 561, 562, 562, 562, 563, 563, 563, 373, 371, + 448, 370, 448, 458, 458, 458, 564, 564, 564, 620, + 623, 624, 627, 629, 630, 620, 623, 624, 627, 629, + + 630, 369, 365, 363, 361, 360, 359, 340, 339, 337, + 336, 335, 334, 458, 458, 333, 332, 458, 331, 330, + 324, 323, 321, 320, 304, 297, 296, 458, 294, 287, + 284, 283, 282, 281, 458, 458, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 566, 566, 566, 566, 566, + + 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, + 566, 566, 566, 566, 566, 566, 566, 567, 567, 567, + 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, + 567, 567, 567, 567, 567, 567, 567, 567, 567, 568, + 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, + 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, + 568, 569, 569, 569, 569, 569, 569, 569, 569, 569, + 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, + 569, 569, 569, 570, 570, 570, 570, 570, 570, 570, + 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, + + 570, 570, 570, 570, 570, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, 572, 573, + 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, + 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, + 573, 574, 574, 574, 574, 574, 574, 574, 574, 574, + 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, + 574, 574, 574, 575, 575, 575, 575, 575, 575, 575, + + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 577, 577, 577, + 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, + 577, 577, 577, 577, 577, 577, 577, 577, 577, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 579, 579, 579, 579, 579, 579, 579, 280, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + + 579, 579, 579, 580, 580, 580, 580, 580, 580, 580, + 580, 580, 278, 580, 580, 277, 580, 580, 580, 580, + 580, 580, 580, 580, 580, 581, 581, 581, 581, 273, + 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, + 581, 581, 581, 581, 581, 581, 581, 582, 582, 582, + 582, 582, 582, 582, 269, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 583, + 583, 583, 583, 583, 583, 583, 267, 583, 583, 583, + 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, + 583, 584, 584, 584, 584, 584, 584, 584, 265, 584, + + 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, + 584, 584, 585, 585, 585, 585, 585, 585, 585, 585, + 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, + 585, 585, 585, 585, 586, 586, 586, 586, 586, 249, + 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, + 586, 586, 586, 586, 586, 586, 588, 588, 248, 246, + 588, 227, 216, 206, 202, 192, 190, 183, 588, 182, + 588, 177, 166, 163, 588, 588, 589, 589, 589, 589, + 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, + 589, 589, 589, 589, 589, 589, 589, 589, 590, 139, + + 138, 137, 136, 135, 134, 132, 590, 131, 127, 125, + 117, 112, 590, 590, 591, 106, 105, 591, 104, 90, + 591, 591, 89, 591, 85, 74, 73, 591, 591, 591, + 592, 70, 68, 65, 60, 54, 52, 45, 592, 28, + 27, 26, 25, 16, 592, 592, 593, 15, 14, 593, + 13, 593, 593, 594, 12, 11, 8, 7, 4, 3, + 0, 594, 0, 0, 0, 0, 0, 594, 594, 595, + 595, 595, 595, 0, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 0, 595, 0, 595, 595, + 595, 596, 596, 596, 596, 0, 596, 596, 596, 596, + + 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, + 596, 596, 596, 597, 597, 597, 597, 597, 597, 597, + 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, + 597, 0, 597, 597, 597, 598, 0, 0, 0, 0, + 0, 0, 0, 598, 0, 0, 0, 0, 0, 598, + 598, 599, 599, 0, 0, 599, 0, 0, 0, 0, + 0, 0, 0, 599, 0, 599, 0, 0, 0, 599, + 599, 600, 0, 0, 600, 0, 0, 600, 600, 0, + 600, 0, 0, 0, 600, 600, 600, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + + 601, 601, 601, 601, 601, 601, 601, 601, 601, 605, + 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, + 0, 0, 0, 605, 605, 606, 0, 0, 606, 0, + 0, 606, 606, 0, 606, 0, 0, 0, 606, 606, + 606, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 609, 0, 0, 0, 0, 0, 0, + 0, 609, 0, 0, 0, 0, 0, 609, 609, 610, + 610, 0, 610, 610, 610, 610, 610, 610, 610, 610, + 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, + + 610, 611, 0, 0, 611, 0, 0, 611, 611, 0, + 611, 0, 0, 0, 611, 611, 611, 612, 0, 0, + 0, 0, 612, 612, 0, 612, 0, 0, 0, 0, + 0, 612, 612, 613, 613, 613, 613, 613, 613, 613, + 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, + 613, 613, 613, 613, 613, 618, 618, 0, 0, 618, + 618, 0, 618, 618, 618, 618, 618, 618, 0, 0, + 0, 0, 618, 618, 618, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 622, 0, 0, + + 0, 0, 622, 622, 0, 622, 0, 0, 0, 0, + 0, 622, 622, 625, 625, 625, 625, 625, 625, 625, + 625, 625, 625, 625, 625, 0, 625, 625, 625, 625, + 625, 625, 625, 625, 625, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 628, 628, 0, + 0, 628, 628, 0, 628, 628, 628, 628, 628, 628, + 0, 0, 0, 0, 628, 628, 628, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 565, 565 + } ; + +/* Table of booleans, true if rule could match eol. */ +static const flex_int32_t yy_rule_can_match_eol[140] = + { 0, +1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + }; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *yytext; +#line 1 "pgc.l" + +#line 33 "pgc.l" + +/* LCOV_EXCL_START */ + +extern YYSTYPE base_yylval; + +static int xcdepth = 0; /* depth of nesting in slash-star comments */ +static char *dolqstart = NULL; /* current $foo$ quote start string */ + +/* + * literalbuf is used to accumulate literal values when multiple rules + * are needed to parse a single literal. Call startlit to reset buffer + * to empty, addlit to add text. Note that the buffer is permanently + * malloc'd to the largest size needed so far in the current run. + */ +static char *literalbuf = NULL; /* expandable buffer */ +static int literallen; /* actual current length */ +static int literalalloc; /* current allocated buffer size */ + +/* Used for detecting global state together with braces_open */ +static int parenths_open; + +/* Used to tell parse_include() whether the command was #include or #include_next */ +static bool include_next; + +#define startlit() (literalbuf[0] = '\0', literallen = 0) +static void addlit(char *ytext, int yleng); +static void addlitchar(unsigned char); +static int process_integer_literal(const char *token, YYSTYPE *lval); +static void parse_include(void); +static bool ecpg_isspace(char ch); +static bool isdefine(void); +static bool isinformixdefine(void); + +char *token_start; + +/* vars to keep track of start conditions when scanning literals */ +static int state_before_str_start; +static int state_before_str_stop; + +struct _yy_buffer +{ + YY_BUFFER_STATE buffer; + long lineno; + char *filename; + struct _yy_buffer *next; +} *yy_buffer = NULL; + +static char *old; + +/* + * Vars for handling ifdef/elif/endif constructs. preproc_tos is the current + * nesting depth of such constructs, and stacked_if_value[preproc_tos] is the + * state for the innermost level. (For convenience, stacked_if_value[0] is + * initialized as though we are in the active branch of some outermost IF.) + * The active field is true if the current branch is active (being expanded). + * The saw_active field is true if we have found any successful branch, + * so that all subsequent branches of this level should be skipped. + * The else_branch field is true if we've found an 'else' (so that another + * 'else' or 'elif' at this level is an error.) + * For IFs nested within an inactive branch, all branches always have active + * set to false, but saw_active and else_branch are maintained normally. + * ifcond is valid only while evaluating an if-condition; it's true if we + * are doing ifdef, false if ifndef. + */ +#define MAX_NESTED_IF 128 +static short preproc_tos; +static bool ifcond; +static struct _if_value +{ + bool active; + bool saw_active; + bool else_branch; +} stacked_if_value[MAX_NESTED_IF]; + +#line 1619 "pgc.c" +#define YY_NO_INPUT 1 +/* + * OK, here is a short description of lex/flex rules behavior. + * The longest pattern which matches an input string is always chosen. + * For equal-length patterns, the first occurring in the rules list is chosen. + * INITIAL is the starting state, to which all non-conditional rules apply. + * Exclusive states change parsing rules while the state is active. When in + * an exclusive state, only those rules defined for that state apply. + * + * We use exclusive states for quoted strings, extended comments, + * and to eliminate parsing troubles for numeric strings. + * Exclusive states: + * bit string literal + * extended C-style comments + * delimited identifiers (double-quoted identifiers) + * double-quoted strings in C + * hexadecimal numeric string + * national character quoted strings + * standard quoted strings + * quote stop (detect continued strings) + * extended quoted strings (support backslash escape sequences) + * single-quoted strings in C + * $foo$ quoted strings + * quoted identifier with Unicode escapes + * quoted string with Unicode escapes + * condition of an EXEC SQL IFDEF construct + * skipping the inactive part of an EXEC SQL IFDEF construct + * + * Note: we intentionally don't mimic the backend's state; we have + * no need to distinguish it from state. + * + * Remember to add an <> case whenever you add a new exclusive state! + * The default one is probably not the right thing. + */ + +/* Additional exclusive states that are specific to ECPG */ + +/* + * In order to make the world safe for Windows and Mac clients as well as + * Unix ones, we accept either \n or \r as a newline. A DOS-style \r\n + * sequence will be seen as two successive newlines, but that doesn't cause + * any problems. SQL-style comments, which start with -- and extend to the + * next newline, are treated as equivalent to a single whitespace character. + * + * NOTE a fine point: if there is no newline following --, we will absorb + * everything to the end of the input as a comment. This is correct. Older + * versions of Postgres failed to recognize -- as a comment if the input + * did not end with a newline. + * + * XXX perhaps \f (formfeed) should be treated as a newline as well? + * + * XXX if you change the set of whitespace characters, fix ecpg_isspace() + * to agree. + */ +/* + * SQL requires at least one newline in the whitespace separating + * string literals that are to be concatenated. Silly, but who are we + * to argue? Note that {whitespace_with_newline} should not have * after + * it, whereas {whitespace} should generally have a * after it... + */ +/* If we see {quote} then {quotecontinue}, the quoted string continues */ +/* + * {quotecontinuefail} is needed to avoid lexer backup when we fail to match + * {quotecontinue}. It might seem that this could just be {whitespace}*, + * but if there's a dash after {whitespace_with_newline}, it must be consumed + * to see if there's another dash --- which would start a {comment} and thus + * allow continuation of the {quotecontinue} token. + */ +/* Bit string + */ +/* Hexadecimal number */ +/* National character */ +/* Quoted string that allows backslash escapes */ +/* Extended quote + * xqdouble implements embedded quote, '''' + */ +/* $foo$ style quotes ("dollar quoting") + * The quoted string starts with $foo$ where "foo" is an optional string + * in the form of an identifier, except that it may not contain "$", + * and extends to the first occurrence of an identical string. + * There is *no* processing of the quoted text. + * + * {dolqfailed} is an error rule to avoid scanner backup when {dolqdelim} + * fails to match its trailing "$". + */ +/* Double quote + * Allows embedded spaces and other special characters into identifiers. + */ +/* Quoted identifier with Unicode escapes */ +/* Quoted string with Unicode escapes */ +/* special stuff for C strings */ +/* C-style comments + * + * The "extended comment" syntax closely resembles allowable operator syntax. + * The tricky part here is to get lex to recognize a string starting with + * slash-star as a comment, when interpreting it as an operator would produce + * a longer match --- remember lex will prefer a longer match! Also, if we + * have something like plus-slash-star, lex will think this is a 3-character + * operator whereas we want to see it as a + operator and a comment start. + * The solution is two-fold: + * 1. append {op_chars}* to xcstart so that it matches as much text as + * {operator} would. Then the tie-breaker (first matching rule of same + * length) ensures xcstart wins. We put back the extra stuff with yyless() + * in case it contains a star-slash that should terminate the comment. + * 2. In the operator rule, check for slash-star within the operator, and + * if found throw it back with yyless(). This handles the plus-slash-star + * problem. + * Dash-dash comments have similar interactions with the operator rule. + */ +/* Assorted special-case operators and operator-like tokens */ +/* + * These operator-like tokens (unlike the above ones) also match the {operator} + * rule, which means that they might be overridden by a longer match if they + * are followed by a comment start or a + or - character. Accordingly, if you + * add to this list, you must also add corresponding code to the {operator} + * block to return the correct token in such cases. (This is not needed in + * psqlscan.l since the token value is ignored there.) + */ +/* + * "self" is the set of chars that should be returned as single-character + * tokens. "op_chars" is the set of chars that can make up "Op" tokens, + * which can be one or more characters long (but if a single-char token + * appears in the "self" set, it is not to be returned as an Op). Note + * that the sets overlap, but each has some chars that are not in the other. + * + * If you change either set, adjust the character lists appearing in the + * rule for "operator"! + */ +/* we no longer allow unary minus in numbers. + * instead we pass it separately to parser. there it gets + * coerced via doNegate() -- Leon aug 20 1999 + * + * {decimalfail} is used because we would like "1..10" to lex as 1, dot_dot, 10. + * + * {realfail1} and {realfail2} are added to prevent the need for scanner + * backup when the {real} rule fails to match completely. + */ +/* special characters for other dbms */ +/* we have to react differently in compat mode */ +/* + * Dollar quoted strings are totally opaque, and no escaping is done on them. + * Other quoted strings must allow some special characters such as single-quote + * and newline. + * Embedded single-quotes are implemented both in the SQL standard + * style of two adjacent single quotes "''" and in the Postgres/Java style + * of escaped-quote "\'". + * Other embedded escaped characters are matched explicitly and the leading + * backslash is dropped from the string. + * Note that xcstart must appear before operator, as explained above! + * Also whitespace (comment) must appear before operator. + */ +/* some stuff needed for ecpg */ +/* C version of hex number */ +/* we might want to parse all cpp include files */ +/* take care of cpp lines, they may also be continued */ +/* first a general line for all commands not starting with "i" */ +/* and then the other commands starting with "i", we have to add these + * separately because the cppline production would match on "include" too + */ +#line 1779 "pgc.c" + +#define INITIAL 0 +#define xb 1 +#define xc 2 +#define xd 3 +#define xdc 4 +#define xh 5 +#define xn 6 +#define xq 7 +#define xqs 8 +#define xe 9 +#define xqc 10 +#define xdolq 11 +#define xui 12 +#define xus 13 +#define xcond 14 +#define xskip 15 +#define C 16 +#define SQL 17 +#define incl 18 +#define def 19 +#define def_ident 20 +#define undef 21 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals ( void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( void ); + +int yyget_debug ( void ); + +void yyset_debug ( int debug_flag ); + +YY_EXTRA_TYPE yyget_extra ( void ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in ( void ); + +void yyset_in ( FILE * _in_str ); + +FILE *yyget_out ( void ); + +void yyset_out ( FILE * _out_str ); + + int yyget_leng ( void ); + +char *yyget_text ( void ); + +int yyget_lineno ( void ); + +void yyset_lineno ( int _line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( void ); +#else +extern int yywrap ( void ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr ); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * ); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( void ); +#else +static int input ( void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + int n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + { +#line 425 "pgc.l" + + + +#line 429 "pgc.l" + /* code to execute during start of each call of yylex() */ + token_start = NULL; + + +#line 2026 "pgc.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + 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 >= 566 ) + yy_c = yy_meta[yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + ++yy_cp; + } + while ( yy_current_state != 565 ); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + + if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) + { + int yyl; + for ( yyl = 0; yyl < yyleng; ++yyl ) + if ( yytext[yyl] == '\n' ) + + yylineno++; +; + } + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +/* rule 1 can match eol */ +YY_RULE_SETUP +#line 434 "pgc.l" +{ + /* ignore */ + } + YY_BREAK +/* */ + +case 2: +YY_RULE_SETUP +#line 440 "pgc.l" +{ + token_start = yytext; + state_before_str_start = YYSTATE; + xcdepth = 0; + BEGIN(xc); + /* Put back any characters past slash-star; see above */ + yyless(2); + fputs("/*", yyout); + } + YY_BREAK +/* */ + +case 3: +YY_RULE_SETUP +#line 452 "pgc.l" +{ + if (state_before_str_start == SQL) + { + xcdepth++; + /* Put back any characters past slash-star; see above */ + yyless(2); + fputs("/_*", yyout); + } + else if (state_before_str_start == C) + { + ECHO; + } + } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 466 "pgc.l" +{ + if (state_before_str_start == SQL) + { + if (xcdepth <= 0) + { + ECHO; + BEGIN(SQL); + token_start = NULL; + } + else + { + xcdepth--; + fputs("*_/", yyout); + } + } + else if (state_before_str_start == C) + { + ECHO; + BEGIN(C); + token_start = NULL; + } + } + YY_BREAK +case 5: +/* rule 5 can match eol */ +YY_RULE_SETUP +#line 489 "pgc.l" +{ + ECHO; + } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 493 "pgc.l" +{ + ECHO; + } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 497 "pgc.l" +{ + ECHO; + } + YY_BREAK +case YY_STATE_EOF(xc): +#line 501 "pgc.l" +{ + mmfatal(PARSE_ERROR, "unterminated /* comment"); + } + YY_BREAK +/* */ + +case 8: +YY_RULE_SETUP +#line 507 "pgc.l" +{ + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xb); + startlit(); + } + YY_BREAK +/* */ +case 9: +/* rule 9 can match eol */ +#line 516 "pgc.l" +case 10: +/* rule 10 can match eol */ +YY_RULE_SETUP +#line 516 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case YY_STATE_EOF(xb): +#line 519 "pgc.l" +{ mmfatal(PARSE_ERROR, "unterminated bit string literal"); } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 521 "pgc.l" +{ + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xh); + startlit(); + } + YY_BREAK +case YY_STATE_EOF(xh): +#line 527 "pgc.l" +{ mmfatal(PARSE_ERROR, "unterminated hexadecimal string literal"); } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 529 "pgc.l" +{ + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xqc); + startlit(); + } + YY_BREAK + +case 13: +YY_RULE_SETUP +#line 537 "pgc.l" +{ + /* National character. + * Transfer it as-is to the backend. + */ + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xn); + startlit(); + } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 547 "pgc.l" +{ + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xq); + startlit(); + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 553 "pgc.l" +{ + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xe); + startlit(); + } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 559 "pgc.l" +{ + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xus); + startlit(); + } + YY_BREAK +/* */ +case 17: +YY_RULE_SETUP +#line 567 "pgc.l" +{ + /* + * When we are scanning a quoted string and see an end + * quote, we must look ahead for a possible continuation. + * If we don't see one, we know the end quote was in fact + * the end of the string. To reduce the lexer table size, + * we use a single "xqs" state to do the lookahead for all + * types of strings. + */ + state_before_str_stop = YYSTATE; + BEGIN(xqs); + } + YY_BREAK +case 18: +/* rule 18 can match eol */ +YY_RULE_SETUP +#line 579 "pgc.l" +{ + /* + * Found a quote continuation, so return to the in-quote + * state and continue scanning the literal. Nothing is + * added to the literal's contents. + */ + BEGIN(state_before_str_stop); + } + YY_BREAK +case 19: +/* rule 19 can match eol */ +#line 588 "pgc.l" +case 20: +/* rule 20 can match eol */ +#line 589 "pgc.l" +YY_RULE_SETUP +case YY_STATE_EOF(xqs): +#line 589 "pgc.l" +{ + /* + * Failed to see a quote continuation. Throw back + * everything after the end quote, and handle the string + * according to the state we were in previously. + */ + yyless(0); + BEGIN(state_before_str_start); + + switch (state_before_str_stop) + { + case xb: + if (literalbuf[strspn(literalbuf, "01")] != '\0') + mmerror(PARSE_ERROR, ET_ERROR, "invalid bit string literal"); + base_yylval.str = psprintf("b'%s'", literalbuf); + return BCONST; + case xh: + if (literalbuf[strspn(literalbuf, "0123456789abcdefABCDEF")] != '\0') + mmerror(PARSE_ERROR, ET_ERROR, "invalid hex string literal"); + base_yylval.str = psprintf("x'%s'", literalbuf); + return XCONST; + case xq: + /* fallthrough */ + case xqc: + base_yylval.str = psprintf("'%s'", literalbuf); + return SCONST; + case xe: + base_yylval.str = psprintf("E'%s'", literalbuf); + return SCONST; + case xn: + base_yylval.str = psprintf("N'%s'", literalbuf); + return SCONST; + case xus: + base_yylval.str = psprintf("U&'%s'", literalbuf); + return USCONST; + default: + mmfatal(PARSE_ERROR, "unhandled previous state in xqs\n"); + } + } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 629 "pgc.l" +{ addlit(yytext, yyleng); } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 630 "pgc.l" +{ addlit(yytext, yyleng); } + YY_BREAK +case 23: +/* rule 23 can match eol */ +YY_RULE_SETUP +#line 631 "pgc.l" +{ addlit(yytext, yyleng); } + YY_BREAK +case 24: +/* rule 24 can match eol */ +YY_RULE_SETUP +#line 632 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 635 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case 26: +/* rule 26 can match eol */ +YY_RULE_SETUP +#line 638 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 641 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 644 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 647 "pgc.l" +{ + /* This is only needed for \ just before EOF */ + addlitchar(yytext[0]); + } + YY_BREAK +case YY_STATE_EOF(xq): +case YY_STATE_EOF(xqc): +case YY_STATE_EOF(xe): +case YY_STATE_EOF(xn): +case YY_STATE_EOF(xus): +#line 651 "pgc.l" +{ mmfatal(PARSE_ERROR, "unterminated quoted string"); } + YY_BREAK + +case 30: +YY_RULE_SETUP +#line 654 "pgc.l" +{ + token_start = yytext; + if (dolqstart) + free(dolqstart); + dolqstart = mm_strdup(yytext); + BEGIN(xdolq); + startlit(); + addlit(yytext, yyleng); + } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 663 "pgc.l" +{ + /* throw back all but the initial "$" */ + yyless(1); + /* and treat it as {other} */ + return yytext[0]; + } + YY_BREAK +/* */ +case 32: +YY_RULE_SETUP +#line 671 "pgc.l" +{ + if (strcmp(yytext, dolqstart) == 0) + { + addlit(yytext, yyleng); + free(dolqstart); + dolqstart = NULL; + BEGIN(SQL); + base_yylval.str = mm_strdup(literalbuf); + return SCONST; + } + else + { + /* + * When we fail to match $...$ to dolqstart, transfer + * the $... part to the output, but put back the final + * $ for rescanning. Consider $delim$...$junk$delim$ + */ + addlit(yytext, yyleng - 1); + yyless(yyleng - 1); + } + } + YY_BREAK +case 33: +/* rule 33 can match eol */ +YY_RULE_SETUP +#line 692 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 695 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 698 "pgc.l" +{ + /* single quote or dollar sign */ + addlitchar(yytext[0]); + } + YY_BREAK +case YY_STATE_EOF(xdolq): +#line 702 "pgc.l" +{ mmfatal(PARSE_ERROR, "unterminated dollar-quoted string"); } + YY_BREAK + +case 36: +YY_RULE_SETUP +#line 705 "pgc.l" +{ + state_before_str_start = YYSTATE; + BEGIN(xd); + startlit(); + } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 710 "pgc.l" +{ + state_before_str_start = YYSTATE; + BEGIN(xui); + startlit(); + } + YY_BREAK +/* */ +case 38: +YY_RULE_SETUP +#line 717 "pgc.l" +{ + BEGIN(state_before_str_start); + if (literallen == 0) + mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier"); + /* + * The server will truncate the identifier here. We do + * not, as (1) it does not change the result; (2) we don't + * know what NAMEDATALEN the server might use; (3) this + * code path is also taken for literal query strings in + * PREPARE and EXECUTE IMMEDIATE, which can certainly be + * longer than NAMEDATALEN. + */ + base_yylval.str = mm_strdup(literalbuf); + return CSTRING; + } + YY_BREAK +case 39: +YY_RULE_SETUP +#line 732 "pgc.l" +{ + BEGIN(state_before_str_start); + base_yylval.str = mm_strdup(literalbuf); + return CSTRING; + } + YY_BREAK +case 40: +YY_RULE_SETUP +#line 737 "pgc.l" +{ + BEGIN(state_before_str_start); + if (literallen == 2) /* "U&" */ + mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier"); + /* The backend will truncate the identifier here. We do not as it does not change the result. */ + base_yylval.str = psprintf("U&\"%s\"", literalbuf); + return UIDENT; + } + YY_BREAK +case 41: +YY_RULE_SETUP +#line 745 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case 42: +/* rule 42 can match eol */ +YY_RULE_SETUP +#line 748 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case YY_STATE_EOF(xd): +case YY_STATE_EOF(xui): +#line 751 "pgc.l" +{ mmfatal(PARSE_ERROR, "unterminated quoted identifier"); } + YY_BREAK +case 43: +YY_RULE_SETUP +#line 752 "pgc.l" +{ + state_before_str_start = YYSTATE; + BEGIN(xdc); + startlit(); + } + YY_BREAK +case 44: +/* rule 44 can match eol */ +YY_RULE_SETUP +#line 757 "pgc.l" +{ + addlit(yytext, yyleng); + } + YY_BREAK +case YY_STATE_EOF(xdc): +#line 760 "pgc.l" +{ mmfatal(PARSE_ERROR, "unterminated quoted string"); } + YY_BREAK + +case 45: +YY_RULE_SETUP +#line 763 "pgc.l" +{ + return TYPECAST; + } + YY_BREAK +case 46: +YY_RULE_SETUP +#line 767 "pgc.l" +{ + return DOT_DOT; + } + YY_BREAK +case 47: +YY_RULE_SETUP +#line 771 "pgc.l" +{ + return COLON_EQUALS; + } + YY_BREAK +case 48: +YY_RULE_SETUP +#line 775 "pgc.l" +{ + return EQUALS_GREATER; + } + YY_BREAK +case 49: +YY_RULE_SETUP +#line 779 "pgc.l" +{ + return LESS_EQUALS; + } + YY_BREAK +case 50: +YY_RULE_SETUP +#line 783 "pgc.l" +{ + return GREATER_EQUALS; + } + YY_BREAK +case 51: +YY_RULE_SETUP +#line 787 "pgc.l" +{ + /* We accept both "<>" and "!=" as meaning NOT_EQUALS */ + return NOT_EQUALS; + } + YY_BREAK +case 52: +YY_RULE_SETUP +#line 792 "pgc.l" +{ + /* We accept both "<>" and "!=" as meaning NOT_EQUALS */ + return NOT_EQUALS; + } + YY_BREAK +case 53: +YY_RULE_SETUP +#line 797 "pgc.l" +{ + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + unput(':'); + } + else + return yytext[0]; + } + YY_BREAK +case 54: +YY_RULE_SETUP +#line 807 "pgc.l" +{ + /* + * We may find a ';' inside a structure + * definition in a TYPE or VAR statement. + * This is not an EOL marker. + */ + if (yytext[0] == ';' && struct_level == 0) + BEGIN(C); + return yytext[0]; + } + YY_BREAK +case 55: +YY_RULE_SETUP +#line 818 "pgc.l" +{ + /* + * Check for embedded slash-star or dash-dash; those + * are comment starts, so operator must stop there. + * Note that slash-star or dash-dash at the first + * character will match a prior rule, not this one. + */ + int nchars = yyleng; + char *slashstar = strstr(yytext, "/*"); + char *dashdash = strstr(yytext, "--"); + + if (slashstar && dashdash) + { + /* if both appear, take the first one */ + if (slashstar > dashdash) + slashstar = dashdash; + } + else if (!slashstar) + slashstar = dashdash; + if (slashstar) + nchars = slashstar - yytext; + + /* + * For SQL compatibility, '+' and '-' cannot be the + * last char of a multi-char operator unless the operator + * contains chars that are not in SQL operators. + * The idea is to lex '=-' as two operators, but not + * to forbid operator names like '?-' that could not be + * sequences of SQL operators. + */ + if (nchars > 1 && + (yytext[nchars - 1] == '+' || + yytext[nchars - 1] == '-')) + { + int ic; + + for (ic = nchars - 2; ic >= 0; ic--) + { + char c = yytext[ic]; + if (c == '~' || c == '!' || c == '@' || + c == '#' || c == '^' || c == '&' || + c == '|' || c == '`' || c == '?' || + c == '%') + break; + } + if (ic < 0) + { + /* + * didn't find a qualifying character, so remove + * all trailing [+-] + */ + do { + nchars--; + } while (nchars > 1 && + (yytext[nchars - 1] == '+' || + yytext[nchars - 1] == '-')); + } + } + + if (nchars < yyleng) + { + /* Strip the unwanted chars from the token */ + yyless(nchars); + /* + * If what we have left is only one char, and it's + * one of the characters matching "self", then + * return it as a character token the same way + * that the "self" rule would have. + */ + if (nchars == 1 && + strchr(",()[].;:+-*/%^<>=", yytext[0])) + return yytext[0]; + /* + * Likewise, if what we have left is two chars, and + * those match the tokens ">=", "<=", "=>", "<>" or + * "!=", then we must return the appropriate token + * rather than the generic Op. + */ + if (nchars == 2) + { + if (yytext[0] == '=' && yytext[1] == '>') + return EQUALS_GREATER; + if (yytext[0] == '>' && yytext[1] == '=') + return GREATER_EQUALS; + if (yytext[0] == '<' && yytext[1] == '=') + return LESS_EQUALS; + if (yytext[0] == '<' && yytext[1] == '>') + return NOT_EQUALS; + if (yytext[0] == '!' && yytext[1] == '=') + return NOT_EQUALS; + } + } + + base_yylval.str = mm_strdup(yytext); + return Op; + } + YY_BREAK +case 56: +YY_RULE_SETUP +#line 915 "pgc.l" +{ + base_yylval.ival = atol(yytext+1); + return PARAM; + } + YY_BREAK +case 57: +YY_RULE_SETUP +#line 920 "pgc.l" +{ + base_yylval.str = mm_strdup(yytext); + return IP; + } + YY_BREAK +/* */ + +case 58: +YY_RULE_SETUP +#line 927 "pgc.l" +{ + return process_integer_literal(yytext, &base_yylval); + } + YY_BREAK +case 59: +YY_RULE_SETUP +#line 930 "pgc.l" +{ + base_yylval.str = mm_strdup(yytext); + return FCONST; + } + YY_BREAK +case 60: +YY_RULE_SETUP +#line 934 "pgc.l" +{ + /* throw back the .., and treat as integer */ + yyless(yyleng - 2); + return process_integer_literal(yytext, &base_yylval); + } + YY_BREAK +case 61: +YY_RULE_SETUP +#line 939 "pgc.l" +{ + base_yylval.str = mm_strdup(yytext); + return FCONST; + } + YY_BREAK +case 62: +YY_RULE_SETUP +#line 943 "pgc.l" +{ + /* + * throw back the [Ee], and figure out whether what + * remains is an {integer} or {decimal}. + */ + yyless(yyleng - 1); + return process_integer_literal(yytext, &base_yylval); + } + YY_BREAK +case 63: +YY_RULE_SETUP +#line 951 "pgc.l" +{ + /* throw back the [Ee][+-], and proceed as above */ + yyless(yyleng - 2); + return process_integer_literal(yytext, &base_yylval); + } + YY_BREAK +/* */ + +case 64: +/* rule 64 can match eol */ +YY_RULE_SETUP +#line 959 "pgc.l" +{ + base_yylval.str = mm_strdup(yytext+1); + return CVARIABLE; + } + YY_BREAK +case 65: +YY_RULE_SETUP +#line 964 "pgc.l" +{ + if (!isdefine()) + { + int kwvalue; + + /* Is it an SQL/ECPG keyword? */ + kwvalue = ScanECPGKeywordLookup(yytext); + if (kwvalue >= 0) + return kwvalue; + + /* Is it a C keyword? */ + kwvalue = ScanCKeywordLookup(yytext); + if (kwvalue >= 0) + return kwvalue; + + /* + * None of the above. Return it as an identifier. + * + * The backend will attempt to truncate and case-fold + * the identifier, but I see no good reason for ecpg + * to do so; that's just another way that ecpg could get + * out of step with the backend. + */ + base_yylval.str = mm_strdup(yytext); + return IDENT; + } + } + YY_BREAK +case 66: +YY_RULE_SETUP +#line 992 "pgc.l" +{ + return yytext[0]; + } + YY_BREAK +/* */ +/* + * Begin ECPG-specific rules + */ +case 67: +/* rule 67 can match eol */ +YY_RULE_SETUP +#line 1001 "pgc.l" +{ BEGIN(SQL); return SQL_START; } + YY_BREAK +case 68: +YY_RULE_SETUP +#line 1002 "pgc.l" +{ + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + BEGIN(SQL); + return SQL_START; + } + else + return S_ANYTHING; + } + YY_BREAK +case 69: +/* rule 69 can match eol */ +YY_RULE_SETUP +#line 1012 "pgc.l" +{ ECHO; } + YY_BREAK +case 70: +YY_RULE_SETUP +#line 1013 "pgc.l" +{ + char* endptr; + + errno = 0; + base_yylval.ival = strtoul((char *)yytext,&endptr,16); + if (*endptr != '\0' || errno == ERANGE) + { + errno = 0; + base_yylval.str = mm_strdup(yytext); + return SCONST; + } + return ICONST; + } + YY_BREAK +case 71: +/* rule 71 can match eol */ +YY_RULE_SETUP +#line 1026 "pgc.l" +{ + if (system_includes) + { + include_next = false; + BEGIN(incl); + } + else + { + base_yylval.str = mm_strdup(yytext); + return CPP_LINE; + } + } + YY_BREAK +case 72: +/* rule 72 can match eol */ +YY_RULE_SETUP +#line 1038 "pgc.l" +{ + if (system_includes) + { + include_next = true; + BEGIN(incl); + } + else + { + base_yylval.str = mm_strdup(yytext); + return CPP_LINE; + } + } + YY_BREAK +case 73: +/* rule 73 can match eol */ +YY_RULE_SETUP +#line 1050 "pgc.l" +{ + base_yylval.str = mm_strdup(yytext); + return CPP_LINE; + } + YY_BREAK +case 74: +YY_RULE_SETUP +#line 1054 "pgc.l" +{ + /* + * Try to detect a function name: + * look for identifiers at the global scope + * keep the last identifier before the first '(' and '{' + */ + if (braces_open == 0 && parenths_open == 0) + { + if (current_function) + free(current_function); + current_function = mm_strdup(yytext); + } + /* Informix uses SQL defines only in SQL space */ + /* however, some defines have to be taken care of for compatibility */ + if ((!INFORMIX_MODE || !isinformixdefine()) && !isdefine()) + { + int kwvalue; + + kwvalue = ScanCKeywordLookup(yytext); + if (kwvalue >= 0) + return kwvalue; + else + { + base_yylval.str = mm_strdup(yytext); + return IDENT; + } + } + } + YY_BREAK +case 75: +YY_RULE_SETUP +#line 1082 "pgc.l" +{ mmerror(PARSE_ERROR, ET_ERROR, "nested /* ... */ comments"); } + YY_BREAK +case 76: +YY_RULE_SETUP +#line 1083 "pgc.l" +{ return ':'; } + YY_BREAK +case 77: +YY_RULE_SETUP +#line 1084 "pgc.l" +{ return ';'; } + YY_BREAK +case 78: +YY_RULE_SETUP +#line 1085 "pgc.l" +{ return ','; } + YY_BREAK +case 79: +YY_RULE_SETUP +#line 1086 "pgc.l" +{ return '*'; } + YY_BREAK +case 80: +YY_RULE_SETUP +#line 1087 "pgc.l" +{ return '%'; } + YY_BREAK +case 81: +YY_RULE_SETUP +#line 1088 "pgc.l" +{ return '/'; } + YY_BREAK +case 82: +YY_RULE_SETUP +#line 1089 "pgc.l" +{ return '+'; } + YY_BREAK +case 83: +YY_RULE_SETUP +#line 1090 "pgc.l" +{ return '-'; } + YY_BREAK +case 84: +YY_RULE_SETUP +#line 1091 "pgc.l" +{ parenths_open++; return '('; } + YY_BREAK +case 85: +YY_RULE_SETUP +#line 1092 "pgc.l" +{ parenths_open--; return ')'; } + YY_BREAK +case 86: +/* rule 86 can match eol */ +YY_RULE_SETUP +#line 1093 "pgc.l" +{ ECHO; } + YY_BREAK +case 87: +YY_RULE_SETUP +#line 1094 "pgc.l" +{ return '{'; } + YY_BREAK +case 88: +YY_RULE_SETUP +#line 1095 "pgc.l" +{ return '}'; } + YY_BREAK +case 89: +YY_RULE_SETUP +#line 1096 "pgc.l" +{ return '['; } + YY_BREAK +case 90: +YY_RULE_SETUP +#line 1097 "pgc.l" +{ return ']'; } + YY_BREAK +case 91: +YY_RULE_SETUP +#line 1098 "pgc.l" +{ return '='; } + YY_BREAK +case 92: +YY_RULE_SETUP +#line 1099 "pgc.l" +{ return S_MEMBER; } + YY_BREAK +case 93: +YY_RULE_SETUP +#line 1100 "pgc.l" +{ return S_RSHIFT; } + YY_BREAK +case 94: +YY_RULE_SETUP +#line 1101 "pgc.l" +{ return S_LSHIFT; } + YY_BREAK +case 95: +YY_RULE_SETUP +#line 1102 "pgc.l" +{ return S_OR; } + YY_BREAK +case 96: +YY_RULE_SETUP +#line 1103 "pgc.l" +{ return S_AND; } + YY_BREAK +case 97: +YY_RULE_SETUP +#line 1104 "pgc.l" +{ return S_INC; } + YY_BREAK +case 98: +YY_RULE_SETUP +#line 1105 "pgc.l" +{ return S_DEC; } + YY_BREAK +case 99: +YY_RULE_SETUP +#line 1106 "pgc.l" +{ return S_EQUAL; } + YY_BREAK +case 100: +YY_RULE_SETUP +#line 1107 "pgc.l" +{ return S_NEQUAL; } + YY_BREAK +case 101: +YY_RULE_SETUP +#line 1108 "pgc.l" +{ return S_ADD; } + YY_BREAK +case 102: +YY_RULE_SETUP +#line 1109 "pgc.l" +{ return S_SUB; } + YY_BREAK +case 103: +YY_RULE_SETUP +#line 1110 "pgc.l" +{ return S_MUL; } + YY_BREAK +case 104: +YY_RULE_SETUP +#line 1111 "pgc.l" +{ return S_DIV; } + YY_BREAK +case 105: +YY_RULE_SETUP +#line 1112 "pgc.l" +{ return S_MOD; } + YY_BREAK +case 106: +YY_RULE_SETUP +#line 1113 "pgc.l" +{ return S_MEMPOINT; } + YY_BREAK +case 107: +YY_RULE_SETUP +#line 1114 "pgc.l" +{ return S_DOTPOINT; } + YY_BREAK +case 108: +YY_RULE_SETUP +#line 1115 "pgc.l" +{ return S_ANYTHING; } + YY_BREAK +case 109: +/* rule 109 can match eol */ +YY_RULE_SETUP +#line 1116 "pgc.l" +{ BEGIN(def_ident); } + YY_BREAK +case 110: +/* rule 110 can match eol */ +YY_RULE_SETUP +#line 1117 "pgc.l" +{ + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + BEGIN(def_ident); + } + else + { + yyless(1); + return S_ANYTHING; + } + } + YY_BREAK +case 111: +/* rule 111 can match eol */ +YY_RULE_SETUP +#line 1129 "pgc.l" +{ BEGIN(undef); } + YY_BREAK +case 112: +/* rule 112 can match eol */ +YY_RULE_SETUP +#line 1130 "pgc.l" +{ + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + BEGIN(undef); + } + else + { + yyless(1); + return S_ANYTHING; + } + } + YY_BREAK +case 113: +/* rule 113 can match eol */ +YY_RULE_SETUP +#line 1142 "pgc.l" +{ + struct _defines *ptr, *ptr2 = NULL; + int i; + + /* + * Skip the ";" and trailing whitespace. Note that yytext + * contains at least one non-space character plus the ";" + */ + for (i = strlen(yytext)-2; + i > 0 && ecpg_isspace(yytext[i]); + i-- ) + ; + yytext[i+1] = '\0'; + + + for (ptr = defines; ptr != NULL; ptr2 = ptr, ptr = ptr->next) + { + if (strcmp(yytext, ptr->olddef) == 0) + { + if (ptr2 == NULL) + defines = ptr->next; + else + ptr2->next = ptr->next; + free(ptr->newdef); + free(ptr->olddef); + free(ptr); + break; + } + } + + BEGIN(C); + } + YY_BREAK +case 114: +/* rule 114 can match eol */ +YY_RULE_SETUP +#line 1174 "pgc.l" +{ + mmfatal(PARSE_ERROR, "missing identifier in EXEC SQL UNDEF command"); + yyterminate(); + } + YY_BREAK +case 115: +/* rule 115 can match eol */ +YY_RULE_SETUP +#line 1178 "pgc.l" +{ BEGIN(incl); } + YY_BREAK +case 116: +/* rule 116 can match eol */ +YY_RULE_SETUP +#line 1179 "pgc.l" +{ + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + BEGIN(incl); + } + else + { + yyless(1); + return S_ANYTHING; + } + } + YY_BREAK +case 117: +/* rule 117 can match eol */ +YY_RULE_SETUP +#line 1191 "pgc.l" +{ + if (preproc_tos >= MAX_NESTED_IF-1) + mmfatal(PARSE_ERROR, "too many nested EXEC SQL IFDEF conditions"); + preproc_tos++; + stacked_if_value[preproc_tos].active = false; + stacked_if_value[preproc_tos].saw_active = false; + stacked_if_value[preproc_tos].else_branch = false; + ifcond = true; + BEGIN(xcond); + } + YY_BREAK +case 118: +/* rule 118 can match eol */ +YY_RULE_SETUP +#line 1201 "pgc.l" +{ + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + if (preproc_tos >= MAX_NESTED_IF-1) + mmfatal(PARSE_ERROR, "too many nested EXEC SQL IFDEF conditions"); + preproc_tos++; + stacked_if_value[preproc_tos].active = false; + stacked_if_value[preproc_tos].saw_active = false; + stacked_if_value[preproc_tos].else_branch = false; + ifcond = true; + BEGIN(xcond); + } + else + { + yyless(1); + return S_ANYTHING; + } + } + YY_BREAK +case 119: +/* rule 119 can match eol */ +YY_RULE_SETUP +#line 1220 "pgc.l" +{ + if (preproc_tos >= MAX_NESTED_IF-1) + mmfatal(PARSE_ERROR, "too many nested EXEC SQL IFDEF conditions"); + preproc_tos++; + stacked_if_value[preproc_tos].active = false; + stacked_if_value[preproc_tos].saw_active = false; + stacked_if_value[preproc_tos].else_branch = false; + ifcond = false; + BEGIN(xcond); + } + YY_BREAK +case 120: +/* rule 120 can match eol */ +YY_RULE_SETUP +#line 1230 "pgc.l" +{ + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + if (preproc_tos >= MAX_NESTED_IF-1) + mmfatal(PARSE_ERROR, "too many nested EXEC SQL IFDEF conditions"); + preproc_tos++; + stacked_if_value[preproc_tos].active = false; + stacked_if_value[preproc_tos].saw_active = false; + stacked_if_value[preproc_tos].else_branch = false; + ifcond = false; + BEGIN(xcond); + } + else + { + yyless(1); + return S_ANYTHING; + } + } + YY_BREAK +case 121: +/* rule 121 can match eol */ +YY_RULE_SETUP +#line 1249 "pgc.l" +{ + if (preproc_tos == 0) + mmfatal(PARSE_ERROR, "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\""); + if (stacked_if_value[preproc_tos].else_branch) + mmfatal(PARSE_ERROR, "missing \"EXEC SQL ENDIF;\""); + ifcond = true; + BEGIN(xcond); + } + YY_BREAK +case 122: +/* rule 122 can match eol */ +YY_RULE_SETUP +#line 1257 "pgc.l" +{ + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + if (preproc_tos == 0) + mmfatal(PARSE_ERROR, "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\""); + if (stacked_if_value[preproc_tos].else_branch) + mmfatal(PARSE_ERROR, "missing \"EXEC SQL ENDIF;\""); + ifcond = true; + BEGIN(xcond); + } + else + { + yyless(1); + return S_ANYTHING; + } + } + YY_BREAK +case 123: +/* rule 123 can match eol */ +YY_RULE_SETUP +#line 1275 "pgc.l" +{ /* only exec sql endif pops the stack, so take care of duplicated 'else' */ + if ( preproc_tos == 0 ) + mmfatal(PARSE_ERROR, "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\""); + else if (stacked_if_value[preproc_tos].else_branch) + mmfatal(PARSE_ERROR, "more than one EXEC SQL ELSE"); + else + { + stacked_if_value[preproc_tos].else_branch = true; + stacked_if_value[preproc_tos].active = + (stacked_if_value[preproc_tos-1].active && + !stacked_if_value[preproc_tos].saw_active); + stacked_if_value[preproc_tos].saw_active = true; + + if (stacked_if_value[preproc_tos].active) + BEGIN(C); + else + BEGIN(xskip); + } + } + YY_BREAK +case 124: +/* rule 124 can match eol */ +YY_RULE_SETUP +#line 1294 "pgc.l" +{ + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + if ( preproc_tos == 0 ) + mmfatal(PARSE_ERROR, "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\""); + else if (stacked_if_value[preproc_tos].else_branch) + mmfatal(PARSE_ERROR, "more than one EXEC SQL ELSE"); + else + { + stacked_if_value[preproc_tos].else_branch = true; + stacked_if_value[preproc_tos].active = + (stacked_if_value[preproc_tos-1].active && + !stacked_if_value[preproc_tos].saw_active); + stacked_if_value[preproc_tos].saw_active = true; + + if (stacked_if_value[preproc_tos].active) + BEGIN(C); + else + BEGIN(xskip); + } + } + else + { + yyless(1); + return S_ANYTHING; + } + } + YY_BREAK +case 125: +/* rule 125 can match eol */ +YY_RULE_SETUP +#line 1322 "pgc.l" +{ + if (preproc_tos == 0) + mmfatal(PARSE_ERROR, "unmatched EXEC SQL ENDIF"); + else + preproc_tos--; + + if (stacked_if_value[preproc_tos].active) + BEGIN(C); + else + BEGIN(xskip); + } + YY_BREAK +case 126: +/* rule 126 can match eol */ +YY_RULE_SETUP +#line 1333 "pgc.l" +{ + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + if (preproc_tos == 0) + mmfatal(PARSE_ERROR, "unmatched EXEC SQL ENDIF"); + else + preproc_tos--; + + if (stacked_if_value[preproc_tos].active) + BEGIN(C); + else + BEGIN(xskip); + } + else + { + yyless(1); + return S_ANYTHING; + } + } + YY_BREAK +case 127: +YY_RULE_SETUP +#line 1354 "pgc.l" +{ /* ignore */ } + YY_BREAK +case 128: +/* rule 128 can match eol */ +YY_RULE_SETUP +#line 1356 "pgc.l" +{ + { + struct _defines *defptr; + unsigned int i; + bool this_active; + + /* + * Skip the ";" and trailing whitespace. Note that yytext + * contains at least one non-space character plus the ";" + */ + for (i = strlen(yytext)-2; + i > 0 && ecpg_isspace(yytext[i]); + i-- ) + ; + yytext[i+1] = '\0'; + + for (defptr = defines; + defptr != NULL && + strcmp(yytext, defptr->olddef) != 0; + defptr = defptr->next) + /* skip */ ; + + this_active = (defptr ? ifcond : !ifcond); + stacked_if_value[preproc_tos].active = + (stacked_if_value[preproc_tos-1].active && + !stacked_if_value[preproc_tos].saw_active && + this_active); + stacked_if_value[preproc_tos].saw_active |= this_active; + } + + if (stacked_if_value[preproc_tos].active) + BEGIN(C); + else + BEGIN(xskip); + } + YY_BREAK +case 129: +/* rule 129 can match eol */ +YY_RULE_SETUP +#line 1392 "pgc.l" +{ + mmfatal(PARSE_ERROR, "missing identifier in EXEC SQL IFDEF command"); + yyterminate(); + } + YY_BREAK +case 130: +YY_RULE_SETUP +#line 1396 "pgc.l" +{ + old = mm_strdup(yytext); + BEGIN(def); + startlit(); + } + YY_BREAK +case 131: +/* rule 131 can match eol */ +YY_RULE_SETUP +#line 1401 "pgc.l" +{ + mmfatal(PARSE_ERROR, "missing identifier in EXEC SQL DEFINE command"); + yyterminate(); + } + YY_BREAK +case 132: +/* rule 132 can match eol */ +YY_RULE_SETUP +#line 1405 "pgc.l" +{ + struct _defines *ptr, *this; + + for (ptr = defines; ptr != NULL; ptr = ptr->next) + { + if (strcmp(old, ptr->olddef) == 0) + { + free(ptr->newdef); + ptr->newdef = mm_strdup(literalbuf); + } + } + if (ptr == NULL) + { + this = (struct _defines *) mm_alloc(sizeof(struct _defines)); + + /* initial definition */ + this->olddef = old; + this->newdef = mm_strdup(literalbuf); + this->next = defines; + this->used = NULL; + defines = this; + } + + BEGIN(C); + } + YY_BREAK +case 133: +/* rule 133 can match eol */ +YY_RULE_SETUP +#line 1430 "pgc.l" +{ addlit(yytext, yyleng); } + YY_BREAK +case 134: +/* rule 134 can match eol */ +YY_RULE_SETUP +#line 1431 "pgc.l" +{ parse_include(); } + YY_BREAK +case 135: +/* rule 135 can match eol */ +YY_RULE_SETUP +#line 1432 "pgc.l" +{ parse_include(); } + YY_BREAK +case 136: +/* rule 136 can match eol */ +YY_RULE_SETUP +#line 1433 "pgc.l" +{ parse_include(); } + YY_BREAK +case 137: +/* rule 137 can match eol */ +YY_RULE_SETUP +#line 1434 "pgc.l" +{ + mmfatal(PARSE_ERROR, "syntax error in EXEC SQL INCLUDE command"); + yyterminate(); + } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(xcond): +case YY_STATE_EOF(xskip): +case YY_STATE_EOF(C): +case YY_STATE_EOF(SQL): +case YY_STATE_EOF(incl): +case YY_STATE_EOF(def): +case YY_STATE_EOF(def_ident): +case YY_STATE_EOF(undef): +#line 1439 "pgc.l" +{ + if (yy_buffer == NULL) + { + if ( preproc_tos > 0 ) + { + preproc_tos = 0; + mmfatal(PARSE_ERROR, "missing \"EXEC SQL ENDIF;\""); + } + yyterminate(); + } + else + { + struct _yy_buffer *yb = yy_buffer; + int i; + struct _defines *ptr; + + for (ptr = defines; ptr; ptr = ptr->next) + if (ptr->used == yy_buffer) + { + ptr->used = NULL; + break; + } + + if (yyin != NULL) + fclose(yyin); + + yy_delete_buffer( YY_CURRENT_BUFFER ); + yy_switch_to_buffer(yy_buffer->buffer); + + yylineno = yy_buffer->lineno; + + /* We have to output the filename only if we change files here */ + i = strcmp(input_filename, yy_buffer->filename); + + free(input_filename); + input_filename = yy_buffer->filename; + + yy_buffer = yy_buffer->next; + free(yb); + + if (i != 0) + output_line_number(); + + } + } + YY_BREAK +case 138: +/* rule 138 can match eol */ +YY_RULE_SETUP +#line 1485 "pgc.l" +{ mmfatal(PARSE_ERROR, "internal error: unreachable state; please report this to <%s>", PACKAGE_BUGREPORT); } + YY_BREAK +case 139: +YY_RULE_SETUP +#line 1487 "pgc.l" +YY_FATAL_ERROR( "flex scanner jammed" ); + YY_BREAK +#line 3734 "pgc.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = (yytext_ptr); + int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + yy_state_type yy_current_state; + char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + 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 >= 566 ) + yy_c = yy_meta[yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + int yy_is_jam; + char *yy_cp = (yy_c_buf_p); + + YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 566 ) + yy_c = yy_meta[yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + yy_is_jam = (yy_current_state == 565); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp ) +{ + char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = (yy_n_chars) + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + if ( c == '\n' ){ + --yylineno; + } + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return 0; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + if ( c == '\n' ) + + yylineno++; +; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf ); + + yyfree( (void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer( b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + yy_size_t num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr ) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg ) +{ + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +int yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param _line_number line number + * + */ +void yyset_lineno (int _line_number ) +{ + + yylineno = _line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str ) +{ + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str ) +{ + yyout = _out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int _bdebug ) +{ + yy_flex_debug = _bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + /* We do not touch yylineno unless the option is enabled. */ + yylineno = 1; + + (yy_buffer_stack) = NULL; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = NULL; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n ) +{ + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s ) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 1487 "pgc.l" + + +/* LCOV_EXCL_STOP */ + +void +lex_init(void) +{ + braces_open = 0; + parenths_open = 0; + current_function = NULL; + + yylineno = 1; + + /* initialize state for if/else/endif */ + preproc_tos = 0; + stacked_if_value[preproc_tos].active = true; + stacked_if_value[preproc_tos].saw_active = true; + stacked_if_value[preproc_tos].else_branch = false; + + /* initialize literal buffer to a reasonable but expansible size */ + if (literalbuf == NULL) + { + literalalloc = 1024; + literalbuf = (char *) mm_alloc(literalalloc); + } + startlit(); + + BEGIN(C); +} + +static void +addlit(char *ytext, int yleng) +{ + /* enlarge buffer if needed */ + if ((literallen+yleng) >= literalalloc) + { + do + literalalloc *= 2; + while ((literallen+yleng) >= literalalloc); + literalbuf = (char *) realloc(literalbuf, literalalloc); + } + /* append new data, add trailing null */ + memcpy(literalbuf+literallen, ytext, yleng); + literallen += yleng; + literalbuf[literallen] = '\0'; +} + +static void +addlitchar(unsigned char ychar) +{ + /* enlarge buffer if needed */ + if ((literallen+1) >= literalalloc) + { + literalalloc *= 2; + literalbuf = (char *) realloc(literalbuf, literalalloc); + } + /* append new data, add trailing null */ + literalbuf[literallen] = ychar; + literallen += 1; + literalbuf[literallen] = '\0'; +} + +/* + * Process {integer}. Note this will also do the right thing with {decimal}, + * ie digits and a decimal point. + */ +static int +process_integer_literal(const char *token, YYSTYPE *lval) +{ + int val; + char *endptr; + + errno = 0; + val = strtoint(token, &endptr, 10); + if (*endptr != '\0' || errno == ERANGE) + { + /* integer too large (or contains decimal pt), treat it as a float */ + lval->str = mm_strdup(token); + return FCONST; + } + lval->ival = val; + return ICONST; +} + +static void +parse_include(void) +{ + /* got the include file name */ + struct _yy_buffer *yb; + struct _include_path *ip; + char inc_file[MAXPGPATH]; + unsigned int i; + + yb = mm_alloc(sizeof(struct _yy_buffer)); + + yb->buffer = YY_CURRENT_BUFFER; + yb->lineno = yylineno; + yb->filename = input_filename; + yb->next = yy_buffer; + + yy_buffer = yb; + + /* + * skip the ";" if there is one and trailing whitespace. Note that + * yytext contains at least one non-space character plus the ";" + */ + for (i = strlen(yytext)-2; + i > 0 && ecpg_isspace(yytext[i]); + i--) + ; + + if (yytext[i] == ';') + i--; + + yytext[i+1] = '\0'; + + yyin = NULL; + + /* If file name is enclosed in '"' remove these and look only in '.' */ + /* Informix does look into all include paths though, except filename starts with '/' */ + if (yytext[0] == '"' && yytext[i] == '"' && + ((compat != ECPG_COMPAT_INFORMIX && compat != ECPG_COMPAT_INFORMIX_SE) || yytext[1] == '/')) + { + yytext[i] = '\0'; + memmove(yytext, yytext+1, strlen(yytext)); + + strlcpy(inc_file, yytext, sizeof(inc_file)); + yyin = fopen(inc_file, "r"); + if (!yyin) + { + if (strlen(inc_file) <= 2 || strcmp(inc_file + strlen(inc_file) - 2, ".h") != 0) + { + strcat(inc_file, ".h"); + yyin = fopen(inc_file, "r"); + } + } + + } + else + { + if ((yytext[0] == '"' && yytext[i] == '"') || (yytext[0] == '<' && yytext[i] == '>')) + { + yytext[i] = '\0'; + memmove(yytext, yytext+1, strlen(yytext)); + } + + for (ip = include_paths; yyin == NULL && ip != NULL; ip = ip->next) + { + if (strlen(ip->path) + strlen(yytext) + 4 > MAXPGPATH) + { + fprintf(stderr, _("Error: include path \"%s/%s\" is too long on line %d, skipping\n"), ip->path, yytext, yylineno); + continue; + } + snprintf (inc_file, sizeof(inc_file), "%s/%s", ip->path, yytext); + yyin = fopen(inc_file, "r"); + if (!yyin) + { + if (strcmp(inc_file + strlen(inc_file) - 2, ".h") != 0) + { + strcat(inc_file, ".h"); + yyin = fopen( inc_file, "r" ); + } + } + /* if the command was "include_next" we have to disregard the first hit */ + if (yyin && include_next) + { + fclose (yyin); + yyin = NULL; + include_next = false; + } + } + } + if (!yyin) + mmfatal(NO_INCLUDE_FILE, "could not open include file \"%s\" on line %d", yytext, yylineno); + + input_filename = mm_strdup(inc_file); + yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE )); + yylineno = 1; + output_line_number(); + + BEGIN(C); +} + +/* + * ecpg_isspace() --- return true if flex scanner considers char whitespace + */ +static bool +ecpg_isspace(char ch) +{ + if (ch == ' ' || + ch == '\t' || + ch == '\n' || + ch == '\r' || + ch == '\f') + return true; + return false; +} + +static bool isdefine(void) +{ + struct _defines *ptr; + + /* is it a define? */ + for (ptr = defines; ptr; ptr = ptr->next) + { + if (strcmp(yytext, ptr->olddef) == 0 && ptr->used == NULL) + { + struct _yy_buffer *yb; + + yb = mm_alloc(sizeof(struct _yy_buffer)); + + yb->buffer = YY_CURRENT_BUFFER; + yb->lineno = yylineno; + yb->filename = mm_strdup(input_filename); + yb->next = yy_buffer; + + ptr->used = yy_buffer = yb; + + yy_scan_string(ptr->newdef); + return true; + } + } + + return false; +} + +static bool isinformixdefine(void) +{ + const char *new = NULL; + + if (strcmp(yytext, "dec_t") == 0) + new = "decimal"; + else if (strcmp(yytext, "intrvl_t") == 0) + new = "interval"; + else if (strcmp(yytext, "dtime_t") == 0) + new = "timestamp"; + + if (new) + { + struct _yy_buffer *yb; + + yb = mm_alloc(sizeof(struct _yy_buffer)); + + yb->buffer = YY_CURRENT_BUFFER; + yb->lineno = yylineno; + yb->filename = mm_strdup(input_filename); + yb->next = yy_buffer; + yy_buffer = yb; + + yy_scan_string(new); + return true; + } + + return false; +} + diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l new file mode 100644 index 0000000..7a03566 --- /dev/null +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -0,0 +1,1740 @@ +%top{ +/*------------------------------------------------------------------------- + * + * pgc.l + * lexical scanner for ecpg + * + * This is a modified version of src/backend/parser/scan.l + * + * The ecpg scanner is not backup-free, so the fail rules are + * only here to simplify syncing this file with scan.l. + * + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * src/interfaces/ecpg/preproc/pgc.l + * + *------------------------------------------------------------------------- + */ +#include "postgres_fe.h" + +#include +#include + +#include "common/string.h" + +#include "preproc_extern.h" +#include "preproc.h" +} + +%{ + +/* LCOV_EXCL_START */ + +extern YYSTYPE base_yylval; + +static int xcdepth = 0; /* depth of nesting in slash-star comments */ +static char *dolqstart = NULL; /* current $foo$ quote start string */ + +/* + * literalbuf is used to accumulate literal values when multiple rules + * are needed to parse a single literal. Call startlit to reset buffer + * to empty, addlit to add text. Note that the buffer is permanently + * malloc'd to the largest size needed so far in the current run. + */ +static char *literalbuf = NULL; /* expandable buffer */ +static int literallen; /* actual current length */ +static int literalalloc; /* current allocated buffer size */ + +/* Used for detecting global state together with braces_open */ +static int parenths_open; + +/* Used to tell parse_include() whether the command was #include or #include_next */ +static bool include_next; + +#define startlit() (literalbuf[0] = '\0', literallen = 0) +static void addlit(char *ytext, int yleng); +static void addlitchar(unsigned char); +static int process_integer_literal(const char *token, YYSTYPE *lval); +static void parse_include(void); +static bool ecpg_isspace(char ch); +static bool isdefine(void); +static bool isinformixdefine(void); + +char *token_start; + +/* vars to keep track of start conditions when scanning literals */ +static int state_before_str_start; +static int state_before_str_stop; + +struct _yy_buffer +{ + YY_BUFFER_STATE buffer; + long lineno; + char *filename; + struct _yy_buffer *next; +} *yy_buffer = NULL; + +static char *old; + +/* + * Vars for handling ifdef/elif/endif constructs. preproc_tos is the current + * nesting depth of such constructs, and stacked_if_value[preproc_tos] is the + * state for the innermost level. (For convenience, stacked_if_value[0] is + * initialized as though we are in the active branch of some outermost IF.) + * The active field is true if the current branch is active (being expanded). + * The saw_active field is true if we have found any successful branch, + * so that all subsequent branches of this level should be skipped. + * The else_branch field is true if we've found an 'else' (so that another + * 'else' or 'elif' at this level is an error.) + * For IFs nested within an inactive branch, all branches always have active + * set to false, but saw_active and else_branch are maintained normally. + * ifcond is valid only while evaluating an if-condition; it's true if we + * are doing ifdef, false if ifndef. + */ +#define MAX_NESTED_IF 128 +static short preproc_tos; +static bool ifcond; +static struct _if_value +{ + bool active; + bool saw_active; + bool else_branch; +} stacked_if_value[MAX_NESTED_IF]; + +%} + +%option 8bit +%option never-interactive +%option nodefault +%option noinput +%option noyywrap +%option warn +%option yylineno +%option prefix="base_yy" + +/* + * OK, here is a short description of lex/flex rules behavior. + * The longest pattern which matches an input string is always chosen. + * For equal-length patterns, the first occurring in the rules list is chosen. + * INITIAL is the starting state, to which all non-conditional rules apply. + * Exclusive states change parsing rules while the state is active. When in + * an exclusive state, only those rules defined for that state apply. + * + * We use exclusive states for quoted strings, extended comments, + * and to eliminate parsing troubles for numeric strings. + * Exclusive states: + * bit string literal + * extended C-style comments + * delimited identifiers (double-quoted identifiers) + * double-quoted strings in C + * hexadecimal numeric string + * national character quoted strings + * standard quoted strings + * quote stop (detect continued strings) + * extended quoted strings (support backslash escape sequences) + * single-quoted strings in C + * $foo$ quoted strings + * quoted identifier with Unicode escapes + * quoted string with Unicode escapes + * condition of an EXEC SQL IFDEF construct + * skipping the inactive part of an EXEC SQL IFDEF construct + * + * Note: we intentionally don't mimic the backend's state; we have + * no need to distinguish it from state. + * + * Remember to add an <> case whenever you add a new exclusive state! + * The default one is probably not the right thing. + */ + +%x xb +%x xc +%x xd +%x xdc +%x xh +%x xn +%x xq +%x xqs +%x xe +%x xqc +%x xdolq +%x xui +%x xus +%x xcond +%x xskip + +/* Additional exclusive states that are specific to ECPG */ +%x C SQL incl def def_ident undef + +/* + * In order to make the world safe for Windows and Mac clients as well as + * Unix ones, we accept either \n or \r as a newline. A DOS-style \r\n + * sequence will be seen as two successive newlines, but that doesn't cause + * any problems. SQL-style comments, which start with -- and extend to the + * next newline, are treated as equivalent to a single whitespace character. + * + * NOTE a fine point: if there is no newline following --, we will absorb + * everything to the end of the input as a comment. This is correct. Older + * versions of Postgres failed to recognize -- as a comment if the input + * did not end with a newline. + * + * XXX perhaps \f (formfeed) should be treated as a newline as well? + * + * XXX if you change the set of whitespace characters, fix ecpg_isspace() + * to agree. + */ + +space [ \t\n\r\f] +horiz_space [ \t\f] +newline [\n\r] +non_newline [^\n\r] + +comment ("--"{non_newline}*) + +whitespace ({space}+|{comment}) + +/* + * SQL requires at least one newline in the whitespace separating + * string literals that are to be concatenated. Silly, but who are we + * to argue? Note that {whitespace_with_newline} should not have * after + * it, whereas {whitespace} should generally have a * after it... + */ + +horiz_whitespace ({horiz_space}|{comment}) +whitespace_with_newline ({horiz_whitespace}*{newline}{whitespace}*) + +quote ' +/* If we see {quote} then {quotecontinue}, the quoted string continues */ +quotecontinue {whitespace_with_newline}{quote} + +/* + * {quotecontinuefail} is needed to avoid lexer backup when we fail to match + * {quotecontinue}. It might seem that this could just be {whitespace}*, + * but if there's a dash after {whitespace_with_newline}, it must be consumed + * to see if there's another dash --- which would start a {comment} and thus + * allow continuation of the {quotecontinue} token. + */ +quotecontinuefail {whitespace}*"-"? + +/* Bit string + */ +xbstart [bB]{quote} +xbinside [^']* + +/* Hexadecimal number */ +xhstart [xX]{quote} +xhinside [^']* + +/* National character */ +xnstart [nN]{quote} + +/* Quoted string that allows backslash escapes */ +xestart [eE]{quote} +xeinside [^\\']+ +xeescape [\\][^0-7] +xeoctesc [\\][0-7]{1,3} +xehexesc [\\]x[0-9A-Fa-f]{1,2} +xeunicode [\\](u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8}) + +/* Extended quote + * xqdouble implements embedded quote, '''' + */ +xqstart {quote} +xqdouble {quote}{quote} +xqcquote [\\]{quote} +xqinside [^']+ + +/* $foo$ style quotes ("dollar quoting") + * The quoted string starts with $foo$ where "foo" is an optional string + * in the form of an identifier, except that it may not contain "$", + * and extends to the first occurrence of an identical string. + * There is *no* processing of the quoted text. + * + * {dolqfailed} is an error rule to avoid scanner backup when {dolqdelim} + * fails to match its trailing "$". + */ +dolq_start [A-Za-z\200-\377_] +dolq_cont [A-Za-z\200-\377_0-9] +dolqdelim \$({dolq_start}{dolq_cont}*)?\$ +dolqfailed \${dolq_start}{dolq_cont}* +dolqinside [^$]+ + +/* Double quote + * Allows embedded spaces and other special characters into identifiers. + */ +dquote \" +xdstart {dquote} +xdstop {dquote} +xddouble {dquote}{dquote} +xdinside [^"]+ + +/* Quoted identifier with Unicode escapes */ +xuistart [uU]&{dquote} + +/* Quoted string with Unicode escapes */ +xusstart [uU]&{quote} + +/* special stuff for C strings */ +xdcqq \\\\ +xdcqdq \\\" +xdcother [^"] +xdcinside ({xdcqq}|{xdcqdq}|{xdcother}) + + +/* C-style comments + * + * The "extended comment" syntax closely resembles allowable operator syntax. + * The tricky part here is to get lex to recognize a string starting with + * slash-star as a comment, when interpreting it as an operator would produce + * a longer match --- remember lex will prefer a longer match! Also, if we + * have something like plus-slash-star, lex will think this is a 3-character + * operator whereas we want to see it as a + operator and a comment start. + * The solution is two-fold: + * 1. append {op_chars}* to xcstart so that it matches as much text as + * {operator} would. Then the tie-breaker (first matching rule of same + * length) ensures xcstart wins. We put back the extra stuff with yyless() + * in case it contains a star-slash that should terminate the comment. + * 2. In the operator rule, check for slash-star within the operator, and + * if found throw it back with yyless(). This handles the plus-slash-star + * problem. + * Dash-dash comments have similar interactions with the operator rule. + */ +xcstart \/\*{op_chars}* +xcstop \*+\/ +xcinside [^*/]+ + +digit [0-9] +ident_start [A-Za-z\200-\377_] +ident_cont [A-Za-z\200-\377_0-9\$] + +identifier {ident_start}{ident_cont}* + +array ({ident_cont}|{whitespace}|[\[\]\+\-\*\%\/\(\)\>\.])* + +/* Assorted special-case operators and operator-like tokens */ +typecast "::" +dot_dot \.\. +colon_equals ":=" + +/* + * These operator-like tokens (unlike the above ones) also match the {operator} + * rule, which means that they might be overridden by a longer match if they + * are followed by a comment start or a + or - character. Accordingly, if you + * add to this list, you must also add corresponding code to the {operator} + * block to return the correct token in such cases. (This is not needed in + * psqlscan.l since the token value is ignored there.) + */ +equals_greater "=>" +less_equals "<=" +greater_equals ">=" +less_greater "<>" +not_equals "!=" + +/* + * "self" is the set of chars that should be returned as single-character + * tokens. "op_chars" is the set of chars that can make up "Op" tokens, + * which can be one or more characters long (but if a single-char token + * appears in the "self" set, it is not to be returned as an Op). Note + * that the sets overlap, but each has some chars that are not in the other. + * + * If you change either set, adjust the character lists appearing in the + * rule for "operator"! + */ +self [,()\[\].;\:\+\-\*\/\%\^\<\>\=] +op_chars [\~\!\@\#\^\&\|\`\?\+\-\*\/\%\<\>\=] +operator {op_chars}+ + +/* we no longer allow unary minus in numbers. + * instead we pass it separately to parser. there it gets + * coerced via doNegate() -- Leon aug 20 1999 + * + * {decimalfail} is used because we would like "1..10" to lex as 1, dot_dot, 10. + * + * {realfail1} and {realfail2} are added to prevent the need for scanner + * backup when the {real} rule fails to match completely. + */ + +integer {digit}+ +decimal (({digit}*\.{digit}+)|({digit}+\.{digit}*)) +decimalfail {digit}+\.\. +real ({integer}|{decimal})[Ee][-+]?{digit}+ +realfail1 ({integer}|{decimal})[Ee] +realfail2 ({integer}|{decimal})[Ee][-+] + +param \${integer} + +/* special characters for other dbms */ +/* we have to react differently in compat mode */ +informix_special [\$] + +other . + +/* + * Dollar quoted strings are totally opaque, and no escaping is done on them. + * Other quoted strings must allow some special characters such as single-quote + * and newline. + * Embedded single-quotes are implemented both in the SQL standard + * style of two adjacent single quotes "''" and in the Postgres/Java style + * of escaped-quote "\'". + * Other embedded escaped characters are matched explicitly and the leading + * backslash is dropped from the string. + * Note that xcstart must appear before operator, as explained above! + * Also whitespace (comment) must appear before operator. + */ + +/* some stuff needed for ecpg */ +exec [eE][xX][eE][cC] +sql [sS][qQ][lL] +define [dD][eE][fF][iI][nN][eE] +include [iI][nN][cC][lL][uU][dD][eE] +include_next [iI][nN][cC][lL][uU][dD][eE]_[nN][eE][xX][tT] +import [iI][mM][pP][oO][rR][tT] +undef [uU][nN][dD][eE][fF] + +/* C version of hex number */ +xch 0[xX][0-9A-Fa-f]* + +ccomment "//".*\n + +if [iI][fF] +ifdef [iI][fF][dD][eE][fF] +ifndef [iI][fF][nN][dD][eE][fF] +else [eE][lL][sS][eE] +elif [eE][lL][iI][fF] +endif [eE][nN][dD][iI][fF] + +struct [sS][tT][rR][uU][cC][tT] + +exec_sql {exec}{space}*{sql}{space}* +ipdigit ({digit}|{digit}{digit}|{digit}{digit}{digit}) +ip {ipdigit}\.{ipdigit}\.{ipdigit}\.{ipdigit} + +/* we might want to parse all cpp include files */ +cppinclude {space}*#{include}{space}* +cppinclude_next {space}*#{include_next}{space}* + +/* take care of cpp lines, they may also be continued */ +/* first a general line for all commands not starting with "i" */ +/* and then the other commands starting with "i", we have to add these + * separately because the cppline production would match on "include" too + */ +cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+\/)|.|\\{space}*{newline})*{newline} + +%% + +%{ + /* code to execute during start of each call of yylex() */ + token_start = NULL; +%} + +{ +{whitespace} { + /* ignore */ + } +} /* */ + +{ +{xcstart} { + token_start = yytext; + state_before_str_start = YYSTATE; + xcdepth = 0; + BEGIN(xc); + /* Put back any characters past slash-star; see above */ + yyless(2); + fputs("/*", yyout); + } +} /* */ + +{ +{xcstart} { + if (state_before_str_start == SQL) + { + xcdepth++; + /* Put back any characters past slash-star; see above */ + yyless(2); + fputs("/_*", yyout); + } + else if (state_before_str_start == C) + { + ECHO; + } + } + +{xcstop} { + if (state_before_str_start == SQL) + { + if (xcdepth <= 0) + { + ECHO; + BEGIN(SQL); + token_start = NULL; + } + else + { + xcdepth--; + fputs("*_/", yyout); + } + } + else if (state_before_str_start == C) + { + ECHO; + BEGIN(C); + token_start = NULL; + } + } + +{xcinside} { + ECHO; + } + +{op_chars} { + ECHO; + } + +\*+ { + ECHO; + } + +<> { + mmfatal(PARSE_ERROR, "unterminated /* comment"); + } +} /* */ + +{ +{xbstart} { + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xb); + startlit(); + } +} /* */ + +{xhinside} | +{xbinside} { + addlit(yytext, yyleng); + } +<> { mmfatal(PARSE_ERROR, "unterminated bit string literal"); } + +{xhstart} { + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xh); + startlit(); + } +<> { mmfatal(PARSE_ERROR, "unterminated hexadecimal string literal"); } + +{xqstart} { + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xqc); + startlit(); + } + +{ +{xnstart} { + /* National character. + * Transfer it as-is to the backend. + */ + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xn); + startlit(); + } + +{xqstart} { + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xq); + startlit(); + } +{xestart} { + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xe); + startlit(); + } +{xusstart} { + token_start = yytext; + state_before_str_start = YYSTATE; + BEGIN(xus); + startlit(); + } +} /* */ + +{quote} { + /* + * When we are scanning a quoted string and see an end + * quote, we must look ahead for a possible continuation. + * If we don't see one, we know the end quote was in fact + * the end of the string. To reduce the lexer table size, + * we use a single "xqs" state to do the lookahead for all + * types of strings. + */ + state_before_str_stop = YYSTATE; + BEGIN(xqs); + } +{quotecontinue} { + /* + * Found a quote continuation, so return to the in-quote + * state and continue scanning the literal. Nothing is + * added to the literal's contents. + */ + BEGIN(state_before_str_stop); + } +{quotecontinuefail} | +{other} | +<> { + /* + * Failed to see a quote continuation. Throw back + * everything after the end quote, and handle the string + * according to the state we were in previously. + */ + yyless(0); + BEGIN(state_before_str_start); + + switch (state_before_str_stop) + { + case xb: + if (literalbuf[strspn(literalbuf, "01")] != '\0') + mmerror(PARSE_ERROR, ET_ERROR, "invalid bit string literal"); + base_yylval.str = psprintf("b'%s'", literalbuf); + return BCONST; + case xh: + if (literalbuf[strspn(literalbuf, "0123456789abcdefABCDEF")] != '\0') + mmerror(PARSE_ERROR, ET_ERROR, "invalid hex string literal"); + base_yylval.str = psprintf("x'%s'", literalbuf); + return XCONST; + case xq: + /* fallthrough */ + case xqc: + base_yylval.str = psprintf("'%s'", literalbuf); + return SCONST; + case xe: + base_yylval.str = psprintf("E'%s'", literalbuf); + return SCONST; + case xn: + base_yylval.str = psprintf("N'%s'", literalbuf); + return SCONST; + case xus: + base_yylval.str = psprintf("U&'%s'", literalbuf); + return USCONST; + default: + mmfatal(PARSE_ERROR, "unhandled previous state in xqs\n"); + } + } + +{xqdouble} { addlit(yytext, yyleng); } +{xqcquote} { addlit(yytext, yyleng); } +{xqinside} { addlit(yytext, yyleng); } +{xeinside} { + addlit(yytext, yyleng); + } +{xeunicode} { + addlit(yytext, yyleng); + } +{xeescape} { + addlit(yytext, yyleng); + } +{xeoctesc} { + addlit(yytext, yyleng); + } +{xehexesc} { + addlit(yytext, yyleng); + } +. { + /* This is only needed for \ just before EOF */ + addlitchar(yytext[0]); + } +<> { mmfatal(PARSE_ERROR, "unterminated quoted string"); } + +{ +{dolqdelim} { + token_start = yytext; + if (dolqstart) + free(dolqstart); + dolqstart = mm_strdup(yytext); + BEGIN(xdolq); + startlit(); + addlit(yytext, yyleng); + } +{dolqfailed} { + /* throw back all but the initial "$" */ + yyless(1); + /* and treat it as {other} */ + return yytext[0]; + } +} /* */ + +{dolqdelim} { + if (strcmp(yytext, dolqstart) == 0) + { + addlit(yytext, yyleng); + free(dolqstart); + dolqstart = NULL; + BEGIN(SQL); + base_yylval.str = mm_strdup(literalbuf); + return SCONST; + } + else + { + /* + * When we fail to match $...$ to dolqstart, transfer + * the $... part to the output, but put back the final + * $ for rescanning. Consider $delim$...$junk$delim$ + */ + addlit(yytext, yyleng - 1); + yyless(yyleng - 1); + } + } +{dolqinside} { + addlit(yytext, yyleng); + } +{dolqfailed} { + addlit(yytext, yyleng); + } +. { + /* single quote or dollar sign */ + addlitchar(yytext[0]); + } +<> { mmfatal(PARSE_ERROR, "unterminated dollar-quoted string"); } + +{ +{xdstart} { + state_before_str_start = YYSTATE; + BEGIN(xd); + startlit(); + } +{xuistart} { + state_before_str_start = YYSTATE; + BEGIN(xui); + startlit(); + } +} /* */ + +{xdstop} { + BEGIN(state_before_str_start); + if (literallen == 0) + mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier"); + /* + * The server will truncate the identifier here. We do + * not, as (1) it does not change the result; (2) we don't + * know what NAMEDATALEN the server might use; (3) this + * code path is also taken for literal query strings in + * PREPARE and EXECUTE IMMEDIATE, which can certainly be + * longer than NAMEDATALEN. + */ + base_yylval.str = mm_strdup(literalbuf); + return CSTRING; + } +{xdstop} { + BEGIN(state_before_str_start); + base_yylval.str = mm_strdup(literalbuf); + return CSTRING; + } +{dquote} { + BEGIN(state_before_str_start); + if (literallen == 2) /* "U&" */ + mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier"); + /* The backend will truncate the identifier here. We do not as it does not change the result. */ + base_yylval.str = psprintf("U&\"%s\"", literalbuf); + return UIDENT; + } +{xddouble} { + addlit(yytext, yyleng); + } +{xdinside} { + addlit(yytext, yyleng); + } +<> { mmfatal(PARSE_ERROR, "unterminated quoted identifier"); } +{xdstart} { + state_before_str_start = YYSTATE; + BEGIN(xdc); + startlit(); + } +{xdcinside} { + addlit(yytext, yyleng); + } +<> { mmfatal(PARSE_ERROR, "unterminated quoted string"); } + +{ +{typecast} { + return TYPECAST; + } + +{dot_dot} { + return DOT_DOT; + } + +{colon_equals} { + return COLON_EQUALS; + } + +{equals_greater} { + return EQUALS_GREATER; + } + +{less_equals} { + return LESS_EQUALS; + } + +{greater_equals} { + return GREATER_EQUALS; + } + +{less_greater} { + /* We accept both "<>" and "!=" as meaning NOT_EQUALS */ + return NOT_EQUALS; + } + +{not_equals} { + /* We accept both "<>" and "!=" as meaning NOT_EQUALS */ + return NOT_EQUALS; + } + +{informix_special} { + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + unput(':'); + } + else + return yytext[0]; + } + +{self} { + /* + * We may find a ';' inside a structure + * definition in a TYPE or VAR statement. + * This is not an EOL marker. + */ + if (yytext[0] == ';' && struct_level == 0) + BEGIN(C); + return yytext[0]; + } + +{operator} { + /* + * Check for embedded slash-star or dash-dash; those + * are comment starts, so operator must stop there. + * Note that slash-star or dash-dash at the first + * character will match a prior rule, not this one. + */ + int nchars = yyleng; + char *slashstar = strstr(yytext, "/*"); + char *dashdash = strstr(yytext, "--"); + + if (slashstar && dashdash) + { + /* if both appear, take the first one */ + if (slashstar > dashdash) + slashstar = dashdash; + } + else if (!slashstar) + slashstar = dashdash; + if (slashstar) + nchars = slashstar - yytext; + + /* + * For SQL compatibility, '+' and '-' cannot be the + * last char of a multi-char operator unless the operator + * contains chars that are not in SQL operators. + * The idea is to lex '=-' as two operators, but not + * to forbid operator names like '?-' that could not be + * sequences of SQL operators. + */ + if (nchars > 1 && + (yytext[nchars - 1] == '+' || + yytext[nchars - 1] == '-')) + { + int ic; + + for (ic = nchars - 2; ic >= 0; ic--) + { + char c = yytext[ic]; + if (c == '~' || c == '!' || c == '@' || + c == '#' || c == '^' || c == '&' || + c == '|' || c == '`' || c == '?' || + c == '%') + break; + } + if (ic < 0) + { + /* + * didn't find a qualifying character, so remove + * all trailing [+-] + */ + do { + nchars--; + } while (nchars > 1 && + (yytext[nchars - 1] == '+' || + yytext[nchars - 1] == '-')); + } + } + + if (nchars < yyleng) + { + /* Strip the unwanted chars from the token */ + yyless(nchars); + /* + * If what we have left is only one char, and it's + * one of the characters matching "self", then + * return it as a character token the same way + * that the "self" rule would have. + */ + if (nchars == 1 && + strchr(",()[].;:+-*/%^<>=", yytext[0])) + return yytext[0]; + /* + * Likewise, if what we have left is two chars, and + * those match the tokens ">=", "<=", "=>", "<>" or + * "!=", then we must return the appropriate token + * rather than the generic Op. + */ + if (nchars == 2) + { + if (yytext[0] == '=' && yytext[1] == '>') + return EQUALS_GREATER; + if (yytext[0] == '>' && yytext[1] == '=') + return GREATER_EQUALS; + if (yytext[0] == '<' && yytext[1] == '=') + return LESS_EQUALS; + if (yytext[0] == '<' && yytext[1] == '>') + return NOT_EQUALS; + if (yytext[0] == '!' && yytext[1] == '=') + return NOT_EQUALS; + } + } + + base_yylval.str = mm_strdup(yytext); + return Op; + } + +{param} { + base_yylval.ival = atol(yytext+1); + return PARAM; + } + +{ip} { + base_yylval.str = mm_strdup(yytext); + return IP; + } +} /* */ + +{ +{integer} { + return process_integer_literal(yytext, &base_yylval); + } +{decimal} { + base_yylval.str = mm_strdup(yytext); + return FCONST; + } +{decimalfail} { + /* throw back the .., and treat as integer */ + yyless(yyleng - 2); + return process_integer_literal(yytext, &base_yylval); + } +{real} { + base_yylval.str = mm_strdup(yytext); + return FCONST; + } +{realfail1} { + /* + * throw back the [Ee], and figure out whether what + * remains is an {integer} or {decimal}. + */ + yyless(yyleng - 1); + return process_integer_literal(yytext, &base_yylval); + } +{realfail2} { + /* throw back the [Ee][+-], and proceed as above */ + yyless(yyleng - 2); + return process_integer_literal(yytext, &base_yylval); + } +} /* */ + +{ +:{identifier}((("->"|\.){identifier})|(\[{array}\]))* { + base_yylval.str = mm_strdup(yytext+1); + return CVARIABLE; + } + +{identifier} { + if (!isdefine()) + { + int kwvalue; + + /* Is it an SQL/ECPG keyword? */ + kwvalue = ScanECPGKeywordLookup(yytext); + if (kwvalue >= 0) + return kwvalue; + + /* Is it a C keyword? */ + kwvalue = ScanCKeywordLookup(yytext); + if (kwvalue >= 0) + return kwvalue; + + /* + * None of the above. Return it as an identifier. + * + * The backend will attempt to truncate and case-fold + * the identifier, but I see no good reason for ecpg + * to do so; that's just another way that ecpg could get + * out of step with the backend. + */ + base_yylval.str = mm_strdup(yytext); + return IDENT; + } + } + +{other} { + return yytext[0]; + } +} /* */ + + /* + * Begin ECPG-specific rules + */ + +{exec_sql} { BEGIN(SQL); return SQL_START; } +{informix_special} { + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + BEGIN(SQL); + return SQL_START; + } + else + return S_ANYTHING; + } +{ccomment} { ECHO; } +{xch} { + char* endptr; + + errno = 0; + base_yylval.ival = strtoul((char *)yytext,&endptr,16); + if (*endptr != '\0' || errno == ERANGE) + { + errno = 0; + base_yylval.str = mm_strdup(yytext); + return SCONST; + } + return ICONST; + } +{cppinclude} { + if (system_includes) + { + include_next = false; + BEGIN(incl); + } + else + { + base_yylval.str = mm_strdup(yytext); + return CPP_LINE; + } + } +{cppinclude_next} { + if (system_includes) + { + include_next = true; + BEGIN(incl); + } + else + { + base_yylval.str = mm_strdup(yytext); + return CPP_LINE; + } + } +{cppline} { + base_yylval.str = mm_strdup(yytext); + return CPP_LINE; + } +{identifier} { + /* + * Try to detect a function name: + * look for identifiers at the global scope + * keep the last identifier before the first '(' and '{' + */ + if (braces_open == 0 && parenths_open == 0) + { + if (current_function) + free(current_function); + current_function = mm_strdup(yytext); + } + /* Informix uses SQL defines only in SQL space */ + /* however, some defines have to be taken care of for compatibility */ + if ((!INFORMIX_MODE || !isinformixdefine()) && !isdefine()) + { + int kwvalue; + + kwvalue = ScanCKeywordLookup(yytext); + if (kwvalue >= 0) + return kwvalue; + else + { + base_yylval.str = mm_strdup(yytext); + return IDENT; + } + } + } +{xcstop} { mmerror(PARSE_ERROR, ET_ERROR, "nested /* ... */ comments"); } +":" { return ':'; } +";" { return ';'; } +"," { return ','; } +"*" { return '*'; } +"%" { return '%'; } +"/" { return '/'; } +"+" { return '+'; } +"-" { return '-'; } +"(" { parenths_open++; return '('; } +")" { parenths_open--; return ')'; } +{space} { ECHO; } +\{ { return '{'; } +\} { return '}'; } +\[ { return '['; } +\] { return ']'; } +\= { return '='; } +"->" { return S_MEMBER; } +">>" { return S_RSHIFT; } +"<<" { return S_LSHIFT; } +"||" { return S_OR; } +"&&" { return S_AND; } +"++" { return S_INC; } +"--" { return S_DEC; } +"==" { return S_EQUAL; } +"!=" { return S_NEQUAL; } +"+=" { return S_ADD; } +"-=" { return S_SUB; } +"*=" { return S_MUL; } +"/=" { return S_DIV; } +"%=" { return S_MOD; } +"->*" { return S_MEMPOINT; } +".*" { return S_DOTPOINT; } +{other} { return S_ANYTHING; } +{exec_sql}{define}{space}* { BEGIN(def_ident); } +{informix_special}{define}{space}* { + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + BEGIN(def_ident); + } + else + { + yyless(1); + return S_ANYTHING; + } + } +{exec_sql}{undef}{space}* { BEGIN(undef); } +{informix_special}{undef}{space}* { + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + BEGIN(undef); + } + else + { + yyless(1); + return S_ANYTHING; + } + } +{identifier}{space}*";" { + struct _defines *ptr, *ptr2 = NULL; + int i; + + /* + * Skip the ";" and trailing whitespace. Note that yytext + * contains at least one non-space character plus the ";" + */ + for (i = strlen(yytext)-2; + i > 0 && ecpg_isspace(yytext[i]); + i-- ) + ; + yytext[i+1] = '\0'; + + + for (ptr = defines; ptr != NULL; ptr2 = ptr, ptr = ptr->next) + { + if (strcmp(yytext, ptr->olddef) == 0) + { + if (ptr2 == NULL) + defines = ptr->next; + else + ptr2->next = ptr->next; + free(ptr->newdef); + free(ptr->olddef); + free(ptr); + break; + } + } + + BEGIN(C); + } +{other}|\n { + mmfatal(PARSE_ERROR, "missing identifier in EXEC SQL UNDEF command"); + yyterminate(); + } +{exec_sql}{include}{space}* { BEGIN(incl); } +{informix_special}{include}{space}* { + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + BEGIN(incl); + } + else + { + yyless(1); + return S_ANYTHING; + } + } +{exec_sql}{ifdef}{space}* { + if (preproc_tos >= MAX_NESTED_IF-1) + mmfatal(PARSE_ERROR, "too many nested EXEC SQL IFDEF conditions"); + preproc_tos++; + stacked_if_value[preproc_tos].active = false; + stacked_if_value[preproc_tos].saw_active = false; + stacked_if_value[preproc_tos].else_branch = false; + ifcond = true; + BEGIN(xcond); + } +{informix_special}{ifdef}{space}* { + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + if (preproc_tos >= MAX_NESTED_IF-1) + mmfatal(PARSE_ERROR, "too many nested EXEC SQL IFDEF conditions"); + preproc_tos++; + stacked_if_value[preproc_tos].active = false; + stacked_if_value[preproc_tos].saw_active = false; + stacked_if_value[preproc_tos].else_branch = false; + ifcond = true; + BEGIN(xcond); + } + else + { + yyless(1); + return S_ANYTHING; + } + } +{exec_sql}{ifndef}{space}* { + if (preproc_tos >= MAX_NESTED_IF-1) + mmfatal(PARSE_ERROR, "too many nested EXEC SQL IFDEF conditions"); + preproc_tos++; + stacked_if_value[preproc_tos].active = false; + stacked_if_value[preproc_tos].saw_active = false; + stacked_if_value[preproc_tos].else_branch = false; + ifcond = false; + BEGIN(xcond); + } +{informix_special}{ifndef}{space}* { + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + if (preproc_tos >= MAX_NESTED_IF-1) + mmfatal(PARSE_ERROR, "too many nested EXEC SQL IFDEF conditions"); + preproc_tos++; + stacked_if_value[preproc_tos].active = false; + stacked_if_value[preproc_tos].saw_active = false; + stacked_if_value[preproc_tos].else_branch = false; + ifcond = false; + BEGIN(xcond); + } + else + { + yyless(1); + return S_ANYTHING; + } + } +{exec_sql}{elif}{space}* { + if (preproc_tos == 0) + mmfatal(PARSE_ERROR, "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\""); + if (stacked_if_value[preproc_tos].else_branch) + mmfatal(PARSE_ERROR, "missing \"EXEC SQL ENDIF;\""); + ifcond = true; + BEGIN(xcond); + } +{informix_special}{elif}{space}* { + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + if (preproc_tos == 0) + mmfatal(PARSE_ERROR, "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\""); + if (stacked_if_value[preproc_tos].else_branch) + mmfatal(PARSE_ERROR, "missing \"EXEC SQL ENDIF;\""); + ifcond = true; + BEGIN(xcond); + } + else + { + yyless(1); + return S_ANYTHING; + } + } + +{exec_sql}{else}{space}*";" { /* only exec sql endif pops the stack, so take care of duplicated 'else' */ + if ( preproc_tos == 0 ) + mmfatal(PARSE_ERROR, "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\""); + else if (stacked_if_value[preproc_tos].else_branch) + mmfatal(PARSE_ERROR, "more than one EXEC SQL ELSE"); + else + { + stacked_if_value[preproc_tos].else_branch = true; + stacked_if_value[preproc_tos].active = + (stacked_if_value[preproc_tos-1].active && + !stacked_if_value[preproc_tos].saw_active); + stacked_if_value[preproc_tos].saw_active = true; + + if (stacked_if_value[preproc_tos].active) + BEGIN(C); + else + BEGIN(xskip); + } + } +{informix_special}{else}{space}*";" { + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + if ( preproc_tos == 0 ) + mmfatal(PARSE_ERROR, "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\""); + else if (stacked_if_value[preproc_tos].else_branch) + mmfatal(PARSE_ERROR, "more than one EXEC SQL ELSE"); + else + { + stacked_if_value[preproc_tos].else_branch = true; + stacked_if_value[preproc_tos].active = + (stacked_if_value[preproc_tos-1].active && + !stacked_if_value[preproc_tos].saw_active); + stacked_if_value[preproc_tos].saw_active = true; + + if (stacked_if_value[preproc_tos].active) + BEGIN(C); + else + BEGIN(xskip); + } + } + else + { + yyless(1); + return S_ANYTHING; + } + } +{exec_sql}{endif}{space}*";" { + if (preproc_tos == 0) + mmfatal(PARSE_ERROR, "unmatched EXEC SQL ENDIF"); + else + preproc_tos--; + + if (stacked_if_value[preproc_tos].active) + BEGIN(C); + else + BEGIN(xskip); + } +{informix_special}{endif}{space}*";" { + /* are we simulating Informix? */ + if (INFORMIX_MODE) + { + if (preproc_tos == 0) + mmfatal(PARSE_ERROR, "unmatched EXEC SQL ENDIF"); + else + preproc_tos--; + + if (stacked_if_value[preproc_tos].active) + BEGIN(C); + else + BEGIN(xskip); + } + else + { + yyless(1); + return S_ANYTHING; + } + } + +{other} { /* ignore */ } + +{identifier}{space}*";" { + { + struct _defines *defptr; + unsigned int i; + bool this_active; + + /* + * Skip the ";" and trailing whitespace. Note that yytext + * contains at least one non-space character plus the ";" + */ + for (i = strlen(yytext)-2; + i > 0 && ecpg_isspace(yytext[i]); + i-- ) + ; + yytext[i+1] = '\0'; + + for (defptr = defines; + defptr != NULL && + strcmp(yytext, defptr->olddef) != 0; + defptr = defptr->next) + /* skip */ ; + + this_active = (defptr ? ifcond : !ifcond); + stacked_if_value[preproc_tos].active = + (stacked_if_value[preproc_tos-1].active && + !stacked_if_value[preproc_tos].saw_active && + this_active); + stacked_if_value[preproc_tos].saw_active |= this_active; + } + + if (stacked_if_value[preproc_tos].active) + BEGIN(C); + else + BEGIN(xskip); + } + +{other}|\n { + mmfatal(PARSE_ERROR, "missing identifier in EXEC SQL IFDEF command"); + yyterminate(); + } +{identifier} { + old = mm_strdup(yytext); + BEGIN(def); + startlit(); + } +{other}|\n { + mmfatal(PARSE_ERROR, "missing identifier in EXEC SQL DEFINE command"); + yyterminate(); + } +{space}*";" { + struct _defines *ptr, *this; + + for (ptr = defines; ptr != NULL; ptr = ptr->next) + { + if (strcmp(old, ptr->olddef) == 0) + { + free(ptr->newdef); + ptr->newdef = mm_strdup(literalbuf); + } + } + if (ptr == NULL) + { + this = (struct _defines *) mm_alloc(sizeof(struct _defines)); + + /* initial definition */ + this->olddef = old; + this->newdef = mm_strdup(literalbuf); + this->next = defines; + this->used = NULL; + defines = this; + } + + BEGIN(C); + } +[^;] { addlit(yytext, yyleng); } +\<[^\>]+\>{space}*";"? { parse_include(); } +{dquote}{xdinside}{dquote}{space}*";"? { parse_include(); } +[^;\<\>\"]+";" { parse_include(); } +{other}|\n { + mmfatal(PARSE_ERROR, "syntax error in EXEC SQL INCLUDE command"); + yyterminate(); + } + +<> { + if (yy_buffer == NULL) + { + if ( preproc_tos > 0 ) + { + preproc_tos = 0; + mmfatal(PARSE_ERROR, "missing \"EXEC SQL ENDIF;\""); + } + yyterminate(); + } + else + { + struct _yy_buffer *yb = yy_buffer; + int i; + struct _defines *ptr; + + for (ptr = defines; ptr; ptr = ptr->next) + if (ptr->used == yy_buffer) + { + ptr->used = NULL; + break; + } + + if (yyin != NULL) + fclose(yyin); + + yy_delete_buffer( YY_CURRENT_BUFFER ); + yy_switch_to_buffer(yy_buffer->buffer); + + yylineno = yy_buffer->lineno; + + /* We have to output the filename only if we change files here */ + i = strcmp(input_filename, yy_buffer->filename); + + free(input_filename); + input_filename = yy_buffer->filename; + + yy_buffer = yy_buffer->next; + free(yb); + + if (i != 0) + output_line_number(); + + } + } + +{other}|\n { mmfatal(PARSE_ERROR, "internal error: unreachable state; please report this to <%s>", PACKAGE_BUGREPORT); } + +%% + +/* LCOV_EXCL_STOP */ + +void +lex_init(void) +{ + braces_open = 0; + parenths_open = 0; + current_function = NULL; + + yylineno = 1; + + /* initialize state for if/else/endif */ + preproc_tos = 0; + stacked_if_value[preproc_tos].active = true; + stacked_if_value[preproc_tos].saw_active = true; + stacked_if_value[preproc_tos].else_branch = false; + + /* initialize literal buffer to a reasonable but expansible size */ + if (literalbuf == NULL) + { + literalalloc = 1024; + literalbuf = (char *) mm_alloc(literalalloc); + } + startlit(); + + BEGIN(C); +} + +static void +addlit(char *ytext, int yleng) +{ + /* enlarge buffer if needed */ + if ((literallen+yleng) >= literalalloc) + { + do + literalalloc *= 2; + while ((literallen+yleng) >= literalalloc); + literalbuf = (char *) realloc(literalbuf, literalalloc); + } + /* append new data, add trailing null */ + memcpy(literalbuf+literallen, ytext, yleng); + literallen += yleng; + literalbuf[literallen] = '\0'; +} + +static void +addlitchar(unsigned char ychar) +{ + /* enlarge buffer if needed */ + if ((literallen+1) >= literalalloc) + { + literalalloc *= 2; + literalbuf = (char *) realloc(literalbuf, literalalloc); + } + /* append new data, add trailing null */ + literalbuf[literallen] = ychar; + literallen += 1; + literalbuf[literallen] = '\0'; +} + +/* + * Process {integer}. Note this will also do the right thing with {decimal}, + * ie digits and a decimal point. + */ +static int +process_integer_literal(const char *token, YYSTYPE *lval) +{ + int val; + char *endptr; + + errno = 0; + val = strtoint(token, &endptr, 10); + if (*endptr != '\0' || errno == ERANGE) + { + /* integer too large (or contains decimal pt), treat it as a float */ + lval->str = mm_strdup(token); + return FCONST; + } + lval->ival = val; + return ICONST; +} + +static void +parse_include(void) +{ + /* got the include file name */ + struct _yy_buffer *yb; + struct _include_path *ip; + char inc_file[MAXPGPATH]; + unsigned int i; + + yb = mm_alloc(sizeof(struct _yy_buffer)); + + yb->buffer = YY_CURRENT_BUFFER; + yb->lineno = yylineno; + yb->filename = input_filename; + yb->next = yy_buffer; + + yy_buffer = yb; + + /* + * skip the ";" if there is one and trailing whitespace. Note that + * yytext contains at least one non-space character plus the ";" + */ + for (i = strlen(yytext)-2; + i > 0 && ecpg_isspace(yytext[i]); + i--) + ; + + if (yytext[i] == ';') + i--; + + yytext[i+1] = '\0'; + + yyin = NULL; + + /* If file name is enclosed in '"' remove these and look only in '.' */ + /* Informix does look into all include paths though, except filename starts with '/' */ + if (yytext[0] == '"' && yytext[i] == '"' && + ((compat != ECPG_COMPAT_INFORMIX && compat != ECPG_COMPAT_INFORMIX_SE) || yytext[1] == '/')) + { + yytext[i] = '\0'; + memmove(yytext, yytext+1, strlen(yytext)); + + strlcpy(inc_file, yytext, sizeof(inc_file)); + yyin = fopen(inc_file, "r"); + if (!yyin) + { + if (strlen(inc_file) <= 2 || strcmp(inc_file + strlen(inc_file) - 2, ".h") != 0) + { + strcat(inc_file, ".h"); + yyin = fopen(inc_file, "r"); + } + } + + } + else + { + if ((yytext[0] == '"' && yytext[i] == '"') || (yytext[0] == '<' && yytext[i] == '>')) + { + yytext[i] = '\0'; + memmove(yytext, yytext+1, strlen(yytext)); + } + + for (ip = include_paths; yyin == NULL && ip != NULL; ip = ip->next) + { + if (strlen(ip->path) + strlen(yytext) + 4 > MAXPGPATH) + { + fprintf(stderr, _("Error: include path \"%s/%s\" is too long on line %d, skipping\n"), ip->path, yytext, yylineno); + continue; + } + snprintf (inc_file, sizeof(inc_file), "%s/%s", ip->path, yytext); + yyin = fopen(inc_file, "r"); + if (!yyin) + { + if (strcmp(inc_file + strlen(inc_file) - 2, ".h") != 0) + { + strcat(inc_file, ".h"); + yyin = fopen( inc_file, "r" ); + } + } + /* if the command was "include_next" we have to disregard the first hit */ + if (yyin && include_next) + { + fclose (yyin); + yyin = NULL; + include_next = false; + } + } + } + if (!yyin) + mmfatal(NO_INCLUDE_FILE, "could not open include file \"%s\" on line %d", yytext, yylineno); + + input_filename = mm_strdup(inc_file); + yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE )); + yylineno = 1; + output_line_number(); + + BEGIN(C); +} + +/* + * ecpg_isspace() --- return true if flex scanner considers char whitespace + */ +static bool +ecpg_isspace(char ch) +{ + if (ch == ' ' || + ch == '\t' || + ch == '\n' || + ch == '\r' || + ch == '\f') + return true; + return false; +} + +static bool isdefine(void) +{ + struct _defines *ptr; + + /* is it a define? */ + for (ptr = defines; ptr; ptr = ptr->next) + { + if (strcmp(yytext, ptr->olddef) == 0 && ptr->used == NULL) + { + struct _yy_buffer *yb; + + yb = mm_alloc(sizeof(struct _yy_buffer)); + + yb->buffer = YY_CURRENT_BUFFER; + yb->lineno = yylineno; + yb->filename = mm_strdup(input_filename); + yb->next = yy_buffer; + + ptr->used = yy_buffer = yb; + + yy_scan_string(ptr->newdef); + return true; + } + } + + return false; +} + +static bool isinformixdefine(void) +{ + const char *new = NULL; + + if (strcmp(yytext, "dec_t") == 0) + new = "decimal"; + else if (strcmp(yytext, "intrvl_t") == 0) + new = "interval"; + else if (strcmp(yytext, "dtime_t") == 0) + new = "timestamp"; + + if (new) + { + struct _yy_buffer *yb; + + yb = mm_alloc(sizeof(struct _yy_buffer)); + + yb->buffer = YY_CURRENT_BUFFER; + yb->lineno = yylineno; + yb->filename = mm_strdup(input_filename); + yb->next = yy_buffer; + yy_buffer = yb; + + yy_scan_string(new); + return true; + } + + return false; +} diff --git a/src/interfaces/ecpg/preproc/po/cs.po b/src/interfaces/ecpg/preproc/po/cs.po new file mode 100644 index 0000000..0112bad --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/cs.po @@ -0,0 +1,695 @@ +# Czech message translation file for ecpg +# Copyright (C) 2012 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# +# Tomáš Vondra , 2012, 2013. +msgid "" +msgstr "" +"Project-Id-Version: ecpg-cs (PostgreSQL 9.3)\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-10-31 16:09+0000\n" +"PO-Revision-Date: 2021-09-16 09:06+0200\n" +"Last-Translator: Tomas Vondra \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Poedit 2.4.1\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "proměnná \"%s\" musí mít číselný typ" + +#: descriptor.c:124 descriptor.c:146 +#, c-format +msgid "descriptor \"%s\" does not exist" +msgstr "descriptor \"%s\" neexistuje" + +#: descriptor.c:161 descriptor.c:213 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "descriptor header item \"%d\" neexistuje" + +#: descriptor.c:183 +#, c-format +msgid "nullable is always 1" +msgstr "nullable je vždy 1" + +#: descriptor.c:186 +#, c-format +msgid "key_member is always 0" +msgstr "key_member je vždy 0" + +#: descriptor.c:280 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "descriptor item \"%s\" není implementován" + +#: descriptor.c:290 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "descriptor item \"%s\" nelze nastavit" + +#: ecpg.c:35 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s je PostgreSQL preprocesor vloženého SQL pro C programy.\n" +"\n" + +#: ecpg.c:37 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Použití:\n" +" %s [VOLBA]... SOUBOR...\n" +"\n" + +#: ecpg.c:40 +#, c-format +msgid "Options:\n" +msgstr "Volby:\n" + +#: ecpg.c:41 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c automaticky generuje C kód z vložných SQL příkazů;\n" +" toto ovlivňuje EXEC SQL TYPE\n" + +#: ecpg.c:43 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MÓD nastaví mód kompatibility; MÓD může být jedno z \n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" + +#: ecpg.c:46 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d zapne generování ladicích informací parseru\n" + +#: ecpg.c:48 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL definuje SYMBOL\n" + +#: ecpg.c:49 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h naparsuje hlavičkový soubor, tato volba zahrnuje volbu \"-c\"\n" + +#: ecpg.c:50 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i naparsuje také systémové hlavičkové soubory\n" + +#: ecpg.c:51 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I ADRESÁŘ vyhledá include soubory v ADRESÁŘi\n" + +#: ecpg.c:52 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o SOUBOR zapíše výsledek do SOUBORu\n" + +#: ecpg.c:53 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r VOLBA určuje run-time chování; VOLBA může být:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" + +#: ecpg.c:55 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression běh v módu regresních testů\n" + +#: ecpg.c:56 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t zapne autocommit transakcí\n" + +#: ecpg.c:57 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version vypíše informaci o verzi, poté skončí\n" + +#: ecpg.c:58 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help zobrazí tuto nápovědu; poté skončí\n" + +#: ecpg.c:59 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Pokud není zadán žádný výstupní soubor, je jméno získáno přidáním .c\n" +"na konec jména vstupního souboru, po odstranění koncovky .pgc pokud\n" +"je přítomna.\n" + +#: ecpg.c:61 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Chyby hlašte na <%s>.\n" + +#: ecpg.c:62 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" + +#: ecpg.c:140 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: nelze nalézt cestu k vlastnímu spustitelnému souboru\n" + +#: ecpg.c:175 ecpg.c:332 ecpg.c:343 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: nelze otevřít soubor \"%s\": %s\n" + +#: ecpg.c:218 ecpg.c:231 ecpg.c:247 ecpg.c:273 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Zkuste \"%s --help\" pro více informací.\n" + +#: ecpg.c:242 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: podpora pro ladicí informace parseru (-d) není dostupná\n" + +#: ecpg.c:261 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, PostgreSQL embedded C preprocessor, verze %s\n" + +#: ecpg.c:263 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... hledání začíná zde:\n" + +#: ecpg.c:266 +#, c-format +msgid "end of search list\n" +msgstr "konec vyhledávacího seznamu\n" + +#: ecpg.c:272 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: nebyl zadán žádný vstupní soubor\n" + +#: ecpg.c:466 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "kurzor \"%s\" byl deklarován ale nebyl otevřen" + +#: ecpg.c:479 preproc.y:128 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "nelze odstranit výstupní soubor \"%s\"\n" + +#: pgc.l:502 +#, c-format +msgid "unterminated /* comment" +msgstr "neukončený /* komentář" + +#: pgc.l:519 +#, c-format +msgid "unterminated bit string literal" +msgstr "neukončený literál - bitový řetězec" + +#: pgc.l:527 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "neukončený literál - hexadecimální řetězec" + +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "neplatný bit string literál" + +#: pgc.l:623 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "neošetřený předchozí stav v xqs\n" + +#: pgc.l:652 pgc.l:754 +#, c-format +msgid "unterminated quoted string" +msgstr "neukončený řetězec v uvozovkách" + +#: pgc.l:703 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "neukončený dollar-quoted řetězec" + +#: pgc.l:721 pgc.l:734 +#, c-format +msgid "zero-length delimited identifier" +msgstr "ohraničený (delimited) identifikátor s nulovou délkou" + +#: pgc.l:745 +#, c-format +msgid "unterminated quoted identifier" +msgstr "neukončený identifikátor v uvozovkách" + +#: pgc.l:1076 +#, c-format +msgid "nested /* ... */ comments" +msgstr "vnořené /* ... */ komentáře" + +#: pgc.l:1169 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "chybějící identifikátor v příkazu EXEC SQL UNDEF" + +#: pgc.l:1187 pgc.l:1200 pgc.l:1216 pgc.l:1229 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "příliš mnoho zanořených EXEC SQL IFDEF podmínek" + +#: pgc.l:1245 pgc.l:1256 pgc.l:1271 pgc.l:1293 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "chybějící odpovídající \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" + +#: pgc.l:1247 pgc.l:1258 pgc.l:1439 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "chybějící \"EXEC SQL ENDIF;\"" + +#: pgc.l:1273 pgc.l:1295 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "více než jedna větev EXEC SQL ELSE" + +#: pgc.l:1318 pgc.l:1332 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "neodpovídající EXEC SQL ENDIF" + +#: pgc.l:1387 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "chybějící identifikátor v příkazu EXEC SQL IFDEF" + +#: pgc.l:1396 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "chybějící identifikátor v příkazu EXEC SQL DEFINE" + +#: pgc.l:1429 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "syntaktická chyba v příkazu EXEC SQL INCLUDE" + +#: pgc.l:1479 +#, c-format +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "interní chyba: nedosažitelný stav; oznamte toto prosím na <%s>" + +#: pgc.l:1631 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Chyba: include path \"%s/%s\" na řádku %d je příliš dlouhá, přeskakuji\n" + +#: pgc.l:1654 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "nelze otevřít soubor \"%s\" na řádku %d" + +#: preproc.y:31 +msgid "syntax error" +msgstr "syntaktická chyba" + +#: preproc.y:82 +#, c-format +msgid "WARNING: " +msgstr "VAROVÁNÍ: " + +#: preproc.y:85 +#, c-format +msgid "ERROR: " +msgstr "CHYBA: " + +#: preproc.y:512 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "kurzor \"%s\" neexistuje" + +#: preproc.y:541 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "inicializátor (initializer) není v definici typu povolen" + +#: preproc.y:543 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "název typu \"string\" je vyhrazen pro mód Informix" + +#: preproc.y:550 preproc.y:15960 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "typ \"%s\" je již definován" + +#: preproc.y:575 preproc.y:16603 preproc.y:16928 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "vícerozměrná pole pro jednoduché datové typy nejsou podporována" + +#: preproc.y:1704 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "AT volba není v příkazu CLOSE DATABASE povolena" + +#: preproc.y:1952 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "AT volba není v příkazu CONNECT povolena" + +#: preproc.y:1986 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "AT volba není v příkazu DISCONNECT povolena" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "AT volba není v příkazu SET CONNECTION povolena" + +#: preproc.y:2063 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "AT volba není v příkazu TYPE povolena" + +#: preproc.y:2072 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "AT volba není v příkazu VAR povolena" + +#: preproc.y:2079 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "AT volba není v příkazu WHENEVER povolena" + +#: preproc.y:2156 preproc.y:2328 preproc.y:2333 preproc.y:2456 preproc.y:4034 +#: preproc.y:4682 preproc.y:5624 preproc.y:5924 preproc.y:7542 preproc.y:9081 +#: preproc.y:9086 preproc.y:11921 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "nepodporovaná vlastnost bude předána serveru" + +#: preproc.y:2714 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "příkaz SHOW ALL není implementován" + +#: preproc.y:3382 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "příkaz COPY FROM STDIN není implementován" + +#: preproc.y:10060 preproc.y:15545 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "použití proměnné \"%s\" v dalších deklaracích není podporováno" + +#: preproc.y:10062 preproc.y:15547 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "kurzor \"%s\" je již definován" + +#: preproc.y:10502 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "již neopdporovaná syntaxe LIMIT #,# předána serveru" + +#: preproc.y:10835 preproc.y:10842 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "poddotaz ve FROM musí mít alias" + +#: preproc.y:15268 preproc.y:15275 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS nemůže specifikovat INTO" + +#: preproc.y:15311 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "očekáváno \"@\", nalezeno \"%s\"" + +#: preproc.y:15323 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "podporovány jsou pouze protokoly \"tcp\" a \"unix\" a typ databáze \"postgresql\"" + +#: preproc.y:15326 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "očekáváno \"://\", nalezeno \"%s\"" + +#: preproc.y:15331 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Unixové sockety fungují pouze na \"localhost\" ale ne na \"%s\"" + +#: preproc.y:15357 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "očekáváno \"postgresql\", nalezeno \"%s\"" + +#: preproc.y:15360 +#, c-format +msgid "invalid connection type: %s" +msgstr "chybný typ spojení: %s" + +#: preproc.y:15369 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "očekáváno \"@\" nebo \"://\", nalezeno \"%s\"" + +#: preproc.y:15444 preproc.y:15462 +#, c-format +msgid "invalid data type" +msgstr "chybný datový typ" + +#: preproc.y:15473 preproc.y:15490 +#, c-format +msgid "incomplete statement" +msgstr "neúplný příkaz" + +#: preproc.y:15476 preproc.y:15493 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "nerozpoznaný token \"%s\"" + +#: preproc.y:15763 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "pouze datové typy numeric a decimal mají argumenty přesnost/velikost" + +#: preproc.y:15775 +#, c-format +msgid "interval specification not allowed here" +msgstr "specifikace intervalu zde není povolena" + +#: preproc.y:15935 preproc.y:15987 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "příliš mnoho úrovní v definici vnořené struktury/union" + +#: preproc.y:16110 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "ukazatele na varchar nejsou implementovány" + +#: preproc.y:16297 preproc.y:16322 +#, c-format +msgid "using unsupported DESCRIBE statement" +msgstr "použití nepodporovaného příkazu DESCRIBE" + +#: preproc.y:16569 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "inicializátor není v příkazu EXEC SQL VAR podporován" + +#: preproc.y:16886 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "pole identifikátorů nejsou na vstupu povolena" + +#: preproc.y:17073 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "operátor není povolen v definici proměnné" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:17114 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s na nebo blízko \"%s\"" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "paměť vyčerpána" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "nerozpoznaný kód typu proměnné %d" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "proměnná \"%s\" je překryta lokální proměnnou s jiným datovým typem" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "proměnná \"%s\" je překryta lokální proměnnou" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "indicator variable \"%s\" je překryta lokální proměnnou s jiným datovým typem" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "indicator variable \"%s\" je překryta lokální proměnnou" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "indicator variable pro pole/ukaztel musí být pole/ukazatel" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "vnořená pole nejsou podporována (kromě řetězců)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "indikátor pro strukturu musí být struktura" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "indikátor pro jednoduché datové typy musí být jednoduchý" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "indikátor pro strukturu \"%s\" má příliš málo položek" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "indikátor pro strukturu \"%s\" má příliš mnoho položek" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "nerozpoznaný kód deskriptoru položky %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "nesprávně vytvořený název proměnné \"%s\"" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "proměnná \"%s\" není ukazatel" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "proměnná \"%s\" není ukazatel na strukturu nebo sjednocení" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "proměnná \"%s\" není ani struktura ani sjednocení" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "proměnná \"%s\" není pole" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "proměnná \"%s\" není deklarována" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "indicator variable musí mít celočíselný typ" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "nerozpoznaný název datového typu \"%s\"" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "vícerozměrná pole nejsou podporována" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "víceúrovňové ukazatele (více než 2 úrovně) nejsou podporovány; nalezena %d úroveň" +msgstr[1] "víceúrovňové ukazatele (více než 2 úrovně) nejsou podporovány; nalezeny %d úrovně" +msgstr[2] "víceúrovňové ukazatele (více než 2 úrovně) nejsou podporovány; nalezeny %d úrovně" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "ukazatel na ukazatel není pro tento datový typ podporován" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "vícerozměrná pole pro struktury nejsou podporována" + +#~ msgid "COPY TO STDIN is not possible" +#~ msgstr "příkaz COPY TO STDIN nelze použít" + +#~ msgid "COPY FROM STDOUT is not possible" +#~ msgstr "příkaz COPY FROM STDOUT nelze použít" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu .\n" diff --git a/src/interfaces/ecpg/preproc/po/de.po b/src/interfaces/ecpg/preproc/po/de.po new file mode 100644 index 0000000..caadb67 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/de.po @@ -0,0 +1,700 @@ +# German message translation file for ecpg +# Copyright (C) 2009-2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# +# Use these quotes: »%s« +# +msgid "" +msgstr "" +"Project-Id-Version: PostgreSQL 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-09-16 09:39+0000\n" +"PO-Revision-Date: 2021-09-16 14:00+0200\n" +"Last-Translator: Peter Eisentraut \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "Variable »%s« muss einen numerischen Typ haben" + +#: descriptor.c:125 descriptor.c:156 +#, c-format +msgid "descriptor %s bound to connection %s does not exist" +msgstr "Deskriptor %s gebunden an Verbindung %s existiert nicht" + +#: descriptor.c:127 descriptor.c:158 +#, c-format +msgid "descriptor %s bound to the default connection does not exist" +msgstr "Deskriptor %s gebunden an die Standardverbindung existiert nicht" + +#: descriptor.c:173 descriptor.c:225 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "Deskriptorkopfelement »%d« existiert nicht" + +#: descriptor.c:195 +#, c-format +msgid "nullable is always 1" +msgstr "nullable ist immer 1" + +#: descriptor.c:198 +#, c-format +msgid "key_member is always 0" +msgstr "key_member ist immer 0" + +#: descriptor.c:292 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "Deskriptorelement »%s« ist nicht implementiert" + +#: descriptor.c:302 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "Deskriptorelement »%s« kann nicht gesetzt werden" + +#: ecpg.c:36 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s ist der Embedded-SQL-Präprozessor von PostgreSQL für C-Programme.\n" +"\n" + +#: ecpg.c:38 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Aufruf:\n" +" %s [OPTION]... DATEI...\n" +"\n" + +#: ecpg.c:41 +#, c-format +msgid "Options:\n" +msgstr "Optionen:\n" + +#: ecpg.c:42 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c automatisch C-Code aus eingebettetem SQL-Code erzeugen;\n" +" betrifft EXEC SQL TYPE\n" + +#: ecpg.c:44 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MODUS Kompatibilitätsmodus setzen; MODUS kann sein:\n" +" »INFORMIX«, »INFORMIX_SE«, »ORACLE«\n" + +#: ecpg.c:47 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d Parser-Debug-Ausgabe erzeugen\n" + +#: ecpg.c:49 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL SYMBOL definieren\n" + +#: ecpg.c:50 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h eine Headerdatei parsen, schließt Option »-c« ein\n" + +#: ecpg.c:51 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i Systemheaderdateien ebenfalls parsen\n" + +#: ecpg.c:52 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I VERZ VERZ nach Include-Dateien durchsuchen\n" + +#: ecpg.c:53 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o DATEI Ausgabe in DATEI schreiben\n" + +#: ecpg.c:54 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPTION Laufzeitverhalten bestimmen; OPTION kann sein:\n" +" »no_indicator«, »prepare«, »questionmarks«\n" + +#: ecpg.c:56 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression Regressiontestmodus verwenden\n" + +#: ecpg.c:57 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t Autocommit von Transaktionen anschalten\n" + +#: ecpg.c:58 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" + +#: ecpg.c:59 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" + +#: ecpg.c:60 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Wenn keine Ausgabedatei angegeben ist, dann wird .c an den Namen der\n" +"Eingabedatei angehängt und vorher .pgc, falls vorhanden, entfernt.\n" + +#: ecpg.c:62 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Berichten Sie Fehler an <%s>.\n" + +#: ecpg.c:63 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s Homepage: <%s>\n" + +#: ecpg.c:141 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: konnte Pfad des eigenen Programs nicht finden\n" + +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: konnte Datei »%s« nicht öffnen: %s\n" + +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" + +#: ecpg.c:243 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: Unterstützung für Parserdebugging (-d) nicht verfügbar\n" + +#: ecpg.c:262 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, der PostgreSQL-Embedded-C-Präprozessor, Version %s\n" + +#: ecpg.c:264 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... Suche beginnt hier:\n" + +#: ecpg.c:267 +#, c-format +msgid "end of search list\n" +msgstr "Ende der Suchliste\n" + +#: ecpg.c:273 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: keine Eingabedateien angegeben\n" + +#: ecpg.c:477 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "Cursor »%s« wurde deklariert aber nicht geöffnet" + +#: ecpg.c:490 preproc.y:130 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "konnte Ausgabedatei »%s« nicht entfernen\n" + +#: pgc.l:502 +#, c-format +msgid "unterminated /* comment" +msgstr "/*-Kommentar nicht abgeschlossen" + +#: pgc.l:519 +#, c-format +msgid "unterminated bit string literal" +msgstr "Bitkettenkonstante nicht abgeschlossen" + +#: pgc.l:527 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "hexadezimale Zeichenkette nicht abgeschlossen" + +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "ungültige Bitkettenkonstante" + +#: pgc.l:607 +#, c-format +msgid "invalid hex string literal" +msgstr "ungültige hexadezimale Zeichenkettenkonstante" + +#: pgc.l:625 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "unbehandelter vorheriger Zustand in xqs\n" + +#: pgc.l:651 pgc.l:760 +#, c-format +msgid "unterminated quoted string" +msgstr "Zeichenkette in Anführungszeichen nicht abgeschlossen" + +#: pgc.l:702 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "Dollar-Quotes nicht abgeschlossen" + +#: pgc.l:720 pgc.l:740 +#, c-format +msgid "zero-length delimited identifier" +msgstr "Bezeichner in Anführungszeichen hat Länge null" + +#: pgc.l:751 +#, c-format +msgid "unterminated quoted identifier" +msgstr "Bezeichner in Anführungszeichen nicht abgeschlossen" + +#: pgc.l:1082 +#, c-format +msgid "nested /* ... */ comments" +msgstr "geschachtelte /* ... */-Kommentare" + +#: pgc.l:1175 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "fehlender Bezeichner im Befehl EXEC SQL UNDEF" + +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "zu viele verschachtelte EXEC SQL IFDEF-Bedingungen" + +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "passendes »EXEC SQL IFDEF« / »EXEC SQL IFNDEF« fehlt" + +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "»EXEC SQL ENDIF;« fehlt" + +#: pgc.l:1279 pgc.l:1301 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "mehr als ein EXEC SQL ENDIF" + +#: pgc.l:1324 pgc.l:1338 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "unzusammenhängendes EXEC SQL ENDIF" + +#: pgc.l:1393 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "fehlender Bezeichner im Befehl EXEC SQL IFDEF" + +#: pgc.l:1402 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "fehlender Bezeichner im Befehl EXEC SQL DEFINE" + +#: pgc.l:1435 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "Syntaxfehler im Befehl EXEC SQL INCLUDE" + +#: pgc.l:1485 +#, c-format +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "interner Fehler: unerreichbarer Zustand; bitte an <%s> berichten" + +#: pgc.l:1637 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Fehler: Include-Pfad »%s/%s« ist zu lang auf Zeile %d, wird übersprungen\n" + +#: pgc.l:1660 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "konnte Include-Datei »%s« nicht öffnen auf Zeile %d" + +#: preproc.y:31 +msgid "syntax error" +msgstr "Syntaxfehler" + +#: preproc.y:84 +#, c-format +msgid "WARNING: " +msgstr "WARNUNG: " + +#: preproc.y:87 +#, c-format +msgid "ERROR: " +msgstr "FEHLER: " + +#: preproc.y:514 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "Cursor »%s« existiert nicht" + +#: preproc.y:543 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "Initialisierungswert nicht erlaubt in Typdefinition" + +#: preproc.y:545 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "Typname »string« ist im Informix-Modus reserviert" + +#: preproc.y:552 preproc.y:17675 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "Typ »%s« ist bereits definiert" + +#: preproc.y:577 preproc.y:18310 preproc.y:18635 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "mehrdimensionale Arrays für einfache Datentypen werden nicht unterstützt" + +#: preproc.y:599 +#, c-format +msgid "connection %s is overwritten with %s by DECLARE statement %s" +msgstr "Verbindung %s wird mit %s überschrieben, durch DECLARE-Anweisung %s" + +#: preproc.y:1753 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "AT-Option ist nicht erlaubt im Befehl CLOSE DATABASE" + +#: preproc.y:2001 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "AT-Option ist nicht erlaubt im Befehl CONNECT" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "AT-Option ist nicht erlaubt im Befehl DISCONNECT" + +#: preproc.y:2096 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "AT-Option ist nicht erlaubt im Befehl SET CONNECTION" + +#: preproc.y:2118 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "AT-Option ist nicht erlaubt im TYPE-Befehl" + +#: preproc.y:2127 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "AT-Option ist nicht erlaubt im VAR-Befehl" + +#: preproc.y:2134 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "AT-Option ist nicht erlaubt im WHENEVER-Befehl" + +#: preproc.y:2211 preproc.y:2383 preproc.y:2388 preproc.y:2511 preproc.y:4143 +#: preproc.y:4807 preproc.y:5340 preproc.y:5678 preproc.y:5978 preproc.y:7514 +#: preproc.y:9082 preproc.y:9087 preproc.y:11915 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "nicht mehr unterstütztes Feature wird an Server weitergereicht werden" + +#: preproc.y:2769 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL ist nicht implementiert" + +#: preproc.y:3464 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN ist nicht implementiert" + +#: preproc.y:10014 preproc.y:17250 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "»database« kann im INFORMIX-Modus nicht als Cursorname verwendet werden" + +#: preproc.y:10021 preproc.y:17260 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "Verwendung der Variable »%s« in verschiedenen DECLARE-Anweisungen wird nicht unterstützt" + +#: preproc.y:10023 preproc.y:17262 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "Cursor »%s« ist bereits definiert" + +#: preproc.y:10497 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "nicht mehr unterstützte Syntax LIMIT x,y wird an Server weitergereicht" + +#: preproc.y:10830 preproc.y:10837 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "Unteranfrage in FROM muss Aliasnamen erhalten" + +#: preproc.y:16942 preproc.y:16949 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS kann INTO nicht verwenden" + +#: preproc.y:16985 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "»@« erwartet, »%s« gefunden" + +#: preproc.y:16997 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "er werden nur die Protokolle »tcp« und »unix« und der Datenbanktyp »postgresql« unterstützt" + +#: preproc.y:17000 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "»://« erwartet, »%s« gefunden" + +#: preproc.y:17005 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Unix-Domain-Sockets funktionieren nur mit »localhost«, aber nicht mit »%s«" + +#: preproc.y:17031 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "»postgresql« erwartet, »%s« gefunden" + +#: preproc.y:17034 +#, c-format +msgid "invalid connection type: %s" +msgstr "ungültiger Verbindungstyp: %s" + +#: preproc.y:17043 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "»@« oder »://« erwartet, »%s« gefunden" + +#: preproc.y:17118 preproc.y:17136 +#, c-format +msgid "invalid data type" +msgstr "ungültiger Datentyp" + +#: preproc.y:17147 preproc.y:17164 +#, c-format +msgid "incomplete statement" +msgstr "unvollständige Anweisung" + +#: preproc.y:17150 preproc.y:17167 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "nicht erkanntes Token »%s«" + +#: preproc.y:17212 +#, c-format +msgid "name \"%s\" is already declared" +msgstr "Name »%s« ist bereits deklariert" + +#: preproc.y:17478 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "nur die Datentypen NUMERIC und DECIMAL haben Argumente für Präzision und Skala" + +#: preproc.y:17490 +#, c-format +msgid "interval specification not allowed here" +msgstr "Intervallangabe hier nicht erlaubt" + +#: preproc.y:17650 preproc.y:17702 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "zu viele Ebenen in verschachtelter Definition von Struktur/Union" + +#: preproc.y:17825 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "Zeiger auf varchar sind nicht implementiert" + +#: preproc.y:18276 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "Initialisierungswert nicht erlaubt in Befehl EXEC SQL VAR" + +#: preproc.y:18593 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "Array aus Indikatoren bei der Eingabe nicht erlaubt" + +#: preproc.y:18780 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "Operator nicht erlaubt in Variablendefinition" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:18821 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s bei »%s«" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "Speicher aufgebraucht" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "unbekannter Variablentypcode %d" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "Variable »%s« wird durch eine lokale Variable eines anderen Typs versteckt" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "Variable »%s« wird durch eine lokale Variable versteckt" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "Indikatorvariable »%s« wird durch eine lokale Variable eines anderen Typs versteckt" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "Indikatorvariable »%s« wird durch eine lokale Variable versteckt" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "Indikator für Array/Zeiger muss Array/Zeiger sein" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "verschachtelte Arrays werden nicht unterstützt (außer Zeichenketten)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "Indikator für struct muss ein struct sein" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "Indikator für einfachen Typ muss einfachen Typ haben" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "Indikator-Struct »%s« hat zu wenige Mitglieder" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "Indikator-Struct »%s« hat zu viele Mitglieder" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "unbekannter Deskriptorelementcode %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "falsch geformte Variable »%s«" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "Variable »%s« ist kein Zeiger" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "Variable »%s« ist kein Zeiger auf eine Struktur oder Union" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "Variable »%s« ist keine Struktur oder Union" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "Variable »%s« ist kein Array" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "Variable »%s« ist nicht deklariert" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "Indikatorvariable muss einen ganzzahligen Typ haben" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "unbekannter Datentypname »%s«" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "mehrdimensionale Arrays werden nicht unterstützt" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "Zeiger mit mehr als 2 Ebenen werden nicht unterstützt; %d Ebene gefunden" +msgstr[1] "Zeiger mit mehr als 2 Ebenen werden nicht unterstützt; %d Ebenen gefunden" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "Zeiger auf Zeiger wird für diesen Datentyp nicht unterstützt" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "mehrdimensionale Arrays für Strukturen werden nicht unterstützt" diff --git a/src/interfaces/ecpg/preproc/po/el.po b/src/interfaces/ecpg/preproc/po/el.po new file mode 100644 index 0000000..e0e1d55 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/el.po @@ -0,0 +1,700 @@ +# Greek message translation file for ecpg +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the ecpg (PostgreSQL) package. +# Georgios Kokolatos , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: ecpg (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-11-03 18:09+0000\n" +"PO-Revision-Date: 2021-11-05 11:17+0100\n" +"Last-Translator: Georgios Kokolatos \n" +"Language-Team: \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 3.0\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "η μεταβλητή «%s» πρέπει να έχει αριθμητικό τύπο" + +#: descriptor.c:125 descriptor.c:156 +#, c-format +msgid "descriptor %s bound to connection %s does not exist" +msgstr "ο περιγραφέας %s δεσμευμένος στη σύνδεση %s δεν υπάρχει" + +#: descriptor.c:127 descriptor.c:158 +#, c-format +msgid "descriptor %s bound to the default connection does not exist" +msgstr "ο περιγραφέας %s δεσμευμένος στη προεπιλεγμένη σύνδεση δεν υπάρχει" + +#: descriptor.c:173 descriptor.c:225 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "ο περιγραφέας στοιχείου κεφαλίδας «%d» δεν υπάρχει" + +#: descriptor.c:195 +#, c-format +msgid "nullable is always 1" +msgstr "nullable είναι πάντα 1" + +#: descriptor.c:198 +#, c-format +msgid "key_member is always 0" +msgstr "key_member είναι πάντα 0" + +#: descriptor.c:292 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "το στοιχείο περιγραφής «%s» δεν έχει υλοποιηθεί" + +#: descriptor.c:302 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "το στοιχείο περιγραφής «%s» δεν δύναται να οριστεί" + +#: ecpg.c:36 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s είναι ο ενσωματωμένος SQL προεπεξεργαστής της PostgreSQL για προγράμματα γραμμένα σε C.\n" +"\n" + +#: ecpg.c:38 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Χρήση:\n" +" %s [ΕΠΙΛΟΓΗ]... ΑΡΧΕΙΟ...\n" +"\n" + +#: ecpg.c:41 +#, c-format +msgid "Options:\n" +msgstr "Επιλογές:\n" + +#: ecpg.c:42 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c δημιούργησε αυτόματα κώδικα σε C από ενσωματωμένο SQL κώδικα·\n" +" αυτό επηρεάζει την εντολή EXEC SQL TYPE\n" + +#: ecpg.c:44 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MODE όρισε λειτουργία συμβατότητας; MODE μπορεί να είναι ένα από\n" +" «INFORMIX», «INFORMIX_SE», «ORACLE»\n" + +#: ecpg.c:47 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d παράξε έξοδο αποσφαλμάτωσης parser\n" + +#: ecpg.c:49 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL όρισε SYMBOL\n" + +#: ecpg.c:50 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h ανάλυσε αρχείο header, αυτή η επιλογή περιλαμβάνει την επιλογή «-c»\n" + +#: ecpg.c:51 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i ανάλυσε επίσης αρχεία include του συστήματος\n" + +#: ecpg.c:52 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I DIRECTORY ψάξε στο DIRECTORY για αρχεία include\n" + +#: ecpg.c:53 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o OUTFILE γράψε το αποτέλεσμα στο αρχείο OUTFILE\n" + +#: ecpg.c:54 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPTION καθόρισε τη συμπεριφορά χρόνου εκτέλεσης. OPTION μπορεί να είναι:\n" +" «no_indicator», «prepare», «questionmarks»\n" + +#: ecpg.c:56 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression εκτέλεσε σε λειτουργία ελέγχου αναδρομής\n" + +#: ecpg.c:57 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t ενεργοποίησε την αυτόματη ολοκλήρωση συναλλαγών\n" + +#: ecpg.c:58 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version εμφάνισε πληροφορίες έκδοσης, στη συνέχεια έξοδος\n" + +#: ecpg.c:59 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help εμφάνισε αυτό το μήνυμα βοήθειας, στη συνέχεια έξοδος\n" + +#: ecpg.c:60 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Εάν δεν καθοριστεί αρχείο εξόδου, το όνομα σχηματίζεται προσθέτοντας .c στο\n" +"όνομα αρχείου εισόδου, μετά την αφαίρεση του .pgc, εάν αυτό υπάρχει.\n" + +#: ecpg.c:62 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: ecpg.c:63 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: ecpg.c:141 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: δεν ήταν δυνατός ο εντοπισμός της ιδίας εκτελέσιμης διαδρομής\n" + +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: δεν ήταν δυνατό το άνοιγμα του αρχείου «%s»: %s\n" + +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε «%s --help» για περισσότερες πληροφορίες.\n" + +#: ecpg.c:243 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: η υποστήριξη εντοπισμού σφαλμάτων (-d) του αναλυτή δεν είναι διαθέσιμη\n" + +#: ecpg.c:262 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, ο ενσωματωμένος προεπεξεργαστής C της PostgreSQL, έκδοση %s\n" + +#: ecpg.c:264 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... η αναζήτηση ξεκινάει εδώ:\n" + +#: ecpg.c:267 +#, c-format +msgid "end of search list\n" +msgstr "τέλος της λίστας αναζήτησης\n" + +#: ecpg.c:273 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: δεν καθορίστηκαν αρχεία εισόδου\n" + +#: ecpg.c:477 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "ο δρομέας «%s» έχει δηλωθεί αλλά δεν έχει ανοιχτεί" + +#: ecpg.c:490 preproc.y:130 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "δεν ήταν δυνατή η αφαίρεση του αρχείου εξόδου «%s»\n" + +#: pgc.l:502 +#, c-format +msgid "unterminated /* comment" +msgstr "ατερμάτιστο /* σχόλιο" + +#: pgc.l:519 +#, c-format +msgid "unterminated bit string literal" +msgstr "ατερμάτιστη bit κυριολεκτική συμβολοσειρά" + +#: pgc.l:527 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "ατερμάτιστη δεκαεξαδική κυριολεκτική συμβολοσειρά" + +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "μη έγκυρη bit κυριολεκτική συμβολοσειρά" + +#: pgc.l:607 +#, c-format +msgid "invalid hex string literal" +msgstr "μη έγκυρη hex κυριολεκτική συμβολοσειρά" + +#: pgc.l:625 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "μη χειρισμένη προηγούμενη κατάσταση σε xqs\n" + +#: pgc.l:651 pgc.l:760 +#, c-format +msgid "unterminated quoted string" +msgstr "ανολοκλήρωτη συμβολοσειρά με εισαγωγικά" + +#: pgc.l:702 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "ατερμάτιστη dollar-quoted συμβολοσειρά" + +#: pgc.l:720 pgc.l:740 +#, c-format +msgid "zero-length delimited identifier" +msgstr "μηδενικού μήκους οριοθετημένο αναγνωριστικό" + +#: pgc.l:751 +#, c-format +msgid "unterminated quoted identifier" +msgstr "ατερμάτιστο αναγνωριστικό σε εισαγωγικά" + +#: pgc.l:1082 +#, c-format +msgid "nested /* ... */ comments" +msgstr "ένθετα /* ... */ σχόλια" + +#: pgc.l:1175 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "λείπει αναγνωριστικό στην εντολή EXEC SQL UNDEF" + +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "πάρα πολλές ένθετες συνθήκες EXEC SQL IFDEF" + +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "λείπει αντιστοίχιση «EXEC SQL IFDEF» / «EXEC SQL IFNDEF»" + +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "λείπει «EXEC SQL ENDIF;»" + +#: pgc.l:1279 pgc.l:1301 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "περισσότερες από μία EXEC SQL ELSE" + +#: pgc.l:1324 pgc.l:1338 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "μη αντιστοιχισμένο EXEC SQL ENDIF" + +#: pgc.l:1393 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "λείπει αναγνωριστικό στην εντολή EXEC SQL IFDEF" + +#: pgc.l:1402 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "λείπει αναγνωριστικό στην εντολή EXEC SQL DEFINE" + +#: pgc.l:1435 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "συντακτικό σφάλμα στην εντολή EXEC SQL INCLUDE" + +#: pgc.l:1485 +#, c-format +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "εσωτερικό σφάλμα: μη δυνατή κατάσταση· Παρακαλούμε όπως το αναφέρετε σε <%s>" + +#: pgc.l:1637 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Σφάλμα: η διαδρομή ενσωμάτωσης «%s/%s» είναι πολύ μακρυά στη γραμμή %d, παρακάμπτεται\n" + +#: pgc.l:1660 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου ενσωμάτωσης «%s» στη γραμμή %d" + +#: preproc.y:31 +msgid "syntax error" +msgstr "συντακτικό σφάλμα" + +#: preproc.y:84 +#, c-format +msgid "WARNING: " +msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: " + +#: preproc.y:87 +#, c-format +msgid "ERROR: " +msgstr "ΣΦΑΛΜΑ: " + +#: preproc.y:514 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "ο δρομέας «%s» δεν υπάρχει" + +#: preproc.y:543 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "δεν επιτρέπεται εκκινητής σε ορισμό τύπου" + +#: preproc.y:545 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "το όνομα τύπου «string» είναι δεσμευμένο σε λειτουργία Informix" + +#: preproc.y:552 preproc.y:17675 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "ο τύπος «%s» έχει ήδη οριστεί" + +#: preproc.y:577 preproc.y:18310 preproc.y:18635 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "οι πολυδιάστατες συστυχίες για απλούς τύπους δεδομένων δεν υποστηρίζονται" + +#: preproc.y:599 +#, c-format +msgid "connection %s is overwritten with %s by DECLARE statement %s" +msgstr "η σύνδεση %s αντικαθίσταται με %s από τη δήλωση DECLARE %s" + +#: preproc.y:1753 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "η επιλογή AT δεν επιτρέπεται σε δήλωση CLOSE DATABASE" + +#: preproc.y:2001 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "η επιλογή AT δεν επιτρέπεται σε δήλωση CONNECT" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "η επιλογή AT δεν επιτρέπεται σε δήλωση DISCONNECT" + +#: preproc.y:2096 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "η επιλογή AT δεν επιτρέπεται σε δήλωση SET CONNECTION" + +#: preproc.y:2118 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "η επιλογή AT δεν επιτρέπεται σε δήλωση TYPE" + +#: preproc.y:2127 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "η επιλογή AT δεν επιτρέπεται σε δήλωση VAR" + +#: preproc.y:2134 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "η επιλογή AT δεν επιτρέπεται σε δήλωση WHENEVER" + +#: preproc.y:2211 preproc.y:2383 preproc.y:2388 preproc.y:2511 preproc.y:4143 +#: preproc.y:4807 preproc.y:5340 preproc.y:5678 preproc.y:5978 preproc.y:7514 +#: preproc.y:9082 preproc.y:9087 preproc.y:11915 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "μη υποστηριζόμενο χαρακτηριστικό που θα προωθηθεί στον διακομιστή" + +#: preproc.y:2769 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL δεν είναι υλοποιημένο" + +#: preproc.y:3464 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN δεν είναι υλοποιημένο" + +#: preproc.y:10014 preproc.y:17250 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "το «database» δεν μπορεί να χρησιμοποιηθεί ως όνομα δρομέα σε λειτουργία INFORMIX" + +#: preproc.y:10021 preproc.y:17260 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "η χρήση της μεταβλητής «%s» σε διαφορετικές δηλώσεις προτάσεων δεν υποστηρίζεται" + +#: preproc.y:10023 preproc.y:17262 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "ο δρομέας «%s» έχει ήδη οριστεί" + +#: preproc.y:10497 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "μη υποστηριζόμενη πλέον σύνταξη LIMIT #,# που θα προωθηθεί στον διακομιστή" + +#: preproc.y:10830 preproc.y:10837 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "υποερώτημα σε FROM πρέπει να έχει ένα alias" + +#: preproc.y:16942 preproc.y:16949 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS δεν δύναται να ορίσει INTO" + +#: preproc.y:16985 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "ανέμενε «@», βρήκε «%s»." + +#: preproc.y:16997 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "μόνο τα πρωτόκολλα \"TCP\" και \"UNIX\" και ο τύπος βάσης δεδομένων «postgresql» υποστηρίζονται" + +#: preproc.y:17000 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "ανέμενε «://», βρήκε «%s»." + +#: preproc.y:17005 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "οι υποδοχές πεδίου-Unix λειτουργούν μόνο στο «localhost» αλλά όχι στο «%s»" + +#: preproc.y:17031 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "ανέμενε «postgresql», βρήκε «%s»." + +#: preproc.y:17034 +#, c-format +msgid "invalid connection type: %s" +msgstr "άκυρη επιλογή σύνδεσης: %s" + +#: preproc.y:17043 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "ανέμενε «@» ή «://», βρήκε «%s»." + +#: preproc.y:17118 preproc.y:17136 +#, c-format +msgid "invalid data type" +msgstr "μη έγκυρος τύπος δεδομένων" + +#: preproc.y:17147 preproc.y:17164 +#, c-format +msgid "incomplete statement" +msgstr "ανολοκλήρωτη δήλωση" + +#: preproc.y:17150 preproc.y:17167 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "μη αναγνωρίσιμο διακριτικό «%s»" + +#: preproc.y:17212 +#, c-format +msgid "name \"%s\" is already declared" +msgstr "το όνομα «%s» έχει ήδη δηλωθεί" + +#: preproc.y:17478 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "μόνο οι αριθμητικοί και δεκαδικοί τύποι δεδομένων έχουν όρισμα ακρίβειας/κλίμακας" + +#: preproc.y:17490 +#, c-format +msgid "interval specification not allowed here" +msgstr "προδιαγραφές διαστήματος δεν επιτρέπονται εδώ" + +#: preproc.y:17650 preproc.y:17702 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "πάρα πολλά επίπεδα σε ένθετο ορισμό δομής/ένωσης" + +#: preproc.y:17825 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "δείκτες σε varchar δεν είναι υλοποιημένοι" + +#: preproc.y:18276 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "δεν επιτρέπεται αρχικοποιητής σε εντολή EXEC SQL VAR" + +#: preproc.y:18593 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "δεν επιτρέπονται δείκτες συστάδων για είσοδο" + +#: preproc.y:18780 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "δεν επιτρέπεται χειριστής σε ορισμό μεταβλητής" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:18821 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s σε ή κοντά σε «%s»" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "έλλειψη μνήμης" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "μη αναγνωρίσιμος κωδικός τύπου μεταβλητής %d" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "η μεταβλητή «%s» αποκρύπτεται από μια τοπική μεταβλητή διαφορετικού τύπου" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "η μεταβλητή «%s» αποκρύπτεται από μια τοπική μεταβλητή" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "ο δείκτης μεταβλητής «%s» αποκρύπτεται από μια τοπική μεταβλητή διαφορετικού τύπου" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "ο δείκτης μεταβλητής «%s» αποκρύπτεται από μια τοπική μεταβλητή" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "ο δείκτης για συστάδα/δείκτη πρέπει να είναι πίνακας/δείκτης" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "οι ένθετες συστάδες δεν υποστηρίζονται (εξαιρούνται οι συμβολοσειρές)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "ο δείκτης για δομή πρέπει να είναι μια δομή" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "ο δείκτης για απλό τύπο δεδομένων πρέπει να είναι απλός" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "ο δείκτης δομής «%s» έχει πολύ λίγα μέλη" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "ο δείκτης δομής «%s» έχει πάρα πολλά μέλη" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "μη αναγνωρίσιμος κωδικός στοιχείου περιγραφέα %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "εσφαλμένα σχηματισμένη μεταβλητή «%s»" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "η μεταβλητή «%s» δεν είναι δείκτης" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "η μεταβλητή «%s» δεν είναι δείκτης προς μια δομή ή μια ένωση" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "η μεταβλητή «%s» δεν είναι ούτε δομή ούτε ένωση" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "η μεταβλητή «%s» δεν είναι μία συστάδα" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "η μεταβλητή «%s» δεν έχει δηλωθεί" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "ο δείκτης μεταβλητής πρέπει να έχει ακέραιο τύπο" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "μη αναγνωρίσιμο όνομα τύπου δεδομένων «%s»" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "οι πολυδιάστατες συστάδες δεν υποστηρίζονται" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "οι δείκτες πολλαπλών επιπέδων (περισσότερα από 2 επίπεδα) δεν υποστηρίζονται· βρέθηκε %d επίπεδο" +msgstr[1] "οι δείκτες πολλαπλών επιπέδων (περισσότερα από 2 επίπεδα) δεν υποστηρίζονται· βρέθηκαν %d επίπεδα" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "δεν υποστηρίζεται δείκτης προς δείκτη για αυτόν τον τύπο δεδομένων" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "οι πολυδιάστατες συστάδες για δομές δεν υποστηρίζονται" diff --git a/src/interfaces/ecpg/preproc/po/es.po b/src/interfaces/ecpg/preproc/po/es.po new file mode 100644 index 0000000..a7daca4 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/es.po @@ -0,0 +1,706 @@ +# Spanish translation file for ecpg +# +# Copyright (c) 2009-2021, PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# +# Emanuel Calvo Franco , 2009. +# Alvaro Herrera , 2009-2012 +# Franco Catena, , 2009 +# Carlos Chapi , 2018, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: ecpg (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2022-08-07 20:26+0000\n" +"PO-Revision-Date: 2021-10-13 23:43-0500\n" +"Last-Translator: Carlos Chapi \n" +"Language-Team: PgSQL-es-Ayuda \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: BlackCAT 1.1\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "la variable «%s» debe tener tipo numérico" + +#: descriptor.c:125 descriptor.c:156 +#, c-format +msgid "descriptor %s bound to connection %s does not exist" +msgstr "el descriptor %s vinculado a la conexión %s no existe" + +#: descriptor.c:127 descriptor.c:158 +#, c-format +msgid "descriptor %s bound to the default connection does not exist" +msgstr "el descriptor %s vinculado a la conexión predeterminada no existe" + +#: descriptor.c:173 descriptor.c:225 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "no existe el descriptor del elemento de cabecera «%d»" + +#: descriptor.c:195 +#, c-format +msgid "nullable is always 1" +msgstr "nullable es siempre 1" + +#: descriptor.c:198 +#, c-format +msgid "key_member is always 0" +msgstr "key_member es siempre 0" + +#: descriptor.c:292 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "elemento del descriptor «%s» no está implementado" + +#: descriptor.c:302 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "no se puede establecer el elemento del descriptor «%s»" + +#: ecpg.c:36 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s es el preprocesador de SQL incrustado para programas en C de PostgreSQL.\n" +"\n" + +#: ecpg.c:38 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Empleo:\n" +" %s [OPCIÓN]... ARCHIVO...\n" +"\n" + +#: ecpg.c:41 +#, c-format +msgid "Options:\n" +msgstr "Opciones:\n" + +#: ecpg.c:42 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c genera automáticamente código en C desde código SQL\n" +" incrustado; esto afecta EXEC SQL TYPE\n" + +#: ecpg.c:44 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MODO establece el modo de compatibilidad;\n" +" MODO puede ser \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" + +#: ecpg.c:47 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d genera salida depurada del analizador\n" + +#: ecpg.c:49 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL define SYMBOL\n" + +#: ecpg.c:50 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h analiza un archivo de cabecera; esto incluye «-c»\n" + +#: ecpg.c:51 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i analiza además los archivos de inclusión de sistema\n" + +#: ecpg.c:52 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I DIRECTORIO busca los archivos de inclusión en DIRECTORIO\n" + +#: ecpg.c:53 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o ARCHIVO escribe la salida en ARCHIVO\n" + +#: ecpg.c:54 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPCIÓN especifica el comportamiento en tiempo de ejecución;\n" +" OPCIÓN puede ser: «no_indicator», «prepare»,\n" +" «questionmarks»\n" + +#: ecpg.c:56 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression ejecuta en modo de prueba de regresión\n" + +#: ecpg.c:57 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t activa el compromiso (commit) automático de transacciones\n" + +#: ecpg.c:58 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version muestra información de la versión, luego sale\n" + +#: ecpg.c:59 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help muestra esta ayuda, luego sale\n" + +#: ecpg.c:60 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Si no se especifica un archivo de salida, el nombre se forma agregando .c al\n" +"archivo de entrada, luego de quitar .pgc si está presente.\n" + +#: ecpg.c:62 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Reporte errores a <%s>.\n" + +#: ecpg.c:63 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Sitio web de %s: <%s>\n" + +#: ecpg.c:141 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: no se pudo localizar la ruta de mi propio ejecutable\n" + +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: no se pudo abrir el archivo «%s»: %s\n" + +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Utilice «%s --help» para obtener mayor información.\n" + +#: ecpg.c:243 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: la depuración del analizador (parser, -d) no está disponible)\n" + +#: ecpg.c:262 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, el preprocesador de C incrustado de PostgreSQL, versión %s\n" + +#: ecpg.c:264 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... la búsqueda comienza aquí:\n" + +#: ecpg.c:267 +#, c-format +msgid "end of search list\n" +msgstr "fin de la lista de búsqueda\n" + +#: ecpg.c:273 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: no se especificaron archivos de entrada\n" + +#: ecpg.c:477 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "el cursor «%s» fue declarado pero no abierto" + +#: ecpg.c:490 preproc.y:130 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "no se pudo eliminar el archivo de salida «%s»\n" + +#: pgc.l:502 +#, c-format +msgid "unterminated /* comment" +msgstr "comentario /* no cerrado" + +#: pgc.l:519 +#, c-format +msgid "unterminated bit string literal" +msgstr "una cadena de bits está inconclusa" + +#: pgc.l:527 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "una cadena hexadecimal está inconclusa" + +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "cadena de bits no válida" + +#: pgc.l:607 +#, c-format +msgid "invalid hex string literal" +msgstr "cadena hexadecimal no válida" + +#: pgc.l:625 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "estado previo no manejado en xqs\n" + +#: pgc.l:651 pgc.l:760 +#, c-format +msgid "unterminated quoted string" +msgstr "una cadena en comillas está inconclusa" + +#: pgc.l:702 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "una cadena separada por $ está inconclusa" + +#: pgc.l:720 pgc.l:740 +#, c-format +msgid "zero-length delimited identifier" +msgstr "identificador delimitado de longitud cero" + +#: pgc.l:751 +#, c-format +msgid "unterminated quoted identifier" +msgstr "un identificador en comillas está inconcluso" + +#: pgc.l:1082 +#, c-format +msgid "nested /* ... */ comments" +msgstr "comentarios /* ... */ anidados" + +#: pgc.l:1175 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "falta un identificador en la orden EXEC SQL UNDEF" + +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "demasiadas condiciones EXEC SQL IFDEF anidadas" + +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "falta el «EXEC SQL IFDEF» / «EXEC SQL IFNDEF»" + +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "falta el «EXEC SQL ENDIF;»" + +#: pgc.l:1279 pgc.l:1301 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "hay más de un EXEC SQL ELSE" + +#: pgc.l:1324 pgc.l:1338 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "EXEC SQL ENDIF sin coincidencia" + +#: pgc.l:1393 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "identificador faltante en la orden EXEC SQL IFDEF" + +#: pgc.l:1402 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "identificador faltante en la orden EXEC SQL DEFINE" + +#: pgc.l:1435 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "error de sintaxis en orden EXEC SQL INCLUDE" + +#: pgc.l:1485 +#, c-format +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "error interno: estado no esperado; por favor reporte a <%s>" + +#: pgc.l:1637 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Error: ruta de inclusión «%s/%s» es demasiada larga en la línea %d, omitiendo\n" + +#: pgc.l:1660 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "no se pudo abrir el archivo a incluir «%s» en la línea %d" + +#: preproc.y:31 +msgid "syntax error" +msgstr "error de sintaxis" + +#: preproc.y:84 +#, c-format +msgid "WARNING: " +msgstr "ATENCIÓN: " + +#: preproc.y:87 +#, c-format +msgid "ERROR: " +msgstr "ERROR: " + +#: preproc.y:514 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "no existe el cursor «%s»" + +#: preproc.y:543 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "inicializador no permitido en definición de tipo" + +#: preproc.y:545 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "el nombre de tipo «string» está reservado en modo Informix" + +#: preproc.y:552 preproc.y:17675 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "el tipo «%s» ya está definido" + +#: preproc.y:577 preproc.y:18310 preproc.y:18635 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "los arrays multidimensionales para tipos de datos simples no están soportados" + +#: preproc.y:599 +#, c-format +msgid "connection %s is overwritten with %s by DECLARE statement %s" +msgstr "la conexión %s es sobrescrita con %s por la sentencia DECLARE %s" + +#: preproc.y:1753 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "la opción AT no está permitida en la sentencia CLOSE DATABASE" + +#: preproc.y:2001 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "la opción AT no está permitida en la sentencia CONNECT" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "la opción AT no está permitida en la sentencia DISCONNECT" + +#: preproc.y:2096 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "la opción AT no está permitida en la sentencia SET CONNECTION" + +#: preproc.y:2118 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "la opción AT no está permitida en la sentencia TYPE" + +#: preproc.y:2127 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "la opción AT no está permitida en la sentencia VAR" + +#: preproc.y:2134 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "la opción AT no está permitida en la sentencia WHENEVER" + +#: preproc.y:2211 preproc.y:2383 preproc.y:2388 preproc.y:2511 preproc.y:4143 +#: preproc.y:4807 preproc.y:5340 preproc.y:5678 preproc.y:5978 preproc.y:7514 +#: preproc.y:9082 preproc.y:9087 preproc.y:11915 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "característica no soportada será pasada al servidor" + +#: preproc.y:2769 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL no está implementado" + +#: preproc.y:3464 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN no está implementado" + +#: preproc.y:10014 preproc.y:17250 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "no se puede usar «database» como nombre de cursor en modo INFORMIX" + +#: preproc.y:10021 preproc.y:17260 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "el uso de la variable «%s» en diferentes sentencias declare no está soportado" + +#: preproc.y:10023 preproc.y:17262 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "el cursor «%s» ya está definido" + +#: preproc.y:10497 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "la sintaxis LIMIT #,# que ya no está soportada ha sido pasada al servidor" + +#: preproc.y:10830 preproc.y:10837 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "las subconsultas en FROM deben tener un alias" + +#: preproc.y:16942 preproc.y:16949 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS no puede especificar INTO" + +#: preproc.y:16985 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "se esperaba «@», se encontró «%s»" + +#: preproc.y:16997 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "sólo los protocolos «tcp» y «unix» y tipo de bases de datos «postgresql» están soportados" + +#: preproc.y:17000 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "se esperaba «://», se encontró «%s»" + +#: preproc.y:17005 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "los sockets de dominio unix sólo trabajan en «localhost» pero no en «%s»" + +#: preproc.y:17031 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "se esperaba «postgresql», se encontró «%s»" + +#: preproc.y:17034 +#, c-format +msgid "invalid connection type: %s" +msgstr "tipo de conexión no válido: %s" + +#: preproc.y:17043 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "se esperaba «@» o «://», se encontró «%s»" + +#: preproc.y:17118 preproc.y:17136 +#, c-format +msgid "invalid data type" +msgstr "tipo de dato no válido" + +#: preproc.y:17147 preproc.y:17164 +#, c-format +msgid "incomplete statement" +msgstr "sentencia incompleta" + +#: preproc.y:17150 preproc.y:17167 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "elemento «%s» no reconocido" + +#: preproc.y:17212 +#, c-format +msgid "name \"%s\" is already declared" +msgstr "el nombre «%s» ya está declarado" + +#: preproc.y:17478 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "sólo los tipos de dato numeric y decimal tienen argumento de precisión/escala" + +#: preproc.y:17490 +#, c-format +msgid "interval specification not allowed here" +msgstr "la especificación de intervalo no está permitida aquí" + +#: preproc.y:17650 preproc.y:17702 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "demasiados niveles en la definición anidada de estructura/unión" + +#: preproc.y:17825 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "los punteros a varchar no están implementados" + +#: preproc.y:18276 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "inicializador no permitido en la orden EXEC SQL VAR" + +#: preproc.y:18593 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "no se permiten los arrays de indicadores en la entrada" + +#: preproc.y:18780 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "operador no permitido en definición de variable" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:18821 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s en o cerca de «%s»" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "memoria agotada" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "código de tipo de variable %d no reconocido" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "la variable «%s» está escondida por una variable local de tipo diferente" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "la variable «%s» está escondida por una variable local" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "la variable de indicador «%s» está escondida por una variable local de tipo diferente" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "variable de indicador «%s» está escondida por una variable local" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "indicador para array/puntero debe ser array/puntero" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "no se permiten arrays anidados (excepto cadenas de caracteres)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "el indicador para struct debe ser struct" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "el indicador para tipo dato simple debe ser simple" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "struct para indicador «%s» no tiene suficientes miembros" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "struct para indicador «%s» tiene demasiados miembros" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "código de descriptor de elemento %d no reconocido" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "variable formada incorrectamente «%s»" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "la variable «%s» no es un puntero" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "la variable «%s» no es un puntero a una estructura o unión" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "la variable «%s» no es una estructura ni una unión" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "la variable «%s» no es un array" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "la variable «%s» no está declarada" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "la variable de un indicador debe ser de algún tipo numérico entero" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "nombre de tipo de datos «%s» no reconocido" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "los arrays multidimensionales no están soportados" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "no se soportan los punteros multinivel (más de 2); se encontró 1 nivel" +msgstr[1] "no se soportan los punteros multinivel (más de 2); se encontraron %d niveles" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "los punteros a puntero no están soportados para este tipo de dato" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "los arrays multidimensionales para estructuras no están soportados" diff --git a/src/interfaces/ecpg/preproc/po/fr.po b/src/interfaces/ecpg/preproc/po/fr.po new file mode 100644 index 0000000..5b09eb1 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/fr.po @@ -0,0 +1,757 @@ +# translation of ecpg.po to fr_fr +# french message translation file for ecpg +# +# Use these quotes: « %s » +# +# Guillaume Lelarge , 2009. +# Stéphane Schildknecht , 2009. +msgid "" +msgstr "" +"Project-Id-Version: PostgreSQL 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-08-27 02:09+0000\n" +"PO-Revision-Date: 2021-08-27 17:30+0200\n" +"Last-Translator: Guillaume Lelarge \n" +"Language-Team: PostgreSQLfr \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 3.0\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "la variable « %s » doit avoir un type numeric" + +#: descriptor.c:125 descriptor.c:156 +#, c-format +msgid "descriptor %s bound to connection %s does not exist" +msgstr "le descripteur %s lié à la connexion %s n'existe pas" + +#: descriptor.c:127 descriptor.c:158 +#, c-format +msgid "descriptor %s bound to the default connection does not exist" +msgstr "le descripteur %s lié à la connexion par défaut n'existe pas" + +#: descriptor.c:173 descriptor.c:225 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "l'élément d'en-tête du descripteur « %d » n'existe pas" + +#: descriptor.c:195 +#, c-format +msgid "nullable is always 1" +msgstr "nullable vaut toujours 1" + +#: descriptor.c:198 +#, c-format +msgid "key_member is always 0" +msgstr "key_member vaut toujours 0" + +#: descriptor.c:292 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "l'élément du descripteur « %s » n'est pas implanté" + +#: descriptor.c:302 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "l'élément du descripteur « %s » ne peut pas être initialisé" + +#: ecpg.c:36 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s est le préprocesseur SQL embarqué de PostgreSQL pour les programmes C.\n" +"\n" + +#: ecpg.c:38 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Usage:\n" +" %s [OPTION]... FICHIER...\n" +"\n" + +#: ecpg.c:41 +#, c-format +msgid "Options:\n" +msgstr "Options :\n" + +#: ecpg.c:42 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c produit automatiquement le code C à partir du code SQL\n" +" embarqué ; ceci affecte EXEC SQL TYPE\n" + +#: ecpg.c:44 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MODE configure le mode de compatibilité ; MODE peut être\n" +" « INFORMIX », « INFORMIX_SE » ou « ORACLE »\n" + +#: ecpg.c:47 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d produit la sortie de débogage de l'analyseur\n" + +#: ecpg.c:49 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOLE définit SYMBOLE\n" + +#: ecpg.c:50 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr "" +" -h analyse un fichier d'en-tête, cette option inclut l'option\n" +" « -c »\n" + +#: ecpg.c:51 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i analyse en plus les fichiers d'en-tête systèmes\n" + +#: ecpg.c:52 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I RÉPERTOIRE recherche les fichiers d'en-têtes dans RÉPERTOIRE\n" + +#: ecpg.c:53 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o FICHIER écrit le résultat dans FICHIER\n" + +#: ecpg.c:54 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPTION indique le comportement à l'exécution ; OPTION peut valoir :\n" +" « no_indicator », « prepare », « questionmarks »\n" + +#: ecpg.c:56 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression s'exécute en mode de tests des régressions\n" + +#: ecpg.c:57 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t active la validation automatique des transactions\n" + +#: ecpg.c:58 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version affiche la version et quitte\n" + +#: ecpg.c:59 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help affiche cette aide et quitte\n" + +#: ecpg.c:60 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Si aucun nom de fichier en sortie n'est fourni, le nom est formaté en ajoutant\n" +"le suffixe .c au nom du fichier en entrée après avoir supprimé le suffixe .pgc\n" +"s'il est présent.\n" + +#: ecpg.c:62 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Rapporter les bogues à <%s>.\n" + +#: ecpg.c:63 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Page d'accueil de %s : <%s>\n" + +#: ecpg.c:141 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s : n'a pas pu localiser le chemin de mon propre exécutable\n" + +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s : n'a pas pu ouvrir le fichier « %s » : %s\n" + +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Essayer « %s --help » pour plus d'informations.\n" + +#: ecpg.c:243 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s : support de débogage de l'analyseur (-d) non disponible\n" + +#: ecpg.c:262 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, le préprocesseur C embarqué de PostgreSQL, version %s\n" + +#: ecpg.c:264 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "la recherche EXEC SQL INCLUDE ... commence ici :\n" + +#: ecpg.c:267 +#, c-format +msgid "end of search list\n" +msgstr "fin de la liste de recherche\n" + +#: ecpg.c:273 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s : aucun fichier précisé en entrée\n" + +#: ecpg.c:477 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "le curseur « %s » est déclaré mais non ouvert" + +#: ecpg.c:490 preproc.y:130 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "n'a pas pu supprimer le fichier « %s » en sortie\n" + +#: pgc.l:502 +#, c-format +msgid "unterminated /* comment" +msgstr "commentaire /* non terminé" + +#: pgc.l:519 +#, c-format +msgid "unterminated bit string literal" +msgstr "chaîne bit litéral non terminée" + +#: pgc.l:527 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "chaîne hexadécimale litérale non terminée" + +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "chaîne bit litéral invalide" + +#: pgc.l:607 +#, c-format +msgid "invalid hex string literal" +msgstr "chaîne hexadécimale litéralle invalide" + +#: pgc.l:625 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "état précédent non géré dans xqs\n" + +#: pgc.l:651 pgc.l:760 +#, c-format +msgid "unterminated quoted string" +msgstr "chaîne entre guillemets non terminée" + +#: pgc.l:702 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "chaîne entre guillemets dollars non terminée" + +#: pgc.l:720 pgc.l:740 +#, c-format +msgid "zero-length delimited identifier" +msgstr "identifiant délimité de longueur nulle" + +#: pgc.l:751 +#, c-format +msgid "unterminated quoted identifier" +msgstr "identifiant entre guillemets non terminé" + +#: pgc.l:1082 +#, c-format +msgid "nested /* ... */ comments" +msgstr "commentaires /* ... */ imbriqués" + +#: pgc.l:1175 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "identifiant manquant dans la commande EXEC SQL UNDEF" + +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "trop de conditions EXEC SQL IFDEF imbriquées" + +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "correspondance manquante « EXEC SQL IFDEF » / « EXEC SQL IFNDEF »" + +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "« EXEC SQL ENDIF; » manquant" + +#: pgc.l:1279 pgc.l:1301 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "plusieurs EXEC SQL ELSE" + +#: pgc.l:1324 pgc.l:1338 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "EXEC SQL ENDIF différent" + +#: pgc.l:1393 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "identifiant manquant dans la commande EXEC SQL IFDEF" + +#: pgc.l:1402 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "identifiant manquant dans la commande EXEC SQL DEFINE" + +#: pgc.l:1435 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "erreur de syntaxe dans la commande EXEC SQL INCLUDE" + +#: pgc.l:1485 +#, c-format +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "erreur interne : l'état ne peut être atteint ; merci de rapporter ceci à <%s>" + +#: pgc.l:1637 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "" +"Erreur : le chemin d'en-tête « %s/%s » est trop long sur la ligne %d,\n" +"ignoré\n" + +#: pgc.l:1660 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "n'a pas pu ouvrir le fichier d'en-tête « %s » sur la ligne %d" + +#: preproc.y:31 +msgid "syntax error" +msgstr "erreur de syntaxe" + +#: preproc.y:84 +#, c-format +msgid "WARNING: " +msgstr "ATTENTION : " + +#: preproc.y:87 +#, c-format +msgid "ERROR: " +msgstr "ERREUR : " + +#: preproc.y:514 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "le curseur « %s » n'existe pas" + +#: preproc.y:543 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "initialiseur non autorisé dans la définition du type" + +#: preproc.y:545 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "le nom du type « string » est réservé dans le mode Informix" + +#: preproc.y:552 preproc.y:17675 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "le type « %s » est déjà défini" + +#: preproc.y:577 preproc.y:18310 preproc.y:18635 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "" +"les tableaux multi-dimensionnels pour les types de données simples ne sont\n" +"pas supportés" + +#: preproc.y:599 +#, c-format +msgid "connection %s is overwritten with %s by DECLARE statement %s" +msgstr "la connexion %s est surchargée avec %s par l'instruction DECLARE %s" + +#: preproc.y:1753 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "option AT non autorisée dans une instruction CLOSE DATABASE" + +#: preproc.y:2001 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "option AT non autorisée dans une instruction CONNECT" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "option AT non autorisée dans une instruction DISCONNECT" + +#: preproc.y:2096 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "option AT non autorisée dans une instruction SET CONNECTION" + +#: preproc.y:2118 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "option AT non autorisée dans une instruction TYPE" + +#: preproc.y:2127 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "option AT non autorisée dans une instruction VAR" + +#: preproc.y:2134 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "option AT non autorisée dans une instruction WHENEVER" + +#: preproc.y:2211 preproc.y:2383 preproc.y:2388 preproc.y:2511 preproc.y:4143 preproc.y:4807 +#: preproc.y:5340 preproc.y:5678 preproc.y:5978 preproc.y:7514 preproc.y:9082 preproc.y:9087 +#: preproc.y:11915 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "la fonctionnalité non supportée sera passée au serveur" + +#: preproc.y:2769 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL n'est pas implanté" + +#: preproc.y:3464 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN n'est pas implanté" + +#: preproc.y:10014 preproc.y:17250 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "« database » ne peut pas être utilisé comme nom de curseur dans le mode INFORMIX" + +#: preproc.y:10021 preproc.y:17260 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "" +"l'utilisation de la variable « %s » dans différentes instructions de déclaration\n" +"n'est pas supportée" + +#: preproc.y:10023 preproc.y:17262 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "le curseur « %s » est déjà défini" + +#: preproc.y:10497 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "la syntaxe obsolète LIMIT #,# a été passée au serveur" + +#: preproc.y:10830 preproc.y:10837 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "la sous-requête du FROM doit avoir un alias" + +#: preproc.y:16942 preproc.y:16949 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS ne peut pas indiquer INTO" + +#: preproc.y:16985 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "« @ » attendu, « %s » trouvé" + +#: preproc.y:16997 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "" +"seuls les protocoles « tcp » et « unix » et les types de base de données\n" +"« postgresql » sont supportés" + +#: preproc.y:17000 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "« :// » attendu, « %s » trouvé" + +#: preproc.y:17005 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "les sockets de domaine Unix fonctionnent seulement sur « localhost », mais pas sur « %s »" + +#: preproc.y:17031 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "« postgresql » attendu, « %s » trouvé" + +#: preproc.y:17034 +#, c-format +msgid "invalid connection type: %s" +msgstr "type de connexion invalide : %s" + +#: preproc.y:17043 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "« @ » ou « :// » attendu, « %s » trouvé" + +#: preproc.y:17118 preproc.y:17136 +#, c-format +msgid "invalid data type" +msgstr "type de données invalide" + +#: preproc.y:17147 preproc.y:17164 +#, c-format +msgid "incomplete statement" +msgstr "instruction incomplète" + +#: preproc.y:17150 preproc.y:17167 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "jeton « %s » non reconnu" + +#: preproc.y:17212 +#, c-format +msgid "name \"%s\" is already declared" +msgstr "le nom « %s » est déjà défini" + +#: preproc.y:17478 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "" +"seuls les types de données numeric et decimal ont des arguments de\n" +"précision et d'échelle" + +#: preproc.y:17490 +#, c-format +msgid "interval specification not allowed here" +msgstr "interval de spécification non autorisé ici" + +#: preproc.y:17650 preproc.y:17702 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "trop de niveaux dans la définition de structure/union imbriquée" + +#: preproc.y:17825 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "les pointeurs sur des chaînes de caractères (varchar) ne sont pas implantés" + +#: preproc.y:18276 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "initialiseur non autorisé dans la commande EXEC SQL VAR" + +#: preproc.y:18593 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "les tableaux d'indicateurs ne sont pas autorisés en entrée" + +#: preproc.y:18780 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "opérateur non autorisé dans la définition de la variable" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:18821 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s sur ou près de « %s »" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "mémoire épuisée" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "code %d du type de variable non reconnu" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "la variable « %s » est cachée par une variable locale d'un type différent" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "la variable « %s » est cachée par une variable locale" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "" +"la variable indicateur « %s » est caché par une variable locale d'un type\n" +"différent" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "la variable indicateur « %s » est cachée par une variable locale" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "l'indicateur pour le tableau/pointeur doit être tableau/pointeur" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "" +"les tableaux imbriqués ne sont pas supportés (sauf les chaînes de\n" +"caractères)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "l'indicateur d'un struct doit être un struct" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "l'indicateur d'un type de données simple doit être simple" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "le struct indicateur « %s » a trop peu de membres" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "le struct indicateur « %s » a trop de membres" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "code %d de l'élément du descripteur non reconnu" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "variable « %s » mal formée" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "la variable « %s » n'est pas un pointeur" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "la variable « %s » n'est pas un pointeur vers une structure ou une union" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "la variable « %s » n'est ni une structure ni une union" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "la variable « %s » n'est pas un tableau" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "la variable « %s » n'est pas déclarée" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "la variable d'indicateur doit avoir un type integer" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "nom « %s » non reconnu pour un type de données" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "les tableaux multidimensionnels ne sont pas supportés" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "" +"les pointeurs multi-niveaux (plus de deux) ne sont pas supportés :\n" +"%d niveau trouvé" +msgstr[1] "" +"les pointeurs multi-niveaux (plus de deux) ne sont pas supportés :\n" +"%d niveaux trouvés" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "ce type de données ne supporte pas les pointeurs de pointeur" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "les tableaux multidimensionnels ne sont pas supportés pour les structures" + +#~ msgid "declared name %s is already defined" +#~ msgstr "le nom déclaré %s est déjà défini" + +#~ msgid "COPY TO STDIN is not possible" +#~ msgstr "COPY TO STDIN n'est pas possible" + +#~ msgid "COPY FROM STDOUT is not possible" +#~ msgstr "COPY FROM STDOUT n'est pas possible" + +#~ msgid "NEW used in query that is not in a rule" +#~ msgstr "NEW utilisé dans une requête qui n'est pas dans une règle" + +#~ msgid "OLD used in query that is not in a rule" +#~ msgstr "OLD utilisé dans une requête qui n'est pas dans une règle" + +#~ msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" +#~ msgstr "une contrainte déclarée INITIALLY DEFERRED doit être DEFERRABLE" + +#~ msgid "AT option not allowed in DEALLOCATE statement" +#~ msgstr "option AT non autorisée dans une instruction DEALLOCATE" + +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version affiche la version et quitte\n" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Rapporter les bogues à .\n" + +#~ msgid "using unsupported DESCRIBE statement" +#~ msgstr "utilisation de l'instruction DESCRIBE non supporté" diff --git a/src/interfaces/ecpg/preproc/po/it.po b/src/interfaces/ecpg/preproc/po/it.po new file mode 100644 index 0000000..bfdd9ea --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/it.po @@ -0,0 +1,679 @@ +# +# ecpg.po +# Italian message translation file for ecpg +# +# For development and bug report please use: +# https://github.com/dvarrazzo/postgresql-it +# +# Copyright (C) 2012-2017 PostgreSQL Global Development Group +# Copyright (C) 2010, Associazione Culturale ITPUG +# +# Daniele Varrazzo , 2012-2017. +# Maurizio Totti , 2010. +# +# This file is distributed under the same license as the PostgreSQL package. +# +msgid "" +msgstr "" +"Project-Id-Version: ecpg (PostgreSQL) 11\n" +"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" +"POT-Creation-Date: 2018-10-08 14:08+0000\n" +"PO-Revision-Date: 2018-10-08 21:54+0100\n" +"Last-Translator: Daniele Varrazzo \n" +"Language-Team: https://github.com/dvarrazzo/postgresql-it\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Generator: Poedit 2.0.6\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "la variabile \"%s\" deve essere di tipo numerico" + +#: descriptor.c:124 descriptor.c:146 +#, c-format +msgid "descriptor \"%s\" does not exist" +msgstr "il descrittore \"%s\" non esiste" + +#: descriptor.c:161 descriptor.c:213 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "la voce \"%d\" dell'header del descrittore non esiste" + +#: descriptor.c:183 +#, c-format +msgid "nullable is always 1" +msgstr "nullable è sempre 1" + +#: descriptor.c:186 +#, c-format +msgid "key_member is always 0" +msgstr "key_member è sempre 0" + +#: descriptor.c:280 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "la voce \"%s\" del descrittore non è implementata" + +#: descriptor.c:290 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "la voce \"%s\" del descrittore non può essere impostata" + +#: ecpg.c:35 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s è il preprocessore SQL embedded di PostgreSQL per programmi scritti in C.\n" +"\n" + +#: ecpg.c:37 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Utilizzo:\n" +" %s [OPZIONE]... FILE...\n" +"\n" + +#: ecpg.c:40 +#, c-format +msgid "Options:\n" +msgstr "Opzioni:\n" + +#: ecpg.c:41 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c genera automaticamente il codice C dal codice SQL embedded;\n" +" questo ha effetto su EXEC SQL TYPE\n" + +#: ecpg.c:43 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MODO imposta la modalità di compatibilità; MODO può essere uno\n" +" tra \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" + +#: ecpg.c:46 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d genera l'output di debug del parser\n" + +#: ecpg.c:48 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SIMBOLO definisci SIMBOLO\n" + +#: ecpg.c:49 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h analizza un file header, questa opzione include \"-c\"\n" + +#: ecpg.c:50 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i analizza anche i file di sistema\n" + +#: ecpg.c:51 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I DIRECTORY cerca gli include file in DIRECTORY\n" + +#: ecpg.c:52 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o FILEOUT scrive il risultato in FILEOUT\n" + +#: ecpg.c:53 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPZIONE specifica il comportamento run-time; OPZIONE può essere:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" + +#: ecpg.c:55 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression esegui in modalità test di regressione\n" + +#: ecpg.c:56 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t attiva il commit automatico delle transazioni\n" + +#: ecpg.c:57 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V --version mostra informazioni sulla versione ed esci\n" + +#: ecpg.c:58 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help mostra questo aiuto ed esci\n" + +#: ecpg.c:59 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Se non viene specificato nessun file di output, il nome è composto aggiungendo\n" +".c al nome del file di input, dopo aver tolto .pgc se presente.\n" + +#: ecpg.c:61 +#, c-format +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Puoi segnalare eventuali bug a .\n" + +#: ecpg.c:139 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: percorso del proprio eseguibile non trovato\n" + +#: ecpg.c:174 ecpg.c:331 ecpg.c:342 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: apertura del file \"%s\" fallita: %s\n" + +#: ecpg.c:217 ecpg.c:230 ecpg.c:246 ecpg.c:272 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Prova \"%s --help\" per maggiori informazioni.\n" + +#: ecpg.c:241 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: il supporto al debug del parser (-d) non è disponibile\n" + +#: ecpg.c:260 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, il preprocessore di PostgreSQL per programmi in C, versione %s\n" + +#: ecpg.c:262 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... la ricerca inizia da qui:\n" + +#: ecpg.c:265 +#, c-format +msgid "end of search list\n" +msgstr "fine della lista di ricerca\n" + +#: ecpg.c:271 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: non è stato specificato nessun file di input\n" + +#: ecpg.c:465 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "il cursore \"%s\" è stato dichiarato, ma non aperto" + +#: ecpg.c:478 preproc.y:127 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "rimozione del file di output \"%s\" fallita\n" + +#: pgc.l:444 +#, c-format +msgid "unterminated /* comment" +msgstr "commento /* non terminato" + +# string literal sarebbe intraducubile infatti è come la stringa viene rappresentata nel linguaggio di programmazione, ma come si fa a tradurlo?.... +# Secondo me "stringa letterale" -- Daniele +#: pgc.l:457 +#, c-format +msgid "invalid bit string literal" +msgstr "bit nella stringa letterale non valido" + +#: pgc.l:466 +#, c-format +msgid "unterminated bit string literal" +msgstr "letterale di stringa di bit non terminato" + +#: pgc.l:482 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "letterale di stringa esadecimale non terminato" + +#: pgc.l:560 +#, c-format +msgid "unterminated quoted string" +msgstr "stringa tra virgolette non terminata" + +#: pgc.l:618 pgc.l:631 +#, c-format +msgid "zero-length delimited identifier" +msgstr "identificativo delimitato di lunghezza zero" + +#: pgc.l:639 +#, c-format +msgid "unterminated quoted identifier" +msgstr "identificativo tra virgolette non terminato" + +#: pgc.l:921 +#, c-format +msgid "nested /* ... */ comments" +msgstr "commenti /* ... */ annidati" + +#: pgc.l:1014 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "identificativo mancante nel comando EXEC SQL UNDEF" + +#: pgc.l:1060 pgc.l:1074 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "mancata corrispondenza fra \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" + +#: pgc.l:1063 pgc.l:1076 pgc.l:1252 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "manca \"EXEC SQL ENDIF;\"" + +#: pgc.l:1092 pgc.l:1111 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "più di un EXEC SQL ELSE" + +#: pgc.l:1133 pgc.l:1147 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "EXEC SQL ENDIF non corrispondente" + +#: pgc.l:1167 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "troppe condizioni EXEC SQL IFDEF annidate" + +#: pgc.l:1200 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "identificativo mancante nel comando EXEC SQL IFDEF" + +#: pgc.l:1209 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "identificativo mancante nel comando EXEC SQL DEFINE" + +#: pgc.l:1242 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "errore di sintassi nel comando EXEC SQL INCLUDE" + +#: pgc.l:1291 +#, c-format +msgid "internal error: unreachable state; please report this to " +msgstr "errore interno: stato non raggiungibile, si prega di segnalarlo a " + +#: pgc.l:1420 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Errore: il percorso delle inclusioni \"%s/%s\" è troppo lungo alla riga %d, perciò viene saltato\n" + +#: pgc.l:1443 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "apertura del file di include \"%s\" alla riga %d fallita" + +#: preproc.y:31 +msgid "syntax error" +msgstr "errore di sintassi" + +#: preproc.y:81 +#, c-format +msgid "WARNING: " +msgstr "ATTENZIONE: " + +#: preproc.y:84 +#, c-format +msgid "ERROR: " +msgstr "ERRORE: " + +#: preproc.y:508 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "il cursore \"%s\" non esiste" + +#: preproc.y:537 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "l'inizializzatore non è permesso nella definizione del tipo di dato" + +#: preproc.y:539 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "il nome di tipo \"string\" è riservato alla modalità Informix" + +#: preproc.y:546 preproc.y:15744 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "il tipo \"%s\" è già definito" + +#: preproc.y:570 preproc.y:16402 preproc.y:16727 variable.c:620 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "gli array multidimensionali per tipi dato semplici non sono supportati" + +#: preproc.y:1694 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "l'opzione AT non è permessa nell'istruzione CLOSE DATABASE" + +#: preproc.y:1903 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "l'opzione AT non è permessa nell'istruzione CONNECT" + +#: preproc.y:1937 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "l'opzione AT non è permessa nell'istruzione DISCONNECT" + +#: preproc.y:1992 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "l'opzione AT non è permessa nell'istruzione SET CONNECTION" + +#: preproc.y:2014 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "l'opzione AT non è permessa nell'istruzione TYPE" + +#: preproc.y:2023 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "l'opzione AT non è permessa nell'istruzione VAR" + +#: preproc.y:2030 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "l'opzione AT non è permessa nell'istruzione WHENEVER" + +#: preproc.y:2107 preproc.y:2279 preproc.y:2284 preproc.y:2400 preproc.y:4045 +#: preproc.y:5615 preproc.y:5624 preproc.y:5924 preproc.y:7523 preproc.y:9016 +#: preproc.y:9021 preproc.y:11812 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "al server è stata richiesta una funzionalità non supportata" + +#: preproc.y:2658 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL non è implementato" + +#: preproc.y:3386 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN non è implementato" + +#: preproc.y:9969 preproc.y:15333 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "usare la variabile \"%s\" in una diversa istruzione declare non è supportato" + +#: preproc.y:9971 preproc.y:15335 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "il cursore \"%s\" è già definito" + +#: preproc.y:10401 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "la sintassi LIMIT #,# passata al server non è più supportata" + +#: preproc.y:10726 preproc.y:10733 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "la sottoquery in FROM deve avere un alias" + +#: preproc.y:15063 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS non può specificare INTO" + +#: preproc.y:15099 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "atteso \"@\", trovato \"%s\"" + +#: preproc.y:15111 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "soltanto i protocolli \"tcp\" e \"unix\" ed il tipo database \"postgresql\" sono supportati" + +#: preproc.y:15114 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "atteso \"://\", trovato \"%s\"" + +#: preproc.y:15119 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "i socket di dominio Unix funzionano solo con \"localhost\" ma non con \"%s\"" + +#: preproc.y:15145 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "atteso \"postgresql\", trovato \"%s\"" + +#: preproc.y:15148 +#, c-format +msgid "invalid connection type: %s" +msgstr "tipo di connessione non valido: %s" + +#: preproc.y:15157 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "atteso \"@\" oppure \"://\", trovato \"%s\"" + +#: preproc.y:15232 preproc.y:15250 +#, c-format +msgid "invalid data type" +msgstr "tipo dato non valido" + +#: preproc.y:15261 preproc.y:15278 +#, c-format +msgid "incomplete statement" +msgstr "istruzione incompleta" + +#: preproc.y:15264 preproc.y:15281 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "token \"%s\" sconosciuto" + +#: preproc.y:15555 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "solo i dati di tipo numeric e decimal hanno argomento precisione/scala" + +#: preproc.y:15567 +#, c-format +msgid "interval specification not allowed here" +msgstr "specificazione di intervallo non permessa qui" + +#: preproc.y:15719 preproc.y:15771 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "troppi livelli nidificati nella definizione della struttura/unione" + +#: preproc.y:15910 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "i puntatori a varchar non sono implementati" + +#: preproc.y:16097 preproc.y:16122 +#, c-format +msgid "using unsupported DESCRIBE statement" +msgstr "si sta utilizzando una istruzione DESCRIBE non supportata" + +#: preproc.y:16369 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "initializer non è permesso nel comando EXEC SQL VAR" + +#: preproc.y:16685 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "array di indicatori non sono permessi" + +#: preproc.y:16906 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "operatore non permesso nella definizione di variabile" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:16947 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s a o presso \"%s\"" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "memoria esaurita" + +#: type.c:212 type.c:676 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "tipo di variabile sconosciuto codice %d" + +#: type.c:261 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "la variabile \"%s\" è nascosta da una variabile locale di tipo diverso" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "la variabile \"%s\" è nascosta da una variabile locale" + +#: type.c:275 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "la variabile di indicatore \"%s\" è nascosta da una variabile locale di tipo diverso" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "la variabile di indicatore \"%s\" è nascosta da una variabile locale" + +#: type.c:285 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "un indicatore per un array/puntatore deve essere un array/puntatore" + +#: type.c:289 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "array annidati non sono supportati (tranne che per le stringhe)" + +#: type.c:331 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "un indicatore per una struttura deve essere una struttura" + +# capire meglio i "simple data types" +#: type.c:351 type.c:372 type.c:392 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "un indicatore per un tipo di dato semplice deve essere semplice" + +#: type.c:616 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "l'indicatore struttura \"%s\" non ha abbastanza membri" + +#: type.c:624 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "l'indicatore struttura \"%s\" ha troppi membri" + +#: type.c:735 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "descrittore di codice %d sconosciuto" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "variabile \"%s\" composta in maniera scorretta" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "la variabile \"%s\" non è un puntatore" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "la variabile \"%s\" non è un puntatore ad una struttura o ad una unione" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "la variabile \"%s\" non è né una struttura né una unione" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "la variabile \"%s\" non è un array" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "la variabile \"%s\" non è stata dichiarata" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "il tipo di variabile di un indicatore deve essere intero" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "tipo di dato chiamato \"%s\" è sconosciuto" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "gli array multidimensionali non sono supportati" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "puntatori a più livelli (più di 2) non sono supportati; trovato %d livello" +msgstr[1] "puntatori a più livelli (più di 2) non sono supportati; trovati %d livelli" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "il puntatore a puntatore non è supportato per questo tipo di dato" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "gli array multidimensionali per strutture non sono supportati" diff --git a/src/interfaces/ecpg/preproc/po/ja.po b/src/interfaces/ecpg/preproc/po/ja.po new file mode 100644 index 0000000..30196c1 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/ja.po @@ -0,0 +1,701 @@ +# Japanese message translation file for ecpg-preproc +# Copyright (C) 2022 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_archivecleanup (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: ecpg (PostgreSQL 14)\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-08-25 17:29+0900\n" +"PO-Revision-Date: 2021-08-25 17:34+0900\n" +"Last-Translator: Kyotaro Horiguchi \n" +"Language-Team: jpug-doc \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 1.8.13\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "変数\"%s\"は数値型でなければなりません" + +#: descriptor.c:125 descriptor.c:156 +#, c-format +msgid "descriptor %s bound to connection %s does not exist" +msgstr "接続%2$sに関連付けられている記述子%1$sは存在しません" + +#: descriptor.c:127 descriptor.c:158 +#, c-format +msgid "descriptor %s bound to the default connection does not exist" +msgstr "デフォルト接続に関連付けられている記述し%sは存在しません" + +#: descriptor.c:173 descriptor.c:225 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "記述子ヘッダ項目%dは存在しません" + +#: descriptor.c:195 +#, c-format +msgid "nullable is always 1" +msgstr "nullableは常に1です" + +#: descriptor.c:198 +#, c-format +msgid "key_member is always 0" +msgstr "key_memberは常に0です" + +#: descriptor.c:292 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "記述子項目%sは実装されていません" + +#: descriptor.c:302 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "記述子項目%sは設定できません" + +#: ecpg.c:36 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%sはCプログラム用のPostgreSQL埋込みSQLプリプロセッサです。\n" +"\n" + +#: ecpg.c:38 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"使用方法:\n" +" %s [オプション]... ファイル...\n" +"\n" + +#: ecpg.c:41 +#, c-format +msgid "Options:\n" +msgstr "オプション:\n" + +#: ecpg.c:42 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c 埋め込まれたSQLコードを元にC言語コードを自動的に生成します\n" +" これはEXEC SQL TYPEに影響を与えます\n" + +#: ecpg.c:44 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MODE 互換モードを設定; MODEは\"INFORMIX\"、 \"INFORMIX_SE\"、\n" +" \"ORACLE\"のいずれかです\n" + +#: ecpg.c:47 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d パーサのデバッグ出力を有効にします\n" + +#: ecpg.c:49 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL シンボル SYMBOL を定義します\n" + +#: ecpg.c:50 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr "" +" -h ヘッダファイルをパースします。このオプションには\"-c\"オプション\n" +" が含まれます\n" + +#: ecpg.c:51 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i システムインクルードファイルもパースします\n" + +#: ecpg.c:52 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I DIRECTORY DIRECTORYからインクルードファイルを検索します\n" + +#: ecpg.c:53 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o OUTFILE 結果をOUTFILEに出力します\n" + +#: ecpg.c:54 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPTION 実行時の動作を指定します。オプションは次のいずれかです\n" +" \"no_indicator\"、\"prepare\"、\"questionmarks\"\n" + +#: ecpg.c:56 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression リグレッション試験モードで実行します\n" + +#: ecpg.c:57 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t トランザクションの自動コミットを有効にします\n" + +#: ecpg.c:58 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version バージョン情報を出力して、終了します\n" + +#: ecpg.c:59 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help このヘルプを表示して、終了します\n" + +#: ecpg.c:60 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"出力ファイルの指定がない場合は、入力ファイルの名前に.cを付けた名前になります。\n" +"ただし、もし.pgcがある場合はこれを取り除いてから.cが付けられます。\n" + +#: ecpg.c:62 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"バグは<%s>に報告してください。\n" + +#: ecpg.c:63 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" + +#: ecpg.c:141 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: 自身の実行ファイルが見つかりませんでした\n" + +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: ファイル\"%s\"をオープンできませんでした: %s\n" + +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "詳細は\"%s --help\"で確認してください。\n" + +#: ecpg.c:243 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: パーサデバッグのサポート(-d)を利用できません\n" + +#: ecpg.c:262 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, PostgreSQL埋込みC言語プリプロセッサ, バージョン%s\n" + +#: ecpg.c:264 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... 検索が始まります\n" + +#: ecpg.c:267 +#, c-format +msgid "end of search list\n" +msgstr "検索リストの終端です\n" + +#: ecpg.c:273 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: 入力ファイルが指定されていません\n" + +#: ecpg.c:477 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "カーソル%sは宣言されましたが、オープンされていません" + +#: ecpg.c:490 preproc.y:130 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "出力ファイル\"%s\"を削除できませんでした\n" + +#: pgc.l:501 +#, c-format +msgid "unterminated /* comment" +msgstr "/*コメントが閉じていません" + +#: pgc.l:518 +#, c-format +msgid "unterminated bit string literal" +msgstr "ビット列リテラルの終端がありません" + +#: pgc.l:526 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "16進数文字列リテラルの終端がありません" + +#: pgc.l:601 +#, c-format +msgid "invalid bit string literal" +msgstr "無効なビット列リテラルです" + +#: pgc.l:606 +#, c-format +msgid "invalid hex string literal" +msgstr "不正な16進文字列リテラルです" + +#: pgc.l:624 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "xqsの中で処理されない前ステート\n" + +#: pgc.l:650 pgc.l:759 +#, c-format +msgid "unterminated quoted string" +msgstr "文字列の引用符が閉じていません" + +#: pgc.l:701 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "文字列のドル引用符が閉じていません" + +#: pgc.l:719 pgc.l:739 +#, c-format +msgid "zero-length delimited identifier" +msgstr "二重引用符で囲まれた識別子の長さがゼロです" + +#: pgc.l:750 +#, c-format +msgid "unterminated quoted identifier" +msgstr "識別子の引用符が閉じていません" + +#: pgc.l:1081 +#, c-format +msgid "nested /* ... */ comments" +msgstr "入れ子状の /* ... */ コメント" + +#: pgc.l:1174 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "EXEC SQL UNDEFコマンドにおいて識別子がありません" + +#: pgc.l:1192 pgc.l:1205 pgc.l:1221 pgc.l:1234 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "入れ子状のEXEC SQL IFDEF条件が多すぎます" + +#: pgc.l:1250 pgc.l:1261 pgc.l:1276 pgc.l:1298 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "対応する\"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"がありません" + +#: pgc.l:1252 pgc.l:1263 pgc.l:1444 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "\"EXEC SQL ENDIF;\"がありません" + +#: pgc.l:1278 pgc.l:1300 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "1つ以上のEXEC SQL ELSE\"が存在します" + +#: pgc.l:1323 pgc.l:1337 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "EXEC SQL ENDIFに対応するものがありません" + +#: pgc.l:1392 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "EXEC SQL IFDEFコマンドにおいて識別子がありません" + +#: pgc.l:1401 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "EXEC SQL DEFINEコマンドにおいて識別子がありません" + +#: pgc.l:1434 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "EXEC SQL INCLUDEコマンドにおいて構文エラーがあります" + +#: pgc.l:1484 +#, c-format +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "内部エラー: 到達しないはずの状態です。<%s>まで報告してください" + +#: pgc.l:1637 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "エラー:行番号%3$dのインクルードパス\"%1$s/%2$s\"が長すぎます。無視しました。\n" + +#: pgc.l:1660 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "行番号%2$dのインクルードファイル\"%1$s\"をオープンすることができませんでした" + +#: preproc.y:31 +msgid "syntax error" +msgstr "構文エラー" + +#: preproc.y:84 +#, c-format +msgid "WARNING: " +msgstr "警告: " + +#: preproc.y:87 +#, c-format +msgid "ERROR: " +msgstr "エラー: " + +#: preproc.y:514 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "カーソル\"%s\"は存在しません" + +#: preproc.y:543 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "型定義では初期化子は許されません" + +#: preproc.y:545 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "型名\"string\"はInformixモードですでに予約されています" + +#: preproc.y:552 preproc.y:17675 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "\"%s\"型はすでに定義されています" + +#: preproc.y:577 preproc.y:18310 preproc.y:18635 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "単純なデータ型の多次元配列はサポートされていません" + +#: preproc.y:599 +#, c-format +msgid "connection %s is overwritten with %s by DECLARE statement %s" +msgstr "接続%1$sはDECLARE文%3$sで%2$sに上書きされます" + +#: preproc.y:1753 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "CLOSE DATABASE文ではATオプションは許されません" + +#: preproc.y:2001 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "CONNECT文ではATオプションは許されません" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "DISCONNECT文ではATオプションは許されません" + +#: preproc.y:2096 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "SET CONNECTION文ではATオプションは許されません" + +#: preproc.y:2118 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "TYPE文ではATオプションは許されません" + +#: preproc.y:2127 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "VAR文ではATオプションは許されません" + +#: preproc.y:2134 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "WHENEVER文ではATオプションは許されません" + +#: preproc.y:2211 preproc.y:2383 preproc.y:2388 preproc.y:2511 preproc.y:4143 +#: preproc.y:4807 preproc.y:5340 preproc.y:5678 preproc.y:5978 preproc.y:7514 +#: preproc.y:9082 preproc.y:9087 preproc.y:11915 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "非サポートの機能がサーバに渡されます" + +#: preproc.y:2769 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALLは実装されていません" + +#: preproc.y:3464 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDINは実装されていません" + +#: preproc.y:10014 preproc.y:17250 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "INFORMIXモードでは\"database\"をカーソル名として使用できません" + +#: preproc.y:10021 preproc.y:17260 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "異なったdeclareステートメントにおける変数\"%s\"の使用はサポートされていません" + +#: preproc.y:10023 preproc.y:17262 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "カーソル\"%s\"はすでに定義されています" + +#: preproc.y:10497 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "サーバに渡されるLIMIT #,#構文はもはやサポートされていません" + +#: preproc.y:10830 preproc.y:10837 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "FROM句の副問い合わせには別名が必要です" + +#: preproc.y:16942 preproc.y:16949 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE ASはINTOを指定できません" + +#: preproc.y:16985 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "想定では\"@\"、結果では\"%s\"" + +#: preproc.y:16997 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "プロトコルでは\"tcp\"および\"unix\"のみ、データベースの種類では\"postgresql\"のみがサポートされています" + +#: preproc.y:17000 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "想定では\"://\"、結果では\"%s\"" + +#: preproc.y:17005 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Unixドメインソケットは\"localhost\"でのみで動作し、\"%s\"では動作しません" + +#: preproc.y:17031 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "想定では\"postgresql\"、結果では\"%s\"" + +#: preproc.y:17034 +#, c-format +msgid "invalid connection type: %s" +msgstr "無効な接続種類: %s" + +#: preproc.y:17043 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "想定では\"@または\"\"://\"、結果では\"%s\"" + +#: preproc.y:17118 preproc.y:17136 +#, c-format +msgid "invalid data type" +msgstr "無効なデータ型" + +#: preproc.y:17147 preproc.y:17164 +#, c-format +msgid "incomplete statement" +msgstr "不完全な文" + +#: preproc.y:17150 preproc.y:17167 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "認識できないトークン\"%s\"" + +#: preproc.y:17212 +#, c-format +msgid "name \"%s\" is already declared" +msgstr "名前\"%s\"はすでに定義されています" + +#: preproc.y:17478 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "数値データ型または10進数データ型のみが精度/位取りの引数を取ることができます" + +#: preproc.y:17490 +#, c-format +msgid "interval specification not allowed here" +msgstr "時間間隔の指定はここでは許されません" + +#: preproc.y:17650 preproc.y:17702 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "構造体/ユニオンの定義の入れ子レベルが深すぎます" + +#: preproc.y:17825 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "varcharを指し示すポインタは実装されていません" + +#: preproc.y:18276 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "EXEC SQL VARコマンドでは初期化子は許されません" + +#: preproc.y:18593 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "指示子配列は入力として許されません" + +#: preproc.y:18780 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "変数定義では演算子は許されません" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:18821 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "\"%2$s\"またはその近辺で%1$s" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "メモリ不足" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "認識できない変数型コード%d" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "変数\"%s\"は、異なった型を持つローカル変数により隠蔽されています" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "変数\"%s\"はローカル変数により隠蔽されています" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "指示子変数\"%s\"は、異なった型を持つローカル変数により隠蔽されています" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "指示子変数\"%s\"はローカル変数により隠蔽されています" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "配列/ポインタ用の指示子は配列/ポインタでなければなりません" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "入れ子状の配列はサポートされません (文字列は除きます)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "構造体用の指示子は構造体でなければなりません" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "単純なデータ型用の指示子は単純型でなければなりません" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "指示子構造体\"%s\"のメンバが足りません" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "指示子構造体\"%s\"のメンバが多すぎます" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "認識できない記述子項目コード%dです" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "正しく成形されていない変数\"%s\"です" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "変数\"%s\"はポインタではありません" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "変数\"%s\"は構造体またはユニオンを指し示すポインタではありません" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "変数\"%s\"は構造体でもユニオンでもありません" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "変数\"%s\"は配列ではありません" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "変数\"%s\"は宣言されていません" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "指示子変数は整数型でなければなりません" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "データ型名\"%s\"は認識できません" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "多次元配列はサポートされません" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "複数レベルのポインタ(3レベル以上)はサポートされません。%dレベルあります" +msgstr[1] "複数レベルのポインタ(3レベル以上)はサポートされません。%dレベルあります" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "このデータ型では、ポインタを指し示すポインタはサポートされていません" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "構造体の多次元配列はサポートされていません" diff --git a/src/interfaces/ecpg/preproc/po/ko.po b/src/interfaces/ecpg/preproc/po/ko.po new file mode 100644 index 0000000..43516f9 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/ko.po @@ -0,0 +1,690 @@ +# LANGUAGE message translation file for ecpg +# Copyright (C) 2017 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# Ioseph Kim , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: ecpg (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-10-05 01:09+0000\n" +"PO-Revision-Date: 2020-10-05 16:55+0900\n" +"Last-Translator: Ioseph Kim \n" +"Language-Team: Korean Team \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "\"%s\" 변수는 숫자 형식이어야 함" + +#: descriptor.c:124 descriptor.c:146 +#, c-format +msgid "descriptor \"%s\" does not exist" +msgstr "\"%s\" 설명자가 없음" + +#: descriptor.c:161 descriptor.c:213 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "설명자 헤더 항목 \"%d\"이(가) 없음" + +#: descriptor.c:183 +#, c-format +msgid "nullable is always 1" +msgstr "null 허용 여부는 항상 1" + +#: descriptor.c:186 +#, c-format +msgid "key_member is always 0" +msgstr "key_member는 항상 0" + +#: descriptor.c:280 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "설명자 항목 \"%s\"이(가) 구현되지 않음" + +#: descriptor.c:290 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "설명자 항목 \"%s\"을(를) 설정할 수 없음" + +#: ecpg.c:35 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s은(는) C 프로그램용 PostgreSQL 포함 SQL 전처리기입니다.\n" +"\n" + +#: ecpg.c:37 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"사용:\n" +" %s [OPTION]... 파일...\n" +"\n" + +#: ecpg.c:40 +#, c-format +msgid "Options:\n" +msgstr "옵션들:\n" + +#: ecpg.c:41 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c 포함된 SQL 코드에서 자동으로 C 코드를 생성합니다.\n" +" EXEC SQL TYPE에 영향을 줍니다.\n" + +#: ecpg.c:43 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MODE 호환성 모드를 설정합니다. MODE는 다음 중 하나일 수 있습니" +"다.\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" + +#: ecpg.c:46 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d 파서 디버그 출력 생성\n" + +#: ecpg.c:48 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL SYMBOL 정의\n" + +#: ecpg.c:49 +#, c-format +msgid "" +" -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h 헤더 파일 구문 분석. 이 옵션은 \"-c\" 옵션 포함\n" + +#: ecpg.c:50 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i 시스템 포함 파일도 구문 분석\n" + +#: ecpg.c:51 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I DIRECTORY DIRECTORY에서 포함 파일 검색\n" + +#: ecpg.c:52 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o OUTFILE OUTFILE에 결과 쓰기\n" + +#: ecpg.c:53 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPTION 런타임 동작을 지정합니다. 사용 가능한 OPTION은 다음과 같습니" +"다.\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" + +#: ecpg.c:55 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression 회귀 테스트 모드에서 실행\n" + +#: ecpg.c:56 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t 트랜잭션 자동 커밋 설정\n" + +#: ecpg.c:57 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 버전 정보 보여주고 마침\n" + +#: ecpg.c:58 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 이 도움말을 보여주고 마침\n" + +#: ecpg.c:59 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"출력 파일 이름을 지정하지 않으면 입력 파일 이름에 .pgc가 있을 경우 제거하고\n" +".c를 추가하여 이름이 지정됩니다.\n" + +#: ecpg.c:61 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"문제점 보고 주소: <%s>\n" + +#: ecpg.c:62 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 홈페이지: <%s>\n" + +#: ecpg.c:140 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: 실행 가능한 경로를 지정할 수 없습니다\n" + +#: ecpg.c:175 ecpg.c:332 ecpg.c:343 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: \"%s\" 파일 열 수 없음: %s\n" + +#: ecpg.c:218 ecpg.c:231 ecpg.c:247 ecpg.c:273 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "자제한 사항은 \"%s --help\" 명령으로 살펴보십시오.\n" + +#: ecpg.c:242 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: 파서 디버그 지원(-d)을 사용할 수 없음\n" + +#: ecpg.c:261 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, PostgreSQL 포함 C 전처리기, 버전 %s\n" + +#: ecpg.c:263 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... 여기서 검색 시작:\n" + +#: ecpg.c:266 +#, c-format +msgid "end of search list\n" +msgstr "검색 목록의 끝\n" + +#: ecpg.c:272 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: 지정된 입력 파일 없음\n" + +#: ecpg.c:466 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "\"%s\" 커서가 선언되었지만 열리지 않음" + +#: ecpg.c:479 preproc.y:128 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "출력 파일 \"%s\"을(를) 제거할 수 없음\n" + +#: pgc.l:502 +#, c-format +msgid "unterminated /* comment" +msgstr "마무리 안된 /* 주석" + +#: pgc.l:519 +#, c-format +msgid "unterminated bit string literal" +msgstr "마무리 안된 비트 문자열 문자" + +#: pgc.l:527 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "마무리 안된 16진수 문자열 문자" + +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "잘못된 비트 문자열 리터럴" + +#: pgc.l:623 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "xqs 안에 다룰 수 없는 이전 상태값 있음\n" + +#: pgc.l:652 pgc.l:754 +#, c-format +msgid "unterminated quoted string" +msgstr "마무리 안된 따옴표 안의 문자열" + +#: pgc.l:703 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "마무리 안된 따옴표 안의 문자열" + +#: pgc.l:721 pgc.l:734 +#, c-format +msgid "zero-length delimited identifier" +msgstr "길이가 0인 구분 식별자" + +#: pgc.l:745 +#, c-format +msgid "unterminated quoted identifier" +msgstr "마무리 안된 따옴표 안의 식별자" + +#: pgc.l:1076 +#, c-format +msgid "nested /* ... */ comments" +msgstr "중첩된 /* ... */ 주석" + +#: pgc.l:1169 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "EXEC SQL UNDEF 명령에 식별자 누락" + +#: pgc.l:1187 pgc.l:1200 pgc.l:1216 pgc.l:1229 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "중첩된 EXEC SQL IFDEF 조건이 너무 많음" + +#: pgc.l:1245 pgc.l:1256 pgc.l:1271 pgc.l:1293 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "일치하는 \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\" 누락" + +#: pgc.l:1247 pgc.l:1258 pgc.l:1439 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "\"EXEC SQL ENDIF;\" 누락" + +#: pgc.l:1273 pgc.l:1295 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "두 개 이상의 EXEC SQL ELSE" + +#: pgc.l:1318 pgc.l:1332 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "일치하지 않는 EXEC SQL ENDIF" + +#: pgc.l:1387 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "EXEC SQL IFDEF 명령에 식별자 누락" + +#: pgc.l:1396 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "EXEC SQL DEFINE 명령에 식별자 누락" + +#: pgc.l:1429 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "EXEC SQL INCLUDE 명령에 구문 오류 발생" + +#: pgc.l:1479 +#, c-format +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "" +"내부 오류: 상태값을 알 수 없습니다. 이 문제를 <%s> 주소로 " +"알려주십시오." + +#: pgc.l:1631 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "오류: 포함 경로 \"%s/%s\"이(가) %d줄에서 너무 길어서 건너뜀\n" + +#: pgc.l:1654 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "포함 파일 \"%s\"을(를) %d줄에서 열 수 없음" + +#: preproc.y:31 +msgid "syntax error" +msgstr "구문 오류" + +#: preproc.y:82 +#, c-format +msgid "WARNING: " +msgstr "경고: " + +#: preproc.y:85 +#, c-format +msgid "ERROR: " +msgstr "오류: " + +#: preproc.y:512 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "\"%s\" 이름의 커서가 없음" + +#: preproc.y:541 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "형식 정의에 이니셜라이저가 허용되지 않음" + +#: preproc.y:543 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "\"string\" 자료형 이름은 인포믹스 모드에서 예약어로 쓰입니다" + +#: preproc.y:550 preproc.y:15960 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "\"%s\" 형식이 이미 정의됨" + +#: preproc.y:575 preproc.y:16603 preproc.y:16928 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "단순 데이터 형식에 다차원 배열이 지원되지 않음" + +#: preproc.y:1704 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "CLOSE DATABASE 문에 AT 옵션이 허용되지 않음" + +#: preproc.y:1952 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "CONNECT 문에 AT 옵션이 허용되지 않음" + +#: preproc.y:1986 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "DISCONNECT 문에 AT 옵션이 허용되지 않음" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "SET CONNECTION 문에 AT 옵션이 허용되지 않음" + +#: preproc.y:2063 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "TYPE 문에 AT 옵션이 허용되지 않음" + +#: preproc.y:2072 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "VAR 문에 AT 옵션이 허용되지 않음" + +#: preproc.y:2079 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "WHENEVER 문에 AT 옵션이 허용되지 않음" + +#: preproc.y:2156 preproc.y:2328 preproc.y:2333 preproc.y:2456 preproc.y:4034 +#: preproc.y:4682 preproc.y:5624 preproc.y:5924 preproc.y:7542 preproc.y:9081 +#: preproc.y:9086 preproc.y:11921 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "지원되지 않는 기능이 서버에 전달됨" + +#: preproc.y:2714 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL이 구현되지 않음" + +#: preproc.y:3382 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN이 구현되지 않음" + +#: preproc.y:10060 preproc.y:15545 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "서로 다른 선언 구문에서 \"%s\" 변수 사용은 지원하지 않습니다" + +#: preproc.y:10062 preproc.y:15547 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "\"%s\" 커서가 이미 정의됨" + +#: preproc.y:10502 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "더 이상 지원되지 않는 LIMIT #,# 구문이 서버에 전달됨" + +#: preproc.y:10835 preproc.y:10842 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "FROM 절 내의 subquery 에는 반드시 alias 를 가져야만 합니다" + +#: preproc.y:15268 preproc.y:15275 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS에서 INTO를 지정할 수 없음" + +#: preproc.y:15311 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "\"@\"이 필요한데 \"%s\"이(가) 있음" + +#: preproc.y:15323 +#, c-format +msgid "" +"only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are " +"supported" +msgstr "" +"\"tcp\" 및 \"unix\" 프로토콜과 데이터베이스 형식 \"postgresql\"만 지원됨" + +#: preproc.y:15326 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "\"://\"가 필요한데 \"%s\"이(가) 있음" + +#: preproc.y:15331 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "" +"Unix-domain 소켓은 \"localhost\"에서만 작동하며 \"%s\"에서는 작동하지 않음" + +#: preproc.y:15357 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "\"postgresql\"이 필요한데 \"%s\"이(가) 있음" + +#: preproc.y:15360 +#, c-format +msgid "invalid connection type: %s" +msgstr "잘못된 연결 형식: %s" + +#: preproc.y:15369 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "\"@\" 또는 \"://\"가 필요한데 \"%s\"이(가) 있음" + +#: preproc.y:15444 preproc.y:15462 +#, c-format +msgid "invalid data type" +msgstr "잘못된 데이터 형식" + +#: preproc.y:15473 preproc.y:15490 +#, c-format +msgid "incomplete statement" +msgstr "불완전한 문" + +#: preproc.y:15476 preproc.y:15493 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "인식할 수 없는 토큰 \"%s\"" + +#: preproc.y:15763 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "숫자 및 10진수 데이터 형식에만 전체 자릿수/소수 자릿수 인수 포함" + +#: preproc.y:15775 +#, c-format +msgid "interval specification not allowed here" +msgstr "여기에는 간격 지정이 허용되지 않음" + +#: preproc.y:15935 preproc.y:15987 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "중첩된 구조/union 정의에 수준이 너무 많음" + +#: preproc.y:16110 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "varchar에 대한 포인터가 구현되지 않음" + +#: preproc.y:16297 preproc.y:16322 +#, c-format +msgid "using unsupported DESCRIBE statement" +msgstr "지원되지 않는 DESCRIBE 문 사용" + +#: preproc.y:16569 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "EXEC SQL VAR 명령에 이니셜라이저가 허용되지 않음" + +#: preproc.y:16886 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "입력에서 표시기의 배열이 허용되지 않음" + +#: preproc.y:17073 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "연산자는 동적 정의 영역에서는 사용할 수 없음" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:17114 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s, \"%s\" 부근" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "메모리 부족" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "인식할 수 없는 변수 형식 코드 %d" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "\"%s\" 변수가 다른 자료형의 지역 변수에 의해 숨겨졌음" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "\"%s\" 변수가 지역 변수에 의해 숨겨졌음" + +#: type.c:277 +#, c-format +msgid "" +"indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "\"%s\" 지시자 변수가 지역 변수의 다른 자료형 때문에 숨겨졌음" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "\"%s\" 지시자 변수가 지역 변수에 의해 숨겨졌음" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "배열/포인터의 표시기는 배열/포인터여야 함" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "중첩된 배열은 지원되지 않음(문자열 제외)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "구조의 표시기는 구조여야 함" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "단순 데이터 형식의 표시기는 단순이어야 함" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "\"%s\" 지시 구조체는 맴버가 너무 적음" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "\"%s\" 지시 구조체는 맴버가 너무 많음" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "인식할 수 없는 설명자 항목 코드 %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "잘못된 형식의 변수 \"%s\"" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "\"%s\" 변수가 포인터가 아님" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "\"%s\" 변수가 구조나 union의 포인터가 아님" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "\"%s\" 변수가 구조나 union이 아님" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "\"%s\" 변수가 배열이 아님" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "\"%s\" 변수가 선언되지 않음" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "표시기 변수에 정수 형식이 있어야 함" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "인식할 수 없는 데이터 형식 이름 \"%s\"" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "다차원 배열이 지원되지 않음" + +#: variable.c:534 +#, c-format +msgid "" +"multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "" +"multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "다중단계 포인터(2단계 이상)는 지원하지 않음; 발견된 레벨: %d" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "이 데이터 형식에는 포인터에 대한 포인터가 지원되지 않음" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "구조에는 다차원 배열이 지원되지 않음" diff --git a/src/interfaces/ecpg/preproc/po/pl.po b/src/interfaces/ecpg/preproc/po/pl.po new file mode 100644 index 0000000..c3a2fe2 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/pl.po @@ -0,0 +1,674 @@ +# Polish message translation file for ecpg +# Copyright (C) 2011 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# Begina Felicysym , 2011, 2012. +# grzegorz , 2014, 2017. +msgid "" +msgstr "" +"Project-Id-Version: ecpg (PostgreSQL 9.1)\n" +"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" +"POT-Creation-Date: 2017-03-14 17:38+0000\n" +"PO-Revision-Date: 2017-03-14 19:42+0200\n" +"Last-Translator: grzegorz \n" +"Language-Team: begina.felicysym@wp.eu\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Virtaal 0.7.1\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "zmienna \"%s\" musi mieć typ numeryczny" + +#: descriptor.c:124 descriptor.c:146 +#, c-format +msgid "descriptor \"%s\" does not exist" +msgstr "deskryptor \"%s\" nie istnieje" + +#: descriptor.c:161 descriptor.c:213 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "element nagłówka deskryptora \"%d\" nie istnieje" + +#: descriptor.c:183 +#, c-format +msgid "nullable is always 1" +msgstr "nullable jest zawsze 1" + +#: descriptor.c:186 +#, c-format +msgid "key_member is always 0" +msgstr "key_member jest zawsze 0" + +#: descriptor.c:280 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "element deskryptora \"%s\" nie jest zaimplementowany" + +#: descriptor.c:290 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "element deskryptora \"%s\" nie może zostać ustawiony" + +#: ecpg.c:35 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s jest osadzonym w PostgreSQL preprocesorem SQL dla programów C.\n" +"\n" + +#: ecpg.c:37 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Sposób użycia:\n" +" %s [OPCJE]... PLIK...\n" +"\n" + +#: ecpg.c:40 +#, c-format +msgid "Options:\n" +msgstr "Opcje:\n" + +#: ecpg.c:41 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c automatycznie generuje kod w C z osadzonego kodu SQL;\n" +" dotyczy to EXEC SQL TYPE\n" + +#: ecpg.c:43 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\"\n" +msgstr "" +" -C TRYB ustala tryb kompatybilności; TRYB może być jednym z\n" +" \"INFORMIX\", \"INFORMIX_SE\"\n" + +#: ecpg.c:46 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d generuje wyjście debugowania parsera\n" + +#: ecpg.c:48 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL definiuje SYMBOL\n" + +#: ecpg.c:49 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h parsuje plik nagłówkowy, opcja ta zawiera opcję \"-c\"\n" + +#: ecpg.c:50 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i parsuje również systemowe pliki nagłówkowe\n" + +#: ecpg.c:51 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I FOLDER przeszukuje FOLDER w poszukiwaniu plików nagłówkowych\n" + +#: ecpg.c:52 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o PLIKOUT zapisuje wynik do PLIKOUT\n" + +#: ecpg.c:53 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPCJA określa zachowanie uruchomienia; OPTCJA może być:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" + +#: ecpg.c:55 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression wykonanie w trybie testów regresyjnych\n" + +#: ecpg.c:56 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t włącza automatyczne zatwierdzanie transakcji\n" + +#: ecpg.c:57 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version wypisuje informacje o wersji i kończy\n" + +#: ecpg.c:58 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help pokazuje ten ekran pomocy i kończy\n" + +#: ecpg.c:59 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Jeżeli nie wskazano pliku wyjścia, nazwa jest tworzona przez dodanie .c\n" +"do nazwy pliku wejścia, po usunięciu .pgc jeśli obecne.\n" + +#: ecpg.c:61 +#, c-format +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Błędy proszę przesyłać na adres .\n" + +#: ecpg.c:139 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: nie można odnaleźć własnej ścieżki programu wykonywalnego\n" + +#: ecpg.c:174 ecpg.c:327 ecpg.c:337 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: nie można otworzyć pliku \"%s\": %s\n" + +#: ecpg.c:213 ecpg.c:226 ecpg.c:242 ecpg.c:268 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Spróbuj \"%s --help\" aby uzyskać więcej informacji.\n" + +#: ecpg.c:237 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: wsparcie debugu analizatora (-d) niedostępne\n" + +#: ecpg.c:256 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, preprocesor C osadzony w PostgreSQL, wersja %s\n" + +#: ecpg.c:258 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... wyszukiwanie zaczyna się tutaj:\n" + +#: ecpg.c:261 +#, c-format +msgid "end of search list\n" +msgstr "koniec listy wyszukiwania\n" + +#: ecpg.c:267 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: nie wskazano pliku wejściowego\n" + +#: ecpg.c:460 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "kursor \"%s\" został zadeklarowany, ale nie otwarty" + +#: ecpg.c:473 preproc.y:127 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "nie można usunąć pliku wyjścia \"%s\"\n" + +#: pgc.l:431 +#, c-format +msgid "unterminated /* comment" +msgstr "nie zakończony komentarz /*" + +#: pgc.l:444 +#, c-format +msgid "invalid bit string literal" +msgstr "nieprawidłowa stała łańcucha bitów" + +#: pgc.l:453 +#, c-format +msgid "unterminated bit string literal" +msgstr "niezakończona stała łańcucha bitów" + +#: pgc.l:469 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "niezakończona stała łańcucha szesnastkowego" + +#: pgc.l:547 +#, c-format +msgid "unterminated quoted string" +msgstr "niezakończona stała łańcuchowa" + +#: pgc.l:605 pgc.l:618 +#, c-format +msgid "zero-length delimited identifier" +msgstr "ograniczony identyfikator o długości zero" + +#: pgc.l:626 +#, c-format +msgid "unterminated quoted identifier" +msgstr "niezakończony łańcuch identyfikatora" + +#: pgc.l:881 +#, c-format +msgid "nested /* ... */ comments" +msgstr "zagnieżdżone komentarze /* ... */" + +#: pgc.l:974 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "brakujący identyfikator w poleceniu EXEC SQL UNDEF" + +#: pgc.l:1020 pgc.l:1034 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "brak pasującego \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" + +#: pgc.l:1023 pgc.l:1036 pgc.l:1212 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "brak \"EXEC SQL ENDIF;\"" + +#: pgc.l:1052 pgc.l:1071 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "więcej niż jeden EXEC SQL ELSE" + +#: pgc.l:1093 pgc.l:1107 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "niedopasowany EXEC SQL ENDIF" + +#: pgc.l:1127 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "zbyt wiele zagłębień warunków EXEC SQL IFDEF" + +#: pgc.l:1160 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "brakujący identyfikator w poleceniu EXEC SQL IFDEF" + +#: pgc.l:1169 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "brakujący identyfikator w poleceniu EXEC SQL DEFINE" + +#: pgc.l:1202 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "błąd składni w poleceniu EXEC SQL INCLUDE" + +#: pgc.l:1251 +#, c-format +msgid "internal error: unreachable state; please report this to " +msgstr "" +"błąd wewnętrzny: nieosiągalny stan; proszę przesłać go na adres " + +#: pgc.l:1375 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Błąd: załączona ścieżka \"%s/%s\" jest zbyt długa w linii %d, pominięto\n" + +#: pgc.l:1398 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "nie można otworzyć załączonego pliku \"%s\" w linii %d" + +#: preproc.y:31 +msgid "syntax error" +msgstr "błąd składni" + +#: preproc.y:81 +#, c-format +msgid "WARNING: " +msgstr "OSTRZEŻENIE: " + +#: preproc.y:84 +#, c-format +msgid "ERROR: " +msgstr "BŁĄD: " + +#: preproc.y:508 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "kursor \"%s\" nie istnieje" + +#: preproc.y:537 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "inicjator niedozwolony w definicji typu" + +#: preproc.y:539 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "nazwa typu \"string\" jest zarezerwowana w trybie Informix" + +#: preproc.y:546 preproc.y:15234 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "typ \"%s\" już istnieje" + +#: preproc.y:570 preproc.y:15892 preproc.y:16212 variable.c:620 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "wielowymiarowe tablice dla prostych typów danych nie są wspierane" + +#: preproc.y:1675 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "opcja AT niedozwolona w wyrażeniu CLOSE DATABASE" + +#: preproc.y:1886 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "opcja AT niedozwolona w wyrażeniu CONNECT" + +#: preproc.y:1920 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "opcja AT niedozwolona w wyrażeniu DISCONNECT" + +#: preproc.y:1975 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "opcja AT niedozwolona w wyrażeniu SET CONNECTION" + +#: preproc.y:1997 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "opcja AT niedozwolona w wyrażeniu TYPE" + +#: preproc.y:2006 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "opcja AT niedozwolona w wyrażeniu VAR" + +#: preproc.y:2013 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "opcja AT niedozwolona w wyrażeniu WHENEVER" + +#: preproc.y:2265 preproc.y:2270 preproc.y:2386 preproc.y:3923 preproc.y:5434 +#: preproc.y:5443 preproc.y:5751 preproc.y:7247 preproc.y:8659 preproc.y:8664 +#: preproc.y:11368 preproc.y:11989 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "niewspierana cecha zostanie przekazana na serwer" + +#: preproc.y:2644 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL nie jest zaimplementowane" + +#: preproc.y:3268 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN nie zostało zaimplementowane" + +#: preproc.y:9534 preproc.y:14823 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "użycie zmiennej \"%s\" w innych wyrażeniach deklaracji nie jest wspierane" + +#: preproc.y:9536 preproc.y:14825 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "kursor \"%s\" już istnieje" + +#: preproc.y:9966 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "już nie wspierana składnia LIMIT #,# przesłana na serwer" + +#: preproc.y:10282 preproc.y:10289 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "podzapytanie z FROM musi mieć alias" + +#: preproc.y:14553 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS nie może zawierać INTO" + +#: preproc.y:14589 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "oczekiwano \"@\", znaleziono \"%s\"" + +#: preproc.y:14601 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "" +"tylko protokoły \"tcp\" i \"unix\" oraz typ bazy danych \"postgresql\" są " +"wspierane" + +#: preproc.y:14604 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "oczekiwano \"://\", znaleziono \"%s\"" + +#: preproc.y:14609 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Gniazda dziedziny Uniksa działają tylko na \"localhost\" a nie na \"%s\"" + +#: preproc.y:14635 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "oczekiwano \"postgresql\", znaleziono \"%s\"" + +#: preproc.y:14638 +#, c-format +msgid "invalid connection type: %s" +msgstr "niepoprawny typ połączenia: %s" + +#: preproc.y:14647 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "oczekiwano \"@\" lub \"://\", znaleziono \"%s\"" + +#: preproc.y:14722 preproc.y:14740 +#, c-format +msgid "invalid data type" +msgstr "niepoprawny typ danych" + +#: preproc.y:14751 preproc.y:14768 +#, c-format +msgid "incomplete statement" +msgstr "niepełne wyrażenie" + +#: preproc.y:14754 preproc.y:14771 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "niezrozumiały token \"%s\"" + +#: preproc.y:15045 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "tylko typy danych numeric i decimal mają argument precyzji/skali" + +#: preproc.y:15057 +#, c-format +msgid "interval specification not allowed here" +msgstr "specyfikacja interwału niedozwolona tutaj" + +#: preproc.y:15209 preproc.y:15261 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "zbyt wiele poziomów w zagnieżdżonej definicji structure/union" + +#: preproc.y:15400 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "wskazania na varchar nie są zaimplementowane" + +#: preproc.y:15587 preproc.y:15612 +#, c-format +msgid "using unsupported DESCRIBE statement" +msgstr "użycie niewspieranego wyrażenia DESCRIBE" + +#: preproc.y:15859 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "inicjator niedopuszczalny w poleceniu EXEC SQL VAR" + +#: preproc.y:16170 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "tabele wskazań nie są dozwolone w wejściu" + +#: preproc.y:16391 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "operator niedozwolony w definicji zmiennej" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:16429 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s w lub pobliżu \"%s\"" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "brak pamięci" + +#: type.c:212 type.c:664 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "niezrozumiały kod typu zmiennej %d" + +#: type.c:261 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "zmienna \"%s\" została przykryta przez zmienną lokalną innego typu" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "zmienna \"%s\" została przykryta przez zmienną lokalną" + +#: type.c:275 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "" +"zmienna wskaźnikowa \"%s\" została przykryta przez zmienną lokalną innego typu" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "zmienna wskaźnikowa \"%s\" została przykryta przez zmienną lokalną" + +#: type.c:285 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "wskaźnik do array/pointer musi być array/pointer" + +#: type.c:289 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "tabele zagnieżdżone nie są wspierane (poza ciągami znaków)" + +#: type.c:331 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "wskaźnik do struct musi być struct" + +#: type.c:351 type.c:372 type.c:392 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "wskaźnik do prostego typu danych musi być prosty" + +#: type.c:723 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "niezrozumiały kod deskryptora elementu %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "niepoprawnie utworzona zmienna \"%s\"" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "zmienna \"%s\" nie jest wskaźnikiem" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "zmienna \"%s\" nie jest wskazaniem na structure ani union" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "zmienna \"%s\" nie jest ani structure ani union" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "zmienna \"%s\" nie jest tablicą" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "zmienna \"%s\" nie została zadeklarowana" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "zmienna wskaźnikowa musi mieć typ integer" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "niezrozumiała nazwa typu danych \"%s\"" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "wielowymiarowe tablice nie są wspierane" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "" +"wielopoziomowe wskaźniki (więcej niż 2 poziomy) nie są wspierane; znaleziono " +"%d poziom" +msgstr[1] "" +"wielopoziomowe wskaźniki (więcej niż 2 poziomy) nie są wspierane; znaleziono " +"%d poziomy" +msgstr[2] "" +"wielopoziomowe wskaźniki (więcej niż 2 poziomy) nie są wspierane; znaleziono " +"%d poziomów" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "wskazanie na wskaźnik nie jest wspierane dla tego typu danych" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "wielowymiarowe tablice dla struktur nie są wspierane" + +#~ msgid "COPY FROM STDOUT is not possible" +#~ msgstr "COPY FROM STDOUT nie jest możliwe" + +#~ msgid "COPY TO STDIN is not possible" +#~ msgstr "COPY TO STDIN nie jest możliwe" diff --git a/src/interfaces/ecpg/preproc/po/pt_BR.po b/src/interfaces/ecpg/preproc/po/pt_BR.po new file mode 100644 index 0000000..f64ecae --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/pt_BR.po @@ -0,0 +1,653 @@ +# Brazilian Portuguese message translation file for ecpg +# Copyright (C) 2009 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# Fernando Ike de Oliveira , 2009. +# Euler Taveira de Oliveira , 2010-2016. +# +msgid "" +msgstr "" +"Project-Id-Version: PostgreSQL 9.6\n" +"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" +"POT-Creation-Date: 2016-10-25 16:32-0300\n" +"PO-Revision-Date: 2018-06-25 08:59+0200\n" +"Last-Translator: Euler Taveira de Oliveira \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n>1);\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "variável \"%s\" deve ter um tipo númerico" + +#: descriptor.c:124 descriptor.c:146 +#, c-format +msgid "descriptor \"%s\" does not exist" +msgstr "descritor \"%s\" não existe" + +#: descriptor.c:161 descriptor.c:212 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "item do cabeçalho do descritor \"%d\" não existe" + +#: descriptor.c:183 +#, c-format +msgid "nullable is always 1" +msgstr "nullable é sempre 1" + +#: descriptor.c:186 +#, c-format +msgid "key_member is always 0" +msgstr "key_member é sempre 0" + +#: descriptor.c:279 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "item do descritor \"%s\" não está implementado" + +#: descriptor.c:289 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "item do descritor \"%s\" não pode ser definido" + +#: ecpg.c:35 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "%s é o pré-processador SQL embutido do PostgreSQL para programas em C.\n\n" + +#: ecpg.c:37 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Uso:\n" +" %s [OPÇÃO]... ARQUIVO...\n" +"\n" + +#: ecpg.c:40 +#, c-format +msgid "Options:\n" +msgstr "Opções:\n" + +#: ecpg.c:41 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c gera automaticamente código C a partir do código SQL embutido;\n" +" isso afeta o EXEC SQL TYPE\n" + +#: ecpg.c:43 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\"\n" +msgstr "" +" -C mode define o modo de compatilidade; MODE pode ser um de\n" +" \"INFORMIX\", \"INFORMIX_SE\"\n" + +#: ecpg.c:46 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d gera saída de depuração do analisador\n" + +#: ecpg.c:48 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SÍMBOLO define SÍMBOLO\n" + +#: ecpg.c:49 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h analisa um arquivo de cabeçalho, essa opção inclui a opção \"-c\"\n" + +#: ecpg.c:50 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i analisa arquivos de cabeçalho do sistema também\n" + +#: ecpg.c:51 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I DIRETÓRIO procura DIRETÓRIO para incluir arquivos\n" + +#: ecpg.c:52 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o ARQUIVO grava resultado no ARQUIVO\n" + +#: ecpg.c:53 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPÇÃO especifica comportamento em tempo de execução; OPÇÃO pode ser:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" + +#: ecpg.c:55 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression executa em modo de teste de regressão\n" + +#: ecpg.c:56 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t habilita o auto efetivação de transações\n" + +#: ecpg.c:57 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version mostra informação sobre a versão e termina\n" + +#: ecpg.c:58 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help mostra essa ajuda e termina\n" + +#: ecpg.c:59 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Se nenhum arquivo de saída for especificado, o nome é formado adicionando .c ao\n" +"nome do arquivo de entrada, após remover .pgc se presente.\n" + +#: ecpg.c:61 +#, c-format +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Relate erros a .\n" + +#: ecpg.c:139 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: não pôde localizar meu próprio caminho executável\n" + +#: ecpg.c:175 ecpg.c:326 ecpg.c:336 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: não pôde abrir arquivo \"%s\": %s\n" + +#: ecpg.c:214 ecpg.c:227 ecpg.c:243 ecpg.c:268 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Tente \"%s --help\" para obter informações adicionais.\n" + +#: ecpg.c:238 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: suporte a depuração do analisador (-d) não está disponível\n" + +#: ecpg.c:256 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %d.%d.%d\n" +msgstr "%s, the pré-processador C embutido do PostgreSQL, versão %d.%d.%d\n" + +#: ecpg.c:258 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... pesquisa inicia aqui:\n" + +#: ecpg.c:261 +#, c-format +msgid "end of search list\n" +msgstr "fim da lista de pesquisa\n" + +#: ecpg.c:267 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: nenhum arquivo de entrada foi especificado\n" + +#: ecpg.c:459 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "cursor \"%s\" foi declarado mas não foi aberto" + +#: ecpg.c:472 preproc.y:127 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "não pôde remover arquivo de saída \"%s\"\n" + +#: pgc.l:440 +#, c-format +msgid "unterminated /* comment" +msgstr "comentário /* não foi terminado" + +#: pgc.l:453 +#, c-format +msgid "invalid bit string literal" +msgstr "cadeia de bits inválida" + +#: pgc.l:462 +#, c-format +msgid "unterminated bit string literal" +msgstr "cadeia de bits não foi terminada" + +#: pgc.l:478 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "cadeia de caracteres hexadecimal não foi terminada" + +#: pgc.l:556 +#, c-format +msgid "unterminated quoted string" +msgstr "cadeia de caracteres entre aspas não foi terminada" + +#: pgc.l:613 pgc.l:626 +#, c-format +msgid "zero-length delimited identifier" +msgstr "identificador delimitado tem tamanho zero" + +#: pgc.l:634 +#, c-format +msgid "unterminated quoted identifier" +msgstr "identificador entre aspas não foi terminado" + +#: pgc.l:889 +#, c-format +msgid "nested /* ... */ comments" +msgstr "comentários /* ... */ aninhados" + +#: pgc.l:982 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "faltando identificador no comando EXEC SQL UNDEF" + +#: pgc.l:1028 pgc.l:1042 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "faltando correspondente \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" + +#: pgc.l:1031 pgc.l:1044 pgc.l:1220 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "faltando \"EXEC SQL ENDIF;\"" + +#: pgc.l:1060 pgc.l:1079 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "mais de um EXEC SQL ELSE" + +#: pgc.l:1101 pgc.l:1115 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "EXEC SQL ENDIF não tem correspondente" + +#: pgc.l:1135 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "muitas condições EXEC SQL IFDEF aninhadas" + +#: pgc.l:1168 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "faltando identificador no comando EXEC SQL IFDEF" + +#: pgc.l:1177 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "faltando identificador no comando EXEC SQL IFDEF" + +#: pgc.l:1210 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "erro de sintaxe no comando EXEC SQL INCLUDE" + +#: pgc.l:1259 +#, c-format +msgid "internal error: unreachable state; please report this to " +msgstr "erro interno: estado inacessível; por favor relato isso a " + +#: pgc.l:1383 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Erro: caminho de inclusão \"%s/%s\" é muito longo na linha %d, ignorando\n" + +#: pgc.l:1406 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "não pôde abrir arquivo de inclusão \"%s\" na linha %d" + +#: preproc.y:31 +msgid "syntax error" +msgstr "erro de sintaxe" + +#: preproc.y:81 +#, c-format +msgid "WARNING: " +msgstr "AVISO: " + +#: preproc.y:84 +#, c-format +msgid "ERROR: " +msgstr "ERRO: " + +#: preproc.y:508 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "cursor \"%s\" não existe" + +#: preproc.y:537 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "inicializador não é permitido na definição do tipo" + +#: preproc.y:539 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "nome de tipo \"string\" é reservado no modo Informix" + +#: preproc.y:546 preproc.y:14626 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "tipo \"%s\" já está definido" + +#: preproc.y:570 preproc.y:15284 preproc.y:15604 variable.c:620 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "matrizes multidimensionais para tipo de dados simples não são suportadas" + +#: preproc.y:1634 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "opção AT não é permitida no comando CLOSE DATABASE" + +#: preproc.y:1849 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "opção AT não é permitida no comando CONNECT" + +#: preproc.y:1883 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "opção AT não é permitida no comando DISCONNECT" + +#: preproc.y:1938 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "opção AT não é permitida no comando SET CONNECTION" + +#: preproc.y:1960 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "opção AT não é permitida no comando TYPE" + +#: preproc.y:1969 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "opção AT não é permitida no comando VAR" + +#: preproc.y:1976 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "opção AT não é permitida no comando WHENEVER" + +#: preproc.y:2228 preproc.y:2233 preproc.y:2349 preproc.y:3759 preproc.y:5173 +#: preproc.y:5182 preproc.y:5466 preproc.y:6902 preproc.y:8140 preproc.y:8145 +#: preproc.y:10776 preproc.y:11393 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "funcionalidade não suportada será enviada ao servidor" + +#: preproc.y:2607 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL não está implementado" + +#: preproc.y:3147 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN não está implementado" + +#: preproc.y:9035 preproc.y:14215 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "utilizar variável \"%s\" em comandos de declaração diferentes não é suportado" + +#: preproc.y:9037 preproc.y:14217 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "cursor \"%s\" já está definido" + +#: preproc.y:9467 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "sintaxe LIMIT #,# que não é suportada foi enviada ao servidor" + +#: preproc.y:9775 preproc.y:9782 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "subconsulta no FROM deve ter um aliás" + +#: preproc.y:13945 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS não pode especificar INTO" + +#: preproc.y:13981 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "esperado \"@\", encontrado \"%s\"" + +#: preproc.y:13993 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "somente os protocolos \"tcp\" e \"unix\" e tipo banco de dados \"postgressql\" sãosuportados" + +#: preproc.y:13996 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "esperado \"://\", encontrado \"%s\"" + +#: preproc.y:14001 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Soquetes de domínio Unix trabalham somente com \"localhost\" e não com \"%s\"" + +#: preproc.y:14027 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "esperado \"postgresql\", encontrado \"%s\"" + +#: preproc.y:14030 +#, c-format +msgid "invalid connection type: %s" +msgstr "tipo de conexão inválido: %s" + +#: preproc.y:14039 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "esperado \"@\" ou \"://\", encontrado \"%s\"" + +#: preproc.y:14114 preproc.y:14132 +#, c-format +msgid "invalid data type" +msgstr "tipo de dado inválido" + +#: preproc.y:14143 preproc.y:14160 +#, c-format +msgid "incomplete statement" +msgstr "comando incompleto" + +#: preproc.y:14146 preproc.y:14163 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "informação desconhecida \"%s\"" + +#: preproc.y:14437 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "somente os tipos de dados numeric e decimal possuem argumento de precisão/escala" + +#: preproc.y:14449 +#, c-format +msgid "interval specification not allowed here" +msgstr "especificação de intervalo não é permitida aqui" + +#: preproc.y:14601 preproc.y:14653 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "muitos níveis em definição aninhada de estrutura/união" + +#: preproc.y:14792 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "ponteiros para varchar não estão implentados" + +#: preproc.y:14979 preproc.y:15004 +#, c-format +msgid "using unsupported DESCRIBE statement" +msgstr "utilizando comando DESCRIBE que não é suportado" + +#: preproc.y:15251 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "inicilização não é permitido no comando EXEC SQL VAR" + +#: preproc.y:15562 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "matrizes do indicadores não são permitidas na entrada" + +#: preproc.y:15783 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "operador não é permitido na definição da variável" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:15821 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s em ou próximo a \"%s\"" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "sem memória" + +#: type.c:212 type.c:664 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "tipo de código de variável %d é desconhecido" + +#: type.c:261 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "variável \"%s\" está escondida por uma variável local de um tipo diferente" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "variável \"%s\" está escondida por uma variável local" + +#: type.c:275 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "variável de indicador \"%s\" está escondida por uma variável local de um tipo diferente" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "variável de indicador \"%s\" está escondida por uma variável local" + +#: type.c:285 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "indicador para matriz/ponteiro tem de ser matriz/ponteiro" + +#: type.c:289 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "matrizes aninhadas não são suportadas (exceto cadeia de caracteres)" + +#: type.c:331 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "indicador para struct tem que ser struct" + +#: type.c:351 type.c:372 type.c:392 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "indicador para tipo de dados simples tem que ser simples" + +#: type.c:723 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "código do item do descritor %d é desconhecido" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "variável \"%s\" possui formato incorreto" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "variável \"%s\" não é um ponteiro" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "variável \"%s\" não é um ponteiro para uma estrutura ou uma união" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "variável \"%s\" não é nem uma estrutura nem uma união" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "variável \"%s\" não é uma matriz" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "variável \"%s\" não foi declarada" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "variável de indicador deve ter um tipo inteiro" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "nome do tipo dados \"%s\" é desconhecido" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "matrizes multidimensionais não são suportadas" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "ponteiros com múltiplos níveis (mais do que 2 níveis) não são suportados; %d nível encontrado" +msgstr[1] "ponteiros com múltiplos níveis (mais do que 2 níveis) não são suportados; %d níveis encontrados" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "ponteiro para ponteiro não é suportado para esse tipo de dado" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "matrizes multidimensionais para estruturas não são suportadas" diff --git a/src/interfaces/ecpg/preproc/po/ru.po b/src/interfaces/ecpg/preproc/po/ru.po new file mode 100644 index 0000000..056cd13 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/ru.po @@ -0,0 +1,741 @@ +# Russian message translation file for ecpg +# Copyright (C) 2012-2016 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# Alexander Lakhin , 2012-2017, 2018, 2019, 2020, 2021. +msgid "" +msgstr "" +"Project-Id-Version: ecpg (PostgreSQL current)\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-09-01 12:57+0300\n" +"PO-Revision-Date: 2021-09-04 10:54+0300\n" +"Last-Translator: Alexander Lakhin \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "переменная \"%s\" должна иметь числовой тип" + +#: descriptor.c:125 descriptor.c:156 +#, c-format +msgid "descriptor %s bound to connection %s does not exist" +msgstr "дескриптор %s, привязанный к соединению %s, не существует" + +#: descriptor.c:127 descriptor.c:158 +#, c-format +msgid "descriptor %s bound to the default connection does not exist" +msgstr "дескриптор %s, привязанный к соединению по умолчанию, не существует" + +#: descriptor.c:173 descriptor.c:225 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "заголовок дескриптора не содержит элемент \"%d\"" + +#: descriptor.c:195 +#, c-format +msgid "nullable is always 1" +msgstr "NULLABLE всегда равно 1" + +#: descriptor.c:198 +#, c-format +msgid "key_member is always 0" +msgstr "KEY_MEMBER всегда равно 0" + +#: descriptor.c:292 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "поле \"%s\" в дескрипторе не реализовано" + +#: descriptor.c:302 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "установить поле \"%s\" в дескрипторе нельзя" + +#: ecpg.c:36 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s - препроцессор SQL-вставок в программах на C для PostgreSQL.\n" +"\n" + +#: ecpg.c:38 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Использование:\n" +" %s [ПАРАМЕТР]... ФАЙЛ...\n" +"\n" + +#: ecpg.c:41 +#, c-format +msgid "Options:\n" +msgstr "Параметры:\n" + +#: ecpg.c:42 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c автоматически генерировать код C из внедрённого SQL-кода;\n" +" (это касается EXEC SQL TYPE)\n" + +#: ecpg.c:44 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C РЕЖИМ установить режим совместимости; допустимый РЕЖИМ:\n" +" \"INFORMIX\", \"INFORMIX_SE\" или \"ORACLE\"\n" + +#: ecpg.c:47 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d генерировать отладочные сообщения при разборе\n" + +#: ecpg.c:49 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D СИМВОЛ определить (define) СИМВОЛ\n" + +#: ecpg.c:50 +#, c-format +msgid "" +" -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h разобрать файл заголовка (включает параметр \"-c\")\n" + +#: ecpg.c:51 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i разобрать также системные включаемые файлы\n" + +#: ecpg.c:52 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I КАТАЛОГ искать включаемые файлы в указанном каталоге\n" + +#: ecpg.c:53 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o ФАЙЛ записать результат в ФАЙЛ\n" + +#: ecpg.c:54 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r ПАРАМЕТР определить режим выполнения; допустимый ПАРАМЕТР:\n" +" \"no_indicator\", \"prepare\" или \"questionmarks\"\n" + +#: ecpg.c:56 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression запустить в режиме тестирования регрессии\n" + +#: ecpg.c:57 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t включить автофиксацию транзакций\n" + +#: ecpg.c:58 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version показать версию и выйти\n" + +#: ecpg.c:59 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показать эту справку и выйти\n" + +# skip-rule: space-before-period +#: ecpg.c:60 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Если выходной файл не указан, к имени входного файла без расширения .pgc\n" +"добавляется .c.\n" + +#: ecpg.c:62 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Об ошибках сообщайте по адресу <%s>.\n" + +#: ecpg.c:63 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: ecpg.c:141 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: не удалось найти путь к собственному исполняемому файлу\n" + +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: не удалось открыть файл \"%s\": %s\n" + +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" + +#: ecpg.c:243 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: отладочные сообщения при разборе (-d) не поддерживаются\n" + +#: ecpg.c:262 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, препроцессор внедрённого в С языка СУБД PostgreSQL, версия %s\n" + +#: ecpg.c:264 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "поиск файлов для EXEC SQL INCLUDE ... начинается в каталогах:\n" + +#: ecpg.c:267 +#, c-format +msgid "end of search list\n" +msgstr "конец списка поиска\n" + +#: ecpg.c:273 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: нет входных файлов\n" + +#: ecpg.c:477 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "курсор \"%s\" был объявлен, но не открыт" + +#: ecpg.c:490 preproc.y:130 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "ошибка при удалении выходного файла \"%s\"\n" + +#: pgc.l:502 +#, c-format +msgid "unterminated /* comment" +msgstr "незавершённый комментарий /*" + +#: pgc.l:519 +#, c-format +msgid "unterminated bit string literal" +msgstr "оборванная битовая строка" + +#: pgc.l:527 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "оборванная шестнадцатеричная строка" + +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "неверная битовая строка" + +#: pgc.l:607 +#, c-format +msgid "invalid hex string literal" +msgstr "неверная шестнадцатеричная строка" + +#: pgc.l:625 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "" +"необрабатываемое предыдущее состояние при обнаружении закрывающего " +"апострофа\n" + +#: pgc.l:651 pgc.l:760 +#, c-format +msgid "unterminated quoted string" +msgstr "незавершённая строка в кавычках" + +#: pgc.l:702 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "незавершённая строка с $" + +#: pgc.l:720 pgc.l:740 +#, c-format +msgid "zero-length delimited identifier" +msgstr "пустой идентификатор в кавычках" + +#: pgc.l:751 +#, c-format +msgid "unterminated quoted identifier" +msgstr "незавершённый идентификатор в кавычках" + +#: pgc.l:1082 +#, c-format +msgid "nested /* ... */ comments" +msgstr "вложенные комментарии /* ... */" + +#: pgc.l:1175 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "в команде EXEC SQL UNDEF отсутствует идентификатор" + +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "слишком много вложенных условий EXEC SQL IFDEF" + +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "нет соответствующего \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" + +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "отсутствует \"EXEC SQL ENDIF;\"" + +#: pgc.l:1279 pgc.l:1301 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "неоднократная команда EXEC SQL ELSE" + +#: pgc.l:1324 pgc.l:1338 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "непарная команда EXEC SQL ENDIF" + +#: pgc.l:1393 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "в команде EXEC SQL IFDEF отсутствует идентификатор" + +#: pgc.l:1402 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "в команде EXEC SQL DEFINE отсутствует идентификатор" + +#: pgc.l:1435 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "ошибка синтаксиса в команде EXEC SQL INCLUDE" + +#: pgc.l:1485 +#, c-format +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "внутренняя ошибка: недостижимое состояние; пожалуйста, сообщите в <%s>" + +#: pgc.l:1637 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "" +"Ошибка: путь включаемых файлов \"%s/%s\" в строке %d слишком длинный, " +"пропускается\n" + +#: pgc.l:1660 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "не удалось открыть включаемый файл \"%s\" (строка %d)" + +#: preproc.y:31 +msgid "syntax error" +msgstr "ошибка синтаксиса" + +#: preproc.y:84 +#, c-format +msgid "WARNING: " +msgstr "ПРЕДУПРЕЖДЕНИЕ: " + +#: preproc.y:87 +#, c-format +msgid "ERROR: " +msgstr "ОШИБКА: " + +#: preproc.y:514 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "курсор \"%s\" не существует" + +#: preproc.y:543 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "определение типа не может включать инициализатор" + +#: preproc.y:545 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "имя типа \"string\" в режиме Informix зарезервировано" + +#: preproc.y:552 preproc.y:17675 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "тип \"%s\" уже определён" + +#: preproc.y:577 preproc.y:18310 preproc.y:18635 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "многомерные массивы с простыми типами данных не поддерживаются" + +#: preproc.y:599 +#, c-format +msgid "connection %s is overwritten with %s by DECLARE statement %s" +msgstr "подключение %s заменяется на %s оператором DECLARE %s" + +#: preproc.y:1753 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "оператор CLOSE DATABASE с параметром AT не поддерживается" + +#: preproc.y:2001 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "оператор CONNECT с параметром AT не поддерживается" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "оператор DISCONNECT с параметром AT не поддерживается" + +#: preproc.y:2096 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "оператор SET CONNECTION с параметром AT не поддерживается" + +#: preproc.y:2118 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "оператор TYPE с параметром AT не поддерживается" + +#: preproc.y:2127 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "оператор VAR с параметром AT не поддерживается" + +#: preproc.y:2134 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "оператор WHENEVER с параметром AT не поддерживается" + +#: preproc.y:2211 preproc.y:2383 preproc.y:2388 preproc.y:2511 preproc.y:4143 +#: preproc.y:4807 preproc.y:5340 preproc.y:5678 preproc.y:5978 preproc.y:7514 +#: preproc.y:9082 preproc.y:9087 preproc.y:11915 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "неподдерживаемая функция будет передана серверу" + +#: preproc.y:2769 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL не реализовано" + +#: preproc.y:3464 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "операция COPY FROM STDIN не реализована" + +#: preproc.y:10014 preproc.y:17250 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "" +"в режиме INFORMIX нельзя использовать \"database\" в качестве имени курсора" + +#: preproc.y:10021 preproc.y:17260 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "" +"использование переменной \"%s\" в разных операторах DECLARE не поддерживается" + +#: preproc.y:10023 preproc.y:17262 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "курсор \"%s\" уже определён" + +#: preproc.y:10497 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "не поддерживаемое более предложение LIMIT #,# передано на сервер" + +#: preproc.y:10830 preproc.y:10837 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "подзапрос во FROM должен иметь псевдоним" + +#: preproc.y:16942 preproc.y:16949 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "в CREATE TABLE AS нельзя указать INTO" + +#: preproc.y:16985 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "ожидался знак \"@\", но на этом месте \"%s\"" + +#: preproc.y:16997 +#, c-format +msgid "" +"only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are " +"supported" +msgstr "" +"поддерживаются только протоколы \"tcp\" и \"unix\", а тип базы данных - " +"\"postgresql\"" + +#: preproc.y:17000 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "ожидалось \"://\", но на этом месте \"%s\"" + +#: preproc.y:17005 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Unix-сокеты работают только с \"localhost\", но не с адресом \"%s\"" + +#: preproc.y:17031 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "ожидался тип \"postgresql\", но на этом месте \"%s\"" + +#: preproc.y:17034 +#, c-format +msgid "invalid connection type: %s" +msgstr "неверный тип подключения: %s" + +#: preproc.y:17043 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "ожидалось \"@\" или \"://\", но на этом месте \"%s\"" + +#: preproc.y:17118 preproc.y:17136 +#, c-format +msgid "invalid data type" +msgstr "неверный тип данных" + +#: preproc.y:17147 preproc.y:17164 +#, c-format +msgid "incomplete statement" +msgstr "неполный оператор" + +#: preproc.y:17150 preproc.y:17167 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "нераспознанное ключевое слово \"%s\"" + +#: preproc.y:17212 +#, c-format +msgid "name \"%s\" is already declared" +msgstr "имя \"%s\" уже объявлено" + +#: preproc.y:17478 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "" +"точность/масштаб можно указать только для типов данных numeric и decimal" + +#: preproc.y:17490 +#, c-format +msgid "interval specification not allowed here" +msgstr "определение интервала здесь не допускается" + +#: preproc.y:17650 preproc.y:17702 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "слишком много уровней в определении вложенной структуры/объединения" + +#: preproc.y:17825 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "указатели на varchar не реализованы" + +#: preproc.y:18276 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "команда EXEC SQL VAR не может включать инициализатор" + +#: preproc.y:18593 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "массивы индикаторов на входе недопустимы" + +#: preproc.y:18780 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "недопустимый оператор в определении переменной" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:18821 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s (примерное положение: \"%s\")" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "нехватка памяти" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "нераспознанный код типа переменной %d" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "переменная \"%s\" скрыта локальной переменной другого типа" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "переменная \"%s\" скрыта локальной переменной" + +#: type.c:277 +#, c-format +msgid "" +"indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "переменная-индикатор \"%s\" скрыта локальной переменной другого типа" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "переменная-индикатор \"%s\" скрыта локальной переменной" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "индикатор для массива/указателя должен быть массивом/указателем" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "вложенные массивы не поддерживаются (за исключением строк)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "индикатор структуры должен быть структурой" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "индикатор простого типа должен быть простым" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "в структуре индикаторе \"%s\" слишком мало членов" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "в структуре индикаторе \"%s\" слишком много членов" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "нераспознанный код элемента дескриптора %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "неправильно оформленная переменная \"%s\"" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "переменная \"%s\" - не указатель" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "переменная \"%s\" - не указатель на структуру или объединение" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "переменная \"%s\" - не структура и не объединение" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "переменная \"%s\" - не массив" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "переменная \"%s\" не объявлена" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "переменная-индикатор должна быть целочисленной" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "нераспознанное имя типа данных \"%s\"" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "многомерные массивы не поддерживаются" + +#: variable.c:534 +#, c-format +msgid "" +"multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "" +"multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "" +"многоуровневые указатели (больше 2 уровней) не поддерживаются, обнаружен %d " +"уровень" +msgstr[1] "" +"многоуровневые указатели (больше 2 уровней) не поддерживаются, обнаружено %d " +"уровня" +msgstr[2] "" +"многоуровневые указатели (больше 2 уровней) не поддерживаются, обнаружено %d " +"уровней" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "для этого типа данных указатели на указатели не поддерживаются" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "многомерные массивы структур не поддерживаются" + +#~ msgid "using unsupported DESCRIBE statement" +#~ msgstr "используется неподдерживаемый оператор DESCRIBE" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to .\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу .\n" + +#~ msgid "declared name \"%s\" is already defined" +#~ msgstr "объявленное имя \"%s\" уже определено" + +#~ msgid "COPY FROM STDOUT is not possible" +#~ msgstr "операция COPY FROM STDOUT невозможна" + +#~ msgid "COPY TO STDIN is not possible" +#~ msgstr "операция COPY TO STDIN невозможна" diff --git a/src/interfaces/ecpg/preproc/po/sv.po b/src/interfaces/ecpg/preproc/po/sv.po new file mode 100644 index 0000000..a0ff805 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/sv.po @@ -0,0 +1,699 @@ +# SWEDISHE message translation file for ecpg +# Copyright (C) 2017 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# Dennis Björklund , 2017, 2018, 2019, 2020, 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: PostgreSQL 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-11-06 17:09+0000\n" +"PO-Revision-Date: 2021-11-06 21:58+0100\n" +"Last-Translator: Dennis Björklund \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "variabel \"%s\" måste ha en numerisk typ" + +#: descriptor.c:125 descriptor.c:156 +#, c-format +msgid "descriptor %s bound to connection %s does not exist" +msgstr "deskriptor %s kopplad till anslutning %s finns inte" + +#: descriptor.c:127 descriptor.c:158 +#, c-format +msgid "descriptor %s bound to the default connection does not exist" +msgstr "deskriptor %s kopplad till standardanslutning finns inte" + +#: descriptor.c:173 descriptor.c:225 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "deskriptor-header-post \"%d\" finns inte" + +#: descriptor.c:195 +#, c-format +msgid "nullable is always 1" +msgstr "nullable är alltid 1" + +#: descriptor.c:198 +#, c-format +msgid "key_member is always 0" +msgstr "key_member är alltid 0" + +#: descriptor.c:292 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "deskriptor-post \"%s\" är inte implementerad" + +#: descriptor.c:302 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "deskriptor-post \"%s\" kan inte sättas" + +#: ecpg.c:36 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s är PostgreSQLs inbäddade SQL-preprocessor för C-program.\n" +"\n" + +#: ecpg.c:38 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Användning:\n" +" %s [FLAGGA]... FIL...\n" +"\n" + +#: ecpg.c:41 +#, c-format +msgid "Options:\n" +msgstr "Flaggor:\n" + +#: ecpg.c:42 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c generera automatiskt C-kod från inbäddad SQL-kod;\n" +" detta påverkar EXEC SQL TYPE\n" + +#: ecpg.c:44 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C LÄGE sätt kompabilitetsläge; LÄGE kan vara en av\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" + +#: ecpg.c:47 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d generera parser-debug-utmatning\n" + +#: ecpg.c:49 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL definiera SYMBOL\n" + +#: ecpg.c:50 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h parsa en header-fil, denna flagga inkluderar flaggan \"-c\"\n" + +#: ecpg.c:51 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i parsa system-include-filer dessutom\n" + +#: ecpg.c:52 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I KATALOG sök i KATALOG efter include-filer\n" + +#: ecpg.c:53 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o UTFIL skriv resultat till UTFIL\n" + +#: ecpg.c:54 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r FLAGGA ange runtime-beteende; FLAGGA kan vara en av:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" + +#: ecpg.c:56 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression kör i regressions-test-läge\n" + +#: ecpg.c:57 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t slå på auto-commit av transaktioner\n" + +#: ecpg.c:58 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version visa versionsinformation, avsluta sedan\n" + +#: ecpg.c:59 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help visa denna hjälp, avsluta sedan\n" + +#: ecpg.c:60 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Om ingen utdatafil anges så skapas namnet genom att lägga till .c till\n" +"indatafilnamnet, detta efter att .pgc strippats bort om det var med.\n" + +#: ecpg.c:62 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Rapportera fel till <%s>.\n" + +#: ecpg.c:63 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "hemsida för %s: <%s>\n" + +#: ecpg.c:141 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: kunde inte hitta min egna körbara fils sökväg\n" + +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: kunde inte öppna fil \"%s\": %s\n" + +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Försök med \"%s --help\" för mer information.\n" + +#: ecpg.c:243 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: parser-debug-stöd (-d) är inte tillgängligt\n" + +#: ecpg.c:262 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, PostgreSQLs inbäddade C-preprocessor, version %s\n" + +#: ecpg.c:264 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... sökning startar här:\n" + +#: ecpg.c:267 +#, c-format +msgid "end of search list\n" +msgstr "slut på söklista\n" + +#: ecpg.c:273 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: inga indatafiler angivna\n" + +#: ecpg.c:477 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "markören \"%s\" har deklarerats men inte öppnats" + +#: ecpg.c:490 preproc.y:130 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "kunde inte ta bort utdatafil \"%s\"\n" + +#: pgc.l:502 +#, c-format +msgid "unterminated /* comment" +msgstr "ej avslutad /*-kommentar" + +#: pgc.l:519 +#, c-format +msgid "unterminated bit string literal" +msgstr "ej avslutad bitsträngslitteral" + +#: pgc.l:527 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "ej avslutad hexadecimal stränglitteral" + +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "ogiltig bit-sträng-literal" + +#: pgc.l:607 +#, c-format +msgid "invalid hex string literal" +msgstr "ogiltig hex-sträng-literal" + +#: pgc.l:625 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "tidigare state i xqs som ej kan hanteras\n" + +#: pgc.l:651 pgc.l:760 +#, c-format +msgid "unterminated quoted string" +msgstr "icketerminerad citerad sträng" + +#: pgc.l:702 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "icke terminerad dollarciterad sträng" + +#: pgc.l:720 pgc.l:740 +#, c-format +msgid "zero-length delimited identifier" +msgstr "noll-längds avdelad identifierare" + +#: pgc.l:751 +#, c-format +msgid "unterminated quoted identifier" +msgstr "ej avslutad citerad identifierare" + +#: pgc.l:1082 +#, c-format +msgid "nested /* ... */ comments" +msgstr "nästlade /* ... */-kommentarer" + +#: pgc.l:1175 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "saknar identifierare i EXEC SQL UNDEF-kommando" + +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "för många nästlade EXEC SQL IFDEF-villkor" + +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "saknar matchande \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" + +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "saknar \"EXEC SQL ENDIF;\"" + +#: pgc.l:1279 pgc.l:1301 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "mer än en EXEC SQL ELSE" + +#: pgc.l:1324 pgc.l:1338 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "ej matchad EXEC SQL ENDIF" + +#: pgc.l:1393 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "saknar identifierare i EXEC SQL IFDEF-kommando" + +#: pgc.l:1402 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "saknar identifierare i EXEC SQL DEFINE-kommando" + +#: pgc.l:1435 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "syntaxfel i EXEC SQL INCLUDE-kommando" + +#: pgc.l:1485 +#, c-format +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "internt fel: state som ej skall kunna nås; vänligen rapportera detta till <%s>" + +#: pgc.l:1637 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Fel: include-sökväg \"%s/%s\" är för lång på rad %d, hoppar över\n" + +#: pgc.l:1660 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "kunde inte öppna inkludefil \"%s\" på rad %d" + +#: preproc.y:31 +msgid "syntax error" +msgstr "syntaxfel" + +#: preproc.y:84 +#, c-format +msgid "WARNING: " +msgstr "VARNING: " + +#: preproc.y:87 +#, c-format +msgid "ERROR: " +msgstr "FEL: " + +#: preproc.y:514 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "markör \"%s\" existerar inte" + +#: preproc.y:543 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "initialiserare tillåts inte i typdefinition" + +#: preproc.y:545 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "typnamn \"string\" är reserverat i Informix-läge" + +#: preproc.y:552 preproc.y:17675 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "typen \"%s\" är redan definierad" + +#: preproc.y:577 preproc.y:18310 preproc.y:18635 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "multidimensionella array:er för enkla datatyper stöds inte" + +#: preproc.y:599 +#, c-format +msgid "connection %s is overwritten with %s by DECLARE statement %s" +msgstr "anslutning %s överskriven med %s av DECLARE-sats %s" + +#: preproc.y:1753 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "AT-flaggan tillåts inte i CLOSE DATABASE-sats" + +#: preproc.y:2001 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "AT-flaggan tillåts inte i CONNECT-sats" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "AT-flaggan tillåts inte i DISCONNECT-sats" + +#: preproc.y:2096 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "AT-flaggan tillåts inte i SET CONNECTION-sats" + +#: preproc.y:2118 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "AT-flaggan tillåts inte i TYPE-sats" + +#: preproc.y:2127 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "AT-flaggan tillåts inte i VAR-sats" + +#: preproc.y:2134 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "AT-flaggan tillåts inte i WHENEVER-sats" + +#: preproc.y:2211 preproc.y:2383 preproc.y:2388 preproc.y:2511 preproc.y:4143 +#: preproc.y:4807 preproc.y:5340 preproc.y:5678 preproc.y:5978 preproc.y:7514 +#: preproc.y:9082 preproc.y:9087 preproc.y:11915 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "ej stödd funktion skickass till servern" + +#: preproc.y:2769 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL är inte implementerad" + +#: preproc.y:3464 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN är inte implementerad" + +#: preproc.y:10014 preproc.y:17250 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "\"database\" kan inte användas som markörsnamn i INFORMIX-läge" + +#: preproc.y:10021 preproc.y:17260 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "använda variabel \"%s\" i olika deklarationssatser stöds inte" + +#: preproc.y:10023 preproc.y:17262 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "markören \"%s\" är redan definierad" + +#: preproc.y:10497 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "ej längre stödd syntax LIMIT #,# har skickats till servern" + +#: preproc.y:10830 preproc.y:10837 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "subfråga i FROM måste ha ett alias" + +#: preproc.y:16942 preproc.y:16949 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS kan inte ange INTO" + +#: preproc.y:16985 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "förväntade \"@\", hittade \"%s\"" + +#: preproc.y:16997 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "bara protokoll \"tcp\" och \"unix\" samt databastyp \"postgresql\" stöds" + +#: preproc.y:17000 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "förväntade \"://\", hittade \"%s\"" + +#: preproc.y:17005 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Unix-domän-socket fungerart bara på \"localhost\" men inte på \"%s\"" + +#: preproc.y:17031 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "förväntade \"postgresql\", hittade \"%s\"" + +#: preproc.y:17034 +#, c-format +msgid "invalid connection type: %s" +msgstr "ogiltig anslutningstyp: %s" + +#: preproc.y:17043 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "förväntade \"@\" eller \"://\", hittade \"%s\"" + +#: preproc.y:17118 preproc.y:17136 +#, c-format +msgid "invalid data type" +msgstr "ogiltig datatyp" + +#: preproc.y:17147 preproc.y:17164 +#, c-format +msgid "incomplete statement" +msgstr "ofullständig sats" + +#: preproc.y:17150 preproc.y:17167 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "okänd symbol \"%s\"" + +#: preproc.y:17212 +#, c-format +msgid "name \"%s\" is already declared" +msgstr "namnet \"%s\" är redan deklarerat" + +#: preproc.y:17478 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "bara datatyperna numeric och decimal har precision/skala-argument" + +#: preproc.y:17490 +#, c-format +msgid "interval specification not allowed here" +msgstr "intervallspecifikation tillåts inte här" + +#: preproc.y:17650 preproc.y:17702 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "för många nästlade nivåer i struktur/union-definition" + +#: preproc.y:17825 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "pekare till varchar är inte implementerat" + +#: preproc.y:18276 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "initialiserare tillåts inte i EXEC SQL VAR-kommando" + +#: preproc.y:18593 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "array:er av indikatorer tillåts inte vid indata" + +#: preproc.y:18780 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "operator tillåts inte i variabeldefinition" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:18821 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s vid eller nära \"%s\"" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "slut på minne" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "okänd variabeltypkod %d" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "variabel \"%s\" döljs av en lokal variabel av annan typ" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "variabel \"%s\" döljs av en lokal variabel" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "indikatorvariabel \"%s\" döljs av en lokal variabel av annan typ" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "indikatorvariabel \"%s\" döljs av en lokal variabel" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "indikator för array/pekare måste vara en array/pekare" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "nästlade array:er stöds inte (förutom strängar)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "indikator för en struktur måste vara en struktur" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "indikator för enkla datatyper måste vara enkel" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "indikatorstruktur \"%s\" har för få medlemmar" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "indikatorstruktur \"%s\" har för många medlemmar" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "okänd deskriptor-post-kod %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "inkorrekt formatterad variabel \"%s\"" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "variabel \"%s\" är inte en pekare" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "variabel \"%s\" är inte en pekare till en struktur eller union" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "variabel \"%s\" är varken en struktur eller en union" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "variabel \"%s\" är inte en array" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "variabel \"%s\" är inte deklarerad" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "indikatorvariabel måste ha en heltalstyp" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "okänt datatypsnamn \"%s\"" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "multidimensionella array:er stöds inte" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "multinivåpekare (mer än 2 nivåer) stöds inte; hittade %d nivå" +msgstr[1] "multinivåpekare (mer än 2 nivåer) stöds inte; hittade %d nivåer" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "pekare till pekare stöds inte för denna datatyp" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "multidimensionella array:er av strukturer stöds inte" diff --git a/src/interfaces/ecpg/preproc/po/tr.po b/src/interfaces/ecpg/preproc/po/tr.po new file mode 100644 index 0000000..dc19759 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/tr.po @@ -0,0 +1,699 @@ +# LANGUAGE message translation file for ecpg +# Copyright (C) 2009 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# FIRST AUTHOR , 2009. +# Abdullah GÜLNER , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: PostgreSQL 8.4\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2019-04-26 13:39+0000\n" +"PO-Revision-Date: 2021-09-16 09:37+0200\n" +"Last-Translator: Abdullah GÜLNER \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.7.1\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "\"%s\" değişkeninin sayısal veri tipi olmalı" + +#: descriptor.c:124 descriptor.c:146 +#, c-format +msgid "descriptor \"%s\" does not exist" +msgstr "\"%s\" açıklayıcısı mevcut değil" + +#: descriptor.c:161 descriptor.c:213 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "\"%d\" açıklayıcı başlık maddesi mevcut değil" + +#: descriptor.c:183 +#, c-format +msgid "nullable is always 1" +msgstr "nullable her zaman 1'dir" + +#: descriptor.c:186 +#, c-format +msgid "key_member is always 0" +msgstr "key_member her zaman 0'dır." + +#: descriptor.c:280 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "\"%s\" açıklayıcı öğesi kodlanmamıştır" + +#: descriptor.c:290 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "\"%s\" açıklayıcı öğesi ayarlanamaz" + +#: ecpg.c:36 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s C programları için PostgreSQL'e gömüşü SQL önişlemcisidir.\n" +"\n" + +#: ecpg.c:38 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Kullanımı:\n" +" %s [SEÇENEK]... DOSYA...\n" +"\n" + +#: ecpg.c:41 +#, c-format +msgid "Options:\n" +msgstr "Seçenekler:\n" + +#: ecpg.c:42 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c gömülü SQL kodundan otomatik olarak C kodu üret;\n" +" bu EXEC SQL TYPE'ı etkiler\n" + +#: ecpg.c:44 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MOD uyumluluk modunu ayarla; MOD aşağıdakilerden birisi olabilir\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" + +#: ecpg.c:47 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d ayrıştırıcı hata ayıklama çıktısını oluştur\n" + +#: ecpg.c:49 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SEMBOL SEMBOLü tanımla\n" + +#: ecpg.c:50 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h başlık dosyasını ayrıştır; bu seçenek \"-c\" seçeneğini içerir\n" + +#: ecpg.c:51 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i sistem include dosyalarını da ayrıştırl\n" + +#: ecpg.c:52 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I DİZİN dosyaları içermek için DİZİN dizinini araştır\n" + +#: ecpg.c:53 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o ÇIKTI DOSYASI sonucu ÇIKTI DOSYASIna yaz\n" + +#: ecpg.c:54 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r SEÇENEK çalışma zamanı davranışını belirt; SEÇENEK şunlardan birisi olabilir:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" + +#: ecpg.c:56 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression regression testi modunda çalış\n" + +#: ecpg.c:57 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t transactionların otomatik commit olması özelliğini aç\n" + +#: ecpg.c:58 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version sürüm bilgisini göster, sonra çık\n" + +#: ecpg.c:59 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help bu yardımı göster, sonra çık\n" + +#: ecpg.c:60 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Eğer çıktı dosyası belirtilmediyse, dosyanın adı eğer sonunda .pgc varsa\n" +"kaldırıldıktan sonra girdi dosyasının sonuna .c eklenerek oluşturulur.\n" + +#: ecpg.c:62 +#, c-format +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Hataları adresine bildirebilirsiniz.\n" + +#: ecpg.c:182 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: kendi çalıştırılabilir dosyamın yolunu bulamadım\n" + +#: ecpg.c:217 ecpg.c:374 ecpg.c:385 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: \"%s\" dosyası açılamadı: %s\n" + +#: ecpg.c:260 ecpg.c:273 ecpg.c:289 ecpg.c:315 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Daha fazla bilgi için \"%s --help\" yazın\n" + +#: ecpg.c:284 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: ayrıştırıcı hata ayıklama desteği (-d) yok\n" + +#: ecpg.c:303 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, PostgreSQL gömülü C önişlemcisi, %s sürümü\n" + +#: ecpg.c:305 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... araması burada başlıyor:\n" + +#: ecpg.c:308 +#, c-format +msgid "end of search list\n" +msgstr "arama listesinin sonu\n" + +#: ecpg.c:314 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: girdi dosyası belirtilmedi\n" + +#: ecpg.c:497 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "\"%s\" imleci tanımlanmış ama açılmamış" + +#: ecpg.c:510 preproc.y:129 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "\"%s\" çıktı dosyası kaldırılamadı\n" + +#: pgc.l:472 +#, c-format +msgid "unterminated /* comment" +msgstr "/* açıklama sonlandırılmamış" + +#: pgc.l:490 +#, c-format +msgid "invalid bit string literal" +msgstr "geçersiz bit dizini bilgisi" + +#: pgc.l:502 +#, c-format +msgid "unterminated bit string literal" +msgstr "sonuçlandırılmamış bit string literal" + +#: pgc.l:518 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "sonuçlandırılmamış hexadecimal string literal" + +#: pgc.l:614 pgc.l:718 +#, c-format +msgid "unterminated quoted string" +msgstr "sonuçlandırılmamış tırnakla sınırlandırılmış satır" + +#: pgc.l:665 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "sonlandırılmamış dolar işaretiyle sınırlandırılmış satır" + +#: pgc.l:684 pgc.l:697 +#, c-format +msgid "zero-length delimited identifier" +msgstr "sınırlandırılmış tanım sıfır uzunluklu" + +#: pgc.l:709 +#, c-format +msgid "unterminated quoted identifier" +msgstr "sonuçlandırılmamış tırnakla sınırlandırılmış tanım" + +#: pgc.l:1040 +#, c-format +msgid "nested /* ... */ comments" +msgstr "iç içe /* ... */ açıklamalar (comment)" + +#: pgc.l:1133 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "EXEC SQL UNDEF komutunda eksik tanımlayıcı" + +#: pgc.l:1179 pgc.l:1193 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "eksik \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\" eşleşmesi" + +#: pgc.l:1182 pgc.l:1195 pgc.l:1371 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "eksik \"EXEC SQL ENDIF;\"" + +#: pgc.l:1211 pgc.l:1230 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "birden fazla EXEC SQL ELSE" + +#: pgc.l:1252 pgc.l:1266 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "eşlenmeyen EXEC SQL ENDIF" + +#: pgc.l:1286 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "Çok fazla yuvalanmış EXEC SQL IFDEF koşulu" + +#: pgc.l:1319 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "EXEC SQL IFDEF komutunda eksik belirteç" + +#: pgc.l:1328 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "EXEC SQL DEFINE komutunda eksik tanımlayıcı" + +#: pgc.l:1361 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "EXEC SQL INCLUDE komutunda sözdizimi hatası" + +#: pgc.l:1411 +#, c-format +msgid "internal error: unreachable state; please report this to " +msgstr "dahili hata: erişilemeyen durum: bunu lütfen adresine bildiriniz." + +#: pgc.l:1562 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Hata: \"%s/%s\" include yolu çok uzun, satır numarası %d; atlanıyor\n" + +#: pgc.l:1585 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr " \"%s\" include dosyası %d. satırda açılamadı" + +#: preproc.y:31 +msgid "syntax error" +msgstr "söz dizim hatası " + +#: preproc.y:83 +#, c-format +msgid "WARNING: " +msgstr "UYARI:" + +#: preproc.y:86 +#, c-format +msgid "ERROR: " +msgstr "HATA:" + +#: preproc.y:510 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "\"%s\" imleci mevcut değil" + +#: preproc.y:539 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "tip tanımlamasında ilklendiriciye izin verilmez" + +#: preproc.y:541 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "\"string\" tip adı Informix modunda ayrılmıştır" + +#: preproc.y:548 preproc.y:15828 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "\"%s\" tipi zaten tanımlanmış" + +#: preproc.y:573 preproc.y:16499 preproc.y:16824 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "basit veri tipleri için çok boyutlu diziler desteklenmemektedir." + +#: preproc.y:1896 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "AT seçeneğine CONNECT ifadesinde izin verilmemektedir" + +#: preproc.y:1934 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "AT seçeneğine DISCONNECT ifadesinde izin verilmemektedir" + +#: preproc.y:1996 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "AT seçeneğine SET CONNECTION ifadesinde izin verilmemektedir" + +#: preproc.y:2018 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "AT seçeneğine TYPE ifadesinde izin verilmemektedir" + +#: preproc.y:2027 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "AT seçeneğine VAR ifadesinde izin verilmemektedir" + +#: preproc.y:2034 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "AT seçeneğine WHENEVER ifadesinde izin verilmemektedir" + +#: preproc.y:2111 preproc.y:2283 preproc.y:2288 preproc.y:2411 preproc.y:4004 +#: preproc.y:5593 preproc.y:5893 preproc.y:7521 preproc.y:9033 preproc.y:9038 +#: preproc.y:11831 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "desteklenmeyen özellik sunucuya aktarılacaktır" + +#: preproc.y:2669 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL kodlanmamıştır" + +#: preproc.y:3327 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "AT seçeneğine CLOSE DATABASE ifadesinde izin verilmemektedir" + +#: preproc.y:3352 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN kodlanmamıştır" + +#: preproc.y:9977 preproc.y:15411 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "\"%s\" değşkenini farklı declare ifadeleri arasında kullanmak desteklenmemektedir" + +#: preproc.y:9979 preproc.y:15413 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "\"%s\" imleci zaten tanımlanmış" + +#: preproc.y:10420 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "artık desteklenmeyen LIMIT #,# sözdizimi sunucuya aktarıldı" + +#: preproc.y:10745 preproc.y:10752 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "FROM öğesindeki subquery bir aliası almalıdır" + +#: preproc.y:15102 preproc.y:15109 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS işleminde INTO kullanılamaz" + +#: preproc.y:15145 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "\"@\" bekleniyordu; \"%s\" bulundu" + +#: preproc.y:15157 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "sadece \"tcp\" ve \"unix\" protokolleri ile \"postgresql\" veritabanı tipi desteklenmektedir." + +#: preproc.y:15160 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "\"://\" bekleniyordu; \"%s\" bulundu" + +#: preproc.y:15165 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Unix-domain soketleri sadece \"localhost\" üzerinde çalışabilir; ancak \"%s\" üzerinde çalışamaz." + +#: preproc.y:15191 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "\"postgresql\" bekleniyordu; \"%s\" bulundu" + +#: preproc.y:15194 +#, c-format +msgid "invalid connection type: %s" +msgstr "Geçersiz bağlantı tipi: %s" + +#: preproc.y:15203 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "\"@\" or \"://\" bekleniyordu; \"%s\" bulundu" + +#: preproc.y:15278 preproc.y:15296 +#, c-format +msgid "invalid data type" +msgstr "geçersiz veri tipi" + +#: preproc.y:15307 preproc.y:15324 +#, c-format +msgid "incomplete statement" +msgstr "eksik ifade" + +#: preproc.y:15310 preproc.y:15327 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "tanımlanmayan imge \"%s\"" + +#: preproc.y:15373 +#, c-format +msgid "declared name %s is already defined" +msgstr "belirtilen isim, %s zaten tanımlanmış" + +#: preproc.y:15631 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "sadece sayısal ve ondalıklı verip tiplerinin ondalık bilgisi vardır" + +#: preproc.y:15643 +#, c-format +msgid "interval specification not allowed here" +msgstr "aralık belirtimine burada izin verilmiyor" + +#: preproc.y:15803 preproc.y:15855 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "içiçe gelmiş yapı/birleşme tanımında çok fazla seviye" + +#: preproc.y:16006 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "varcharlara işaretçiler henüz uyarlanmadı" + +#: preproc.y:16193 preproc.y:16218 +#, c-format +msgid "using unsupported DESCRIBE statement" +msgstr "desteklenmeyen DESCRIBE ifadesi kullanılıyor" + +#: preproc.y:16465 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "EXEC SQL VAR konutunda ilklendiriciye izin verilmemektedir" + +#: preproc.y:16782 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "belirticilerin dizilerine girdide izin verilmez" + +#: preproc.y:17003 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "değişken tanımlamasında operatöre izin verilmez" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:17044 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "\"%2$s\" yerinde %1$s" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "yetersiz bellek" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "tanımsız değişken tipi kodu %d" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "\"%s\" değişkeni farklı tipteki yerel bir değişken tarafından gizlenmiştir" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "\"%s\" değişkeni yerel bir değişken tarafından gizlenmiştir" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "\"%s\" belirteç değişkeni farklı tipteki yerel bir değişken tarafından gizlenmiştir" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "\"%s\" gösterge değişkeni yerel bir değişken tarafından gizlenmektedir" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "array/pointer için gösterici array/pointer olmalıdır" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "içiçe geçmiş diziler, dizgiler haricinde desteklenmez" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "struct için gösterici (indicator) yine struct olmalı" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "basit veri tipinin göstergesi basit olmalı" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "\"%s\" gösterge yapısının (struct) çok az üyesi var" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "\"%s\" gösterge yapısının (struct) çok fazla üyesi var" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "tanımlanmayan açıklayıcı madde kodu %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "doğru şekilde oluşturulmamış \"%s\" değişkeni" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "\"%s\" değişkeni bir pointer değil" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "\"%s\" değişkeni structure ya da union'a pointer değil" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "\"%s\" değişkeni structure ya da union değil" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "\"%s\" değişkeni bir dizi değil" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "\"%s\" değişkeni bildirilmemiş" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "belirteç değişkeni tamsayı veri tipine sahip olmalı" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "tanımlanmayan veri tipi adı \"%s\"" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "çok boyutlu diziler desteklenmiyor" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "çoklu seviye işaretçileri (İkiden fazla) desteklenmiyor: %d seviye bulundu" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "Bu veri tipi için işaretçiden işaretçiye desteklenmemektedir" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "yapılar için çok boyutlu diziler desteklenmemektedir" + +#~ msgid " --help show this help, then exit\n" +#~ msgstr " --help bu yardımı göster ve çık\n" + +#~ msgid " --version output version information, then exit\n" +#~ msgstr " --version sürüm numarasını yaz ve çık\n" + +#~ msgid "AT option not allowed in DEALLOCATE statement" +#~ msgstr "AT seçeneğine DEALLOCATE ifadesinde izin verilmemektedir" + +#~ msgid "COPY TO STDIN is not possible" +#~ msgstr "COPY TO STDIN mümkün değildir" + +#~ msgid "COPY FROM STDOUT is not possible" +#~ msgstr "COPY FROM STDOUT mümkün değildir" + +#~ msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" +#~ msgstr "INITIALLY DEFERRED olarak tanımlanan kısıtlayıcı DEFERRABLE özelliğine sahip olmalıdır" + +#~ msgid "OLD used in query that is not in a rule" +#~ msgstr "rule olmayan sorgusunda OLD kullanıldı" + +#~ msgid "NEW used in query that is not in a rule" +#~ msgstr "rule olmayan sorgusunda NEW kullanıldı" diff --git a/src/interfaces/ecpg/preproc/po/uk.po b/src/interfaces/ecpg/preproc/po/uk.po new file mode 100644 index 0000000..717def4 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/uk.po @@ -0,0 +1,683 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2022-03-16 09:09+0000\n" +"PO-Revision-Date: 2022-06-19 10:10\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /REL_14_STABLE/ecpg.pot\n" +"X-Crowdin-File-ID: 782\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "змінна \"%s\" повинна мати числовий тип" + +#: descriptor.c:125 descriptor.c:156 +#, c-format +msgid "descriptor %s bound to connection %s does not exist" +msgstr "дескриптор %s, прив'язаний до підключення %s, не існує" + +#: descriptor.c:127 descriptor.c:158 +#, c-format +msgid "descriptor %s bound to the default connection does not exist" +msgstr "дескриптор %s, прив'язаний до підключення за замовчуванням, не існує" + +#: descriptor.c:173 descriptor.c:225 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "елемент заголовка дескриптору \"%d\" не існує" + +#: descriptor.c:195 +#, c-format +msgid "nullable is always 1" +msgstr "nullable завжди 1" + +#: descriptor.c:198 +#, c-format +msgid "key_member is always 0" +msgstr "key_member завжди 0" + +#: descriptor.c:292 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "елемент дескриптору \"%s\" не реалізовано" + +#: descriptor.c:302 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "елемент дескриптору \"%s\" не можна встановити" + +#: ecpg.c:36 +#, c-format +msgid "%s is the PostgreSQL embedded SQL preprocessor for C programs.\n\n" +msgstr "%s - це препроцесор SQL-вставок PostgreSQL для C програм.\n\n" + +#: ecpg.c:38 +#, c-format +msgid "Usage:\n" +" %s [OPTION]... FILE...\n\n" +msgstr "Використання: \n" +" %s [OPTION]... FILE...\n\n" + +#: ecpg.c:41 +#, c-format +msgid "Options:\n" +msgstr "Параметри:\n" + +#: ecpg.c:42 +#, c-format +msgid " -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr " -c автоматично генерувати C-код з вбудованого SQL-коду;\n" +" це стосується EXEC SQL TYPE\n" + +#: ecpg.c:44 +#, c-format +msgid " -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr " -C MODE встановити режим сумісності; допустимий режим може бути одним з:\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" + +#: ecpg.c:47 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d генерувати налагоджувальні повідомлення при аналізі\n" + +#: ecpg.c:49 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL визначити СИМВОЛ\n" + +#: ecpg.c:50 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h аналізувати файл заголовку, цей параметр включає параметр \"-c\"\n" + +#: ecpg.c:51 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i аналізувати системні файли include\n" + +#: ecpg.c:52 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I DIRECTORY шукати файли для включення у зазначенному каталозі\n" + +#: ecpg.c:53 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o OUTFILE записати результат до OUTFILE\n" + +#: ecpg.c:54 +#, c-format +msgid " -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr " -r OPTION визначити поведінку під час виконання; допустимий парамтер може бути:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" + +#: ecpg.c:56 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression запустити в режимі тестування регресії\n" + +#: ecpg.c:57 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t увімкнути автопідтвердження транзакцій\n" + +#: ecpg.c:58 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version показати версію, потім вийти\n" + +#: ecpg.c:59 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку, потім вийти\n" + +#: ecpg.c:60 +#, c-format +msgid "\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "\n" +"Якщо файл виводу не вказано, ім'я файла формується додаванням .c до введеного імені файла, після обрізання розширення .pgc, якщо присутнє.\n" + +#: ecpg.c:62 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Повідомляти про помилки на <%s>.\n" + +#: ecpg.c:63 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: ecpg.c:141 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: не вдалося знайти свій власний шлях для виконання\n" + +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: не вдалося відкрити файл \"%s\": %s\n" + +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" + +#: ecpg.c:243 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: налагоджувальні повідомлення під час аналізу (-d) не підтримуються\n" + +#: ecpg.c:262 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, вбудований препроцесор PostgreSQL, версія %s\n" + +#: ecpg.c:264 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... пошук починається тут:\n" + +#: ecpg.c:267 +#, c-format +msgid "end of search list\n" +msgstr "кінець списку пошуку\n" + +#: ecpg.c:273 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: не вказано вхідні файли\n" + +#: ecpg.c:477 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "курсор \"%s\" був оголошений, але не відкритий" + +#: ecpg.c:490 preproc.y:130 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "не вдалося видалити файл виводу \"%s\"\n" + +#: pgc.l:502 +#, c-format +msgid "unterminated /* comment" +msgstr "незавершений коментар /*" + +#: pgc.l:519 +#, c-format +msgid "unterminated bit string literal" +msgstr "незавершений бітовий рядок" + +#: pgc.l:527 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "незавершений шістнадцятковий рядок" + +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "неприпустимий літерал бітового рядка" + +#: pgc.l:607 +#, c-format +msgid "invalid hex string literal" +msgstr "неприпустимий шістнадцятковий рядок" + +#: pgc.l:625 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "необроблений попередній стан у xqs\n" + +#: pgc.l:651 pgc.l:760 +#, c-format +msgid "unterminated quoted string" +msgstr "незавершений рядок в лапках" + +#: pgc.l:702 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "незавершений рядок з $" + +#: pgc.l:720 pgc.l:740 +#, c-format +msgid "zero-length delimited identifier" +msgstr "пустий ідентифікатор із роздільниками" + +#: pgc.l:751 +#, c-format +msgid "unterminated quoted identifier" +msgstr "незавершений ідентифікатор в лапках" + +#: pgc.l:1082 +#, c-format +msgid "nested /* ... */ comments" +msgstr "вкладені /* ... */ коменарі" + +#: pgc.l:1175 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "відсутній ідентифікатор у команді EXEC SQL UNDEF" + +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "забагато вкладених умов EXEC SQL IFDEF" + +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "немає відповідного \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" + +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "відсутній \"EXEC SQL ENDIF;\"" + +#: pgc.l:1279 pgc.l:1301 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "більше ніж один EXEC SQL ELSE" + +#: pgc.l:1324 pgc.l:1338 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "невідповідний EXEC SQL ENDIF" + +#: pgc.l:1393 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "відсутній ідентифікатор у команді EXEC SQL IFDEF" + +#: pgc.l:1402 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "відсутній ідентифікатор у команді EXEC SQL DEFINE" + +#: pgc.l:1435 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "синтаксична помилка у команді EXEC SQL INCLUDE" + +#: pgc.l:1485 +#, c-format +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "внутрішня помилка: недосяжний стан; будь ласка, повідомте про це на <%s>" + +#: pgc.l:1637 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Помилка: шлях включення \"%s/%s\" занадто довгий у рядку %d, пропускається\n" + +#: pgc.l:1660 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "не вдалося відкрити файл включення \"%s\" у рядку %d" + +#: preproc.y:31 +msgid "syntax error" +msgstr "синтаксична помилка" + +#: preproc.y:84 +#, c-format +msgid "WARNING: " +msgstr "ПОПЕРЕДЖЕННЯ: " + +#: preproc.y:87 +#, c-format +msgid "ERROR: " +msgstr "ПОМИЛКА: " + +#: preproc.y:514 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "курсор \"%s\" не існує" + +#: preproc.y:543 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "ініціалізація заборонена у визначенні типу" + +#: preproc.y:545 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "ім’я типу \"string\" зарезервовано у режимі Informix" + +#: preproc.y:552 preproc.y:17675 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "тип \"%s\" вже визначений" + +#: preproc.y:577 preproc.y:18310 preproc.y:18635 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "багатовимірні масиви для простих типів даних не підтримуються" + +#: preproc.y:599 +#, c-format +msgid "connection %s is overwritten with %s by DECLARE statement %s" +msgstr "підключення %s було перезаписано з %s командою DECLARE %s" + +#: preproc.y:1753 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "Параметр AT не дозволений в інструкції CLOSE DATABASE" + +#: preproc.y:2001 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "Параметр AT не дозволений в інструкції CONNECT" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "Параметр AT не дозволений в інструкції DISCONNECT" + +#: preproc.y:2096 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "Параметр AT не дозволений в інструкції SET CONNECTION" + +#: preproc.y:2118 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "Параметр AT не дозволений в інструкції TYPE" + +#: preproc.y:2127 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "Параметр AT не дозволений в інструкції VAR" + +#: preproc.y:2134 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "Параметр AT не дозволений в інструкції WHENEVER" + +#: preproc.y:2211 preproc.y:2383 preproc.y:2388 preproc.y:2511 preproc.y:4143 +#: preproc.y:4807 preproc.y:5340 preproc.y:5678 preproc.y:5978 preproc.y:7514 +#: preproc.y:9082 preproc.y:9087 preproc.y:11915 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "непідтримувана функція буде передана до сервера" + +#: preproc.y:2769 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "SHOW ALL не реалізовано" + +#: preproc.y:3464 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "COPY FROM STDIN не реалізовано" + +#: preproc.y:10014 preproc.y:17250 +#, c-format +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "\"database\" не може використовуватись як назва курсора в режимі INFORMIX" + +#: preproc.y:10021 preproc.y:17260 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "використання змінної \"%s\" у різних інструкціях declare не підтримується" + +#: preproc.y:10023 preproc.y:17262 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "курсор \"%s\" вже визначено" + +#: preproc.y:10497 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "непідтримуваний синтаксис LIMIT #,# передано до сервера" + +#: preproc.y:10830 preproc.y:10837 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "підзапит в FROM повинен мати псевдонім" + +#: preproc.y:16942 preproc.y:16949 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS не може містити INTO" + +#: preproc.y:16985 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "очікувалося \"@\", знайдено \"%s\"" + +#: preproc.y:16997 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "підтримуються лише протоколи \"tcp\" та \"unix\" і тип бази даних \"postgresql\"" + +#: preproc.y:17000 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "очікувалося \"://\", знайдено \"%s\"" + +#: preproc.y:17005 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Unix-сокети працюють лише з \"localhost\", але не з \"%s\"" + +#: preproc.y:17031 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "очікувалось \"postgresql\", знайдено \"%s\"" + +#: preproc.y:17034 +#, c-format +msgid "invalid connection type: %s" +msgstr "неприпустимий тип підключення: %s" + +#: preproc.y:17043 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "очікувалось \"@\" або \"://\", знайдено \"%s\"" + +#: preproc.y:17118 preproc.y:17136 +#, c-format +msgid "invalid data type" +msgstr "неприпустимий тип даних" + +#: preproc.y:17147 preproc.y:17164 +#, c-format +msgid "incomplete statement" +msgstr "неповний оператор" + +#: preproc.y:17150 preproc.y:17167 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "нерозпізнаний токен \"%s\"" + +#: preproc.y:17212 +#, c-format +msgid "name \"%s\" is already declared" +msgstr "ім'я \"%s\" вже оголошена" + +#: preproc.y:17478 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "точність/масштаб можна вказати лише для типів даних numeric і decimal" + +#: preproc.y:17490 +#, c-format +msgid "interval specification not allowed here" +msgstr "специфікація інтервалу тут не допускається" + +#: preproc.y:17650 preproc.y:17702 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "занадто багато рівнів у визначенні вкладеної структури/об'єднання" + +#: preproc.y:17825 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "вказівників на varchar не реалізовано" + +#: preproc.y:18276 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "команда EXEC SQL VAR не допускає ініціалізатор" + +#: preproc.y:18593 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "вхідні масиви індикаторів не допускаються" + +#: preproc.y:18780 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "у визначенні змінної оператор не допускається" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:18821 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s в або поблизу \"%s\"" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "недостатньо пам'яті" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "нерозпізнаний код типу змінної %d" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "змінна \"%s\" прихована локальною змінною іншого типу" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "змінна \"%s\" прихована локальною змінною" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "змінна-індикатор \"%s\" прихована локальною змінною іншого типу" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "змінна-індикатор \"%s\" прихована локальною змінною" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "індикатор для масиву/вказівника повинен бути масивом/вказівником" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "вкладені масиви не підтримуються (окрім рядків)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "індикатор структури повинен бути структурою" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "індикатор для простого типу даних повинен бути простим" + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "індикатор структури \"%s\" має занадто мало елементів" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "індикатор структури \"%s\" має занадто багато елементів" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "нерозпізнаний код елементу дескриптора %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "неправильно створена змінна \"%s\"" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "змінна \"%s\" не є вказівником" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "змінна \"%s\" не є вказівником на структуру або об'єднання" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "змінна \"%s\" не є структурою або об'єднанням" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "змінна \"%s\" не є масивом" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "змінна \"%s\" не проголошена" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "змінна-індикатор повинна бути цілим числом" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "нерозпізнане ім'я типу даних \"%s\"" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "багатовимірні масиви не підтримуються" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "багаторівневі вказівники (більше 2 рівнів) не підтримуються; знайдено %d рівень" +msgstr[1] "багаторівневі вказівники (більше 2 рівнів) не підтримуються; знайдено %d рівні" +msgstr[2] "багаторівневі вказівники (більше 2 рівнів) не підтримуються; знайдено %d рівнів" +msgstr[3] "багаторівневі вказівники (більше 2 рівнів) не підтримуються; знайдено %d рівень" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "для цього типу даних вказівники на вказівники не підтримуються" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "багатовимірні масиви структур не підтримуються" + diff --git a/src/interfaces/ecpg/preproc/po/vi.po b/src/interfaces/ecpg/preproc/po/vi.po new file mode 100644 index 0000000..5c7c357 --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/vi.po @@ -0,0 +1,684 @@ +# LANGUAGE message translation file for ecpg +# Copyright (C) 2018 PostgreSQL Global Development Group +# This file is distributed under the same license as the ecpg (PostgreSQL) package. +# FIRST AUTHOR , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: ecpg (PostgreSQL) 11\n" +"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" +"POT-Creation-Date: 2018-04-22 12:08+0000\n" +"PO-Revision-Date: 2018-05-04 22:20+0900\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 2.0.6\n" +"Last-Translator: Dang Minh Huong \n" +"Language: vi_VN\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "biến \"%s\" phải là kiểu numeric" + +#: descriptor.c:124 descriptor.c:146 +#, c-format +msgid "descriptor \"%s\" does not exist" +msgstr "descriptor \"%s\" không tồn tại" + +#: descriptor.c:161 descriptor.c:213 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "descriptor header item \"%d\" không tồn tại" + +#: descriptor.c:183 +#, c-format +msgid "nullable is always 1" +msgstr "giá trị có thể là NULL luôn là 1" + +#: descriptor.c:186 +#, c-format +msgid "key_member is always 0" +msgstr "key_member luôn là 0" + +#: descriptor.c:280 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "descriptor item \"%s\" chưa được thực thi" + +#: descriptor.c:290 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "descriptor item \"%s\" không thể thiết lập được" + +#: ecpg.c:35 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s là tiền xử lý nhúng SQL của PostgreSQL cho ngôn ngữ C.\n" +"\n" + +#: ecpg.c:37 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Cách sử dụng:\n" +" %s [TÙY CHỌN]... TỆP...\n" +"\n" + +#: ecpg.c:40 +#, c-format +msgid "Options:\n" +msgstr "Tùy chọn:\n" + +#: ecpg.c:41 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c tự động sinh mã C từ mã SQL nhúng;\n" +" điều này ảnh hưởng tới EXEC SQL TYPE\n" + +#: ecpg.c:43 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MODE thiết lập chế độ tương thích; MODE có thể là \n" +" \"INFORMIX\", \"INFORMIX_SE\" hoặc \"ORACLE\"\n" + +#: ecpg.c:46 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d xuất debug log cho trình phân tích cú pháp\n" + +#: ecpg.c:48 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL định nghĩa SYMBOL\n" + +#: ecpg.c:49 +#, c-format +msgid "" +" -h parse a header file, this option includes option \"-c\"\n" +msgstr "" +" -h phân tích cú pháp tệp header, tùy chọn này bao gồm \n" +" cả tùy chọn \"-c\"\n" + +#: ecpg.c:50 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i phân tích cả cú pháp của các tệp include files\n" + +#: ecpg.c:51 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I DIRECTORY tìm kiếm THƯ MỤC cho các include files\n" + +#: ecpg.c:52 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o OUTFILE ghi kết quả ra OUTFILE\n" + +#: ecpg.c:53 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPTION chỉ định cách thức run-time; OPTION có thể là:\n" +" \"no_indicator\", \"prepare\" hay \"questionmarks\"\n" + +#: ecpg.c:55 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression chạy trong chế độ regression test\n" + +#: ecpg.c:56 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr "" +" -t thiết lập autocommit sang on trong các transactions\n" + +#: ecpg.c:57 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version xuât thông tin phiên bản, sau đó thoát\n" + +#: ecpg.c:58 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help hiển thị nội dung hướng dẫn này, sau đó thoát\n" + +#: ecpg.c:59 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"Nếu tệp xuất ra (OUTFILE) không được chỉ định, tên của tệp .c sẽ được \n" +"lấy từ tên tệp .pgc đầu vào sau khi đã bỏ đi phần mở rộng .pgc\n" + +#: ecpg.c:61 +#, c-format +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"Báo cáo lỗi tới .\n" + +#: ecpg.c:139 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: không thể xác định ví trí đường dẫn để thực thi\n" + +#: ecpg.c:174 ecpg.c:331 ecpg.c:342 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: không thể mở file \"%s\": %s\n" + +#: ecpg.c:217 ecpg.c:230 ecpg.c:246 ecpg.c:272 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Thử \"%s --help\" để biết thêm thông tin.\n" + +#: ecpg.c:241 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "" +"%s: chế độ hỗ trợ debug (-d) cho trình phân tích cú pháp chưa sẵn sàng\n" + +#: ecpg.c:260 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, tiền xử lý nhúng ngôn ngữ C cho PostgreSQL, phiên bản %s\n" + +#: ecpg.c:262 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... tìm kiếm bắt đầu từ đây:\n" + +#: ecpg.c:265 +#, c-format +msgid "end of search list\n" +msgstr "cuối danh sách tìm kiếm\n" + +#: ecpg.c:271 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: không có tệp đầu vào nào được chỉ định\n" + +#: ecpg.c:465 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "con trỏ \"%s\" đã được định nghĩa nhưng chưa được open" + +#: ecpg.c:478 preproc.y:127 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "không thể xóa tệp đầu ra \"%s\"\n" + +#: pgc.l:435 +#, c-format +msgid "unterminated /* comment" +msgstr "dấu bình luận /* chưa được kết thúc" + +#: pgc.l:448 +#, c-format +msgid "invalid bit string literal" +msgstr "chuỗi ký tự bit không hợp lệ" + +#: pgc.l:457 +#, c-format +msgid "unterminated bit string literal" +msgstr "chuỗi bít ký tự chưa hoàn chỉnh" + +#: pgc.l:473 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "chuỗi ký tự thập lục phân chưa hoàn chỉnh" + +#: pgc.l:551 +#, c-format +msgid "unterminated quoted string" +msgstr "chuỗi trích dẫn chưa hoàn chỉnh" + +#: pgc.l:609 pgc.l:622 +#, c-format +msgid "zero-length delimited identifier" +msgstr "ký tự phân cách có độ dài bằng 0" + +#: pgc.l:630 +#, c-format +msgid "unterminated quoted identifier" +msgstr "identifier trích dẫn chưa hoàn chỉnh" + +#: pgc.l:880 +#, c-format +msgid "nested /* ... */ comments" +msgstr "dấu bình luận /* ... */ lồng nhau" + +#: pgc.l:973 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "thiếu identifier trong câu lệnh EXEC SQL UNDEF" + +#: pgc.l:1019 pgc.l:1033 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "không khớp giữa \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" + +#: pgc.l:1022 pgc.l:1035 pgc.l:1211 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "thiếu câu lệnh \"EXEC SQL ENDIF;\"" + +#: pgc.l:1051 pgc.l:1070 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "có nhiều hơn một câu lệnh EXEC SQL ELSE" + +#: pgc.l:1092 pgc.l:1106 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "câu lệnh EXEC SQL ENDIF không khớp" + +#: pgc.l:1126 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "quá nhiều điều kiện lồng EXEC SQL IFDEF" + +#: pgc.l:1159 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "thiếu identifier trong câu lệnh EXEC SQL IFDEF" + +#: pgc.l:1168 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "thiếu identifier trong câu lệnh EXEC SQL DEFINE" + +#: pgc.l:1201 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "lỗi cú pháp trong câu lệnh EXEC SQL INCLUDE" + +#: pgc.l:1250 +#, c-format +msgid "" +"internal error: unreachable state; please report this to " +msgstr "" +"lỗi nội bộ: trạng thái không thể truy cập; vui lòng báo cáo điều này với " +"" + +#: pgc.l:1379 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "Lỗi: đường dẫn include \"%s/%s\" quá dài trên dòng %d, bỏ qua\n" + +#: pgc.l:1402 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "không thể mở tệp include \"%s\" trên dòng %d" + +#: preproc.y:31 +msgid "syntax error" +msgstr "lỗi cú pháp" + +#: preproc.y:81 +#, c-format +msgid "WARNING: " +msgstr "CẢNH BÁO: " + +#: preproc.y:84 +#, c-format +msgid "ERROR: " +msgstr "LỖI: " + +#: preproc.y:508 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "on trỏ \"%s\" không tồn tại" + +#: preproc.y:537 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "initializer không được cho phép trong định nghĩa kiểu" + +#: preproc.y:539 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "kiểu \"string\" được dành riêng trong chế độ Informix" + +#: preproc.y:546 preproc.y:15714 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "kiểu \"%s\" đã được định nghĩa" + +#: preproc.y:570 preproc.y:16372 preproc.y:16697 variable.c:620 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "mảng đa chiều cho các kiểu dữ liệu đơn giản không được hỗ trợ" + +#: preproc.y:1693 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "Tùy chọn AT không được phép trong câu lệnh CLOSE DATABASE" + +#: preproc.y:1902 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "Tùy chọn AT không được phép trong câu lệnh CONNECT" + +#: preproc.y:1936 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "Tùy chọn AT không được phép trong câu lệnh DISCONNECT" + +#: preproc.y:1991 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "Tùy chọn AT không được cho phép trong câu lệnh SET CONNECTION" + +#: preproc.y:2013 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "Tùy chọn AT không được phép trong câu lệnh TYPE" + +#: preproc.y:2022 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "Tùy chọn AT không được phép trong câu lệnh VAR" + +#: preproc.y:2029 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "Tùy chọn AT không được phép trong câu lệnh WHENEVER" + +#: preproc.y:2106 preproc.y:2278 preproc.y:2283 preproc.y:2399 preproc.y:4036 +#: preproc.y:5594 preproc.y:5603 preproc.y:5903 preproc.y:7502 preproc.y:8995 +#: preproc.y:9000 preproc.y:11782 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "tính năng không được hỗ trợ sẽ được chuyển đến server" + +#: preproc.y:2657 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "Lệnh SHOW ALL chưa được thực thi" + +#: preproc.y:3377 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "Lệnh COPY FROM STDIN chưa được thực thi" + +#: preproc.y:9948 preproc.y:15303 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "" +"sử dụng biến \"%s\" trong các câu lệnh khai báo khác nhau không được hỗ trợ" + +#: preproc.y:9950 preproc.y:15305 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "con trỏ \"%s\" đã được định nghĩa" + +#: preproc.y:10380 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "cú pháp không còn được hỗ trợ LIMIT #, # được chuyển đến server" + +#: preproc.y:10696 preproc.y:10703 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "truy vấn phụ trong FROM phải có bí danh" + +#: preproc.y:15033 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "Không thể sử dụng INTO trong câu lệnh CREATE TABLE AS" + +#: preproc.y:15069 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "kì vọng \"@\", tìm thấy \"%s\"" + +#: preproc.y:15081 +#, c-format +msgid "" +"only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are " +"supported" +msgstr "" +"chỉ các giao thức \"tcp\" và \"unix\" và kiểu cơ sở dữ liệu \"postgresql\" " +"được hỗ trợ" + +#: preproc.y:15084 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "kỳ vọng \"://\", tìm thấy \"%s\"" + +#: preproc.y:15089 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "" +"Unix-domain sockets chỉ hoạt động trên \"localhost\" nhưng không hoạt động " +"trên \"%s\"" + +#: preproc.y:15115 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "kỳ vọng \"postgresql\", tìm thấy \"%s\"" + +#: preproc.y:15118 +#, c-format +msgid "invalid connection type: %s" +msgstr "loại kết nối không hợp lệ: %s" + +#: preproc.y:15127 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "kỳ vọng \"@\" or \"://\", tìm được \"%s\"" + +#: preproc.y:15202 preproc.y:15220 +#, c-format +msgid "invalid data type" +msgstr "kiểu dữ liệu không hợp lệ" + +#: preproc.y:15231 preproc.y:15248 +#, c-format +msgid "incomplete statement" +msgstr "câu lệnh chưa hoàn chỉnh" + +#: preproc.y:15234 preproc.y:15251 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "không nhận ra token \"%s\"" + +#: preproc.y:15525 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "chỉ các kiểu dữ liệu numeric và decimal có đối số precision và scale" + +#: preproc.y:15537 +#, c-format +msgid "interval specification not allowed here" +msgstr "chỉ định interval không được phép ở đây" + +#: preproc.y:15689 preproc.y:15741 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "quá nhiều cấp độ lồng nhau trong định nghĩa structure/union" + +#: preproc.y:15880 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "con trỏ đến kiểu varchar chưa được thực thi" + +#: preproc.y:16067 preproc.y:16092 +#, c-format +msgid "using unsupported DESCRIBE statement" +msgstr "sử dụng câu lệnh chưa được hỗ trợ DESCRIBE" + +#: preproc.y:16339 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "initializer không được phép trong câu lệnh EXEC SQL VAR" + +#: preproc.y:16655 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "đầu vào là mảng của các indicators không được cho phép" + +#: preproc.y:16876 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "toán tử không được phép trong định nghĩa biến" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:16917 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s tại hoặc gần \"%s\"" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "hết bộ nhớ" + +#: type.c:212 type.c:674 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "không nhận ra kiểu mã biến %d" + +#: type.c:261 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "biến \"%s\" bị ẩn bởi biến cục bộ thuộc một kiểu khác" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "biến \"%s\" bị ẩn bởi biến cục bộ" + +#: type.c:275 +#, c-format +msgid "" +"indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "biến indicator \"%s\" bị ẩn bởi một biến cục bộ thuộc một kiểu khác" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "biến indicator \"%s\" bị ẩn bởi biến cục bộ" + +#: type.c:285 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "mảng/con trỏ cho indicator phải là mảng/con trỏ" + +#: type.c:289 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "mảng lồng nhau không được hỗ trợ (ngoại trừ chuỗi)" + +#: type.c:331 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "indicator cho structure phải là một structure" + +#: type.c:351 type.c:372 type.c:392 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "indicator cho kiểu dữ liệu đơn giản phải đơn giản" + +#: type.c:615 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "cấu trúc của indicator \"%s\" có quá ít thành viên" + +#: type.c:622 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "cấu trúc của indicator \"%s\" có quá nhiều thành viên" + +#: type.c:733 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "không nhận ra mã descriptor item %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "biến được định dạng không chính xác \"%s\"" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "biến \"%s\" không phải là con trỏ" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "biến \"%s\" không phải là con trỏ trỏ tới structure hoặc union" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "biến \"%s\" không phải là kiểu structure hay union" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "biến \"%s\" không phải là mảng" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "biến \"%s\" chưa được định nghĩa" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "biến indicator phải có kiểu integer" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "không nhận ra kiểu dữ liệu \"%s\"" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "mảng đa chiều không được hỗ trợ" + +#: variable.c:534 +#, c-format +msgid "" +"multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "" +"multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "" +"các con trỏ đa cấp (nhiều hơn 2 cấp) không được hỗ trợ; đã tìm thấy %d cấp" + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "con trỏ đến con trỏ không được hỗ trợ cho kiểu dữ liệu này" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "mảng đa chiều cho kiểu cấu trúc không được hỗ trợ" diff --git a/src/interfaces/ecpg/preproc/po/zh_CN.po b/src/interfaces/ecpg/preproc/po/zh_CN.po new file mode 100644 index 0000000..74fd9da --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/zh_CN.po @@ -0,0 +1,693 @@ +# LANGUAGE message translation file for ecpg +# Copyright (C) 2010 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# FIRST AUTHOR , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: ecpg (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-08-14 05:39+0000\n" +"PO-Revision-Date: 2021-08-15 18:42+0800\n" +"Last-Translator: Jie Zhang \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.5.4\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "变量 \"%s\"必须是数值类型" + +#: descriptor.c:125 descriptor.c:156 +msgid "descriptor %s bound to connection %s does not exist" +msgstr "绑定到连接%2$s的描述符%1$s不存在" + +#: descriptor.c:127 descriptor.c:158 +msgid "descriptor %s bound to the default connection does not exist" +msgstr "绑定到默认连接%2$s的描述符%1$s不存在" + +#: descriptor.c:173 descriptor.c:225 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "描述符标题成员\"%d\"不存在" + +#: descriptor.c:195 +#, c-format +msgid "nullable is always 1" +msgstr "可为空永远用1表示" + +#: descriptor.c:198 +#, c-format +msgid "key_member is always 0" +msgstr "key_member永远是0" + +#: descriptor.c:292 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "没有使用描述符成员\"%s\"." + +#: descriptor.c:302 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "无法设置描述符成员 \"%s\"" + +#: ecpg.c:36 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s是用于C语言程序的PostgreSQL嵌入式SQL预处理器.\n" +"\n" + +#: ecpg.c:38 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" + +#: ecpg.c:41 +#, c-format +msgid "Options:\n" +msgstr "选项:\n" + +#: ecpg.c:42 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c 从嵌入式SQL代码中自动产生C代码;\n" +" 这将影响EXEC SQL TYPE\n" + +#: ecpg.c:44 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" +msgstr "" +" -C MODE 设置兼容模式;MODE可以是下列模式之一\n" +" \"INFORMIX\", \"INFORMIX_SE\", \"ORACLE\"\n" + +#: ecpg.c:47 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d 产生解析器的调试输出\n" + +#: ecpg.c:49 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D SYMBOL 定义SYMBOL\n" + +#: ecpg.c:50 +#, c-format +msgid " -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h 分析一个头文件,这个选项包含选项\"-c\"\n" + +#: ecpg.c:51 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i 分析系统引用文件\n" + +#: ecpg.c:52 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I DIRECTORY 为引用文件搜索变量DIRECTORY\n" + +#: ecpg.c:53 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o OUTFILE 将结果写入到OUTFILE\n" + +#: ecpg.c:54 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r OPTION 指定运行时的系统行为; OPTION可以是:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" + +#: ecpg.c:56 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression 在回归测试模式下运行\n" + +#: ecpg.c:57 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t 打开事务的自动提交功能\n" + +#: ecpg.c:58 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 输出版本信息,然后退出\n" + +#: ecpg.c:59 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 显示帮助信息,然后退出\n" + +#: ecpg.c:60 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"如果没有指定输出文件,那么输出文件名将由输入文件名(如果有后缀,那么去掉.pgc)\n" +"加上.c的后缀名组成.\n" + +#: ecpg.c:62 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"臭虫报告至<%s>.\n" + +#: ecpg.c:63 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 主页: <%s>\n" + +#: ecpg.c:141 +#, c-format +msgid "%s: could not locate my own executable path\n" +msgstr "%s: 找不到我的可执行文件路径\n" + +#: ecpg.c:176 ecpg.c:333 ecpg.c:344 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: 无法打开文件 \"%s\": %s\n" + +#: ecpg.c:219 ecpg.c:232 ecpg.c:248 ecpg.c:274 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "请用 \"%s --help\" 获取更多的信息.\n" + +#: ecpg.c:243 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: 解析器跟踪调试支持(-d)无效\n" + +#: ecpg.c:262 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %s\n" +msgstr "%s, PostgreSQL嵌入式C语言预处理器, 版本%s\n" + +#: ecpg.c:264 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... 从这里开始搜索:\n" + +#: ecpg.c:267 +#, c-format +msgid "end of search list\n" +msgstr "搜索列表的结束部分\n" + +#: ecpg.c:273 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: 没有指定输入文件\n" + +#: ecpg.c:477 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "已经声明了游标\"%s\",但是没有打开" + +#: ecpg.c:490 preproc.y:130 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "无法删除输出文件 \"%s\"\n" + +#: pgc.l:502 +#, c-format +msgid "unterminated /* comment" +msgstr "/* 注释没有结束" + +#: pgc.l:519 +#, c-format +msgid "unterminated bit string literal" +msgstr "未结束的bit字符串常量" + +#: pgc.l:527 +#, c-format +msgid "unterminated hexadecimal string literal" +msgstr "未结束的16进制字符串常量" + +#: pgc.l:602 +#, c-format +msgid "invalid bit string literal" +msgstr "无效的bit字符串常量" + +#: pgc.l:607 +msgid "invalid hex string literal" +msgstr "无效的十六进制字符串常量" + +#: pgc.l:625 +#, c-format +msgid "unhandled previous state in xqs\n" +msgstr "xqs中未处理的先前状态\n" + +#: pgc.l:651 pgc.l:760 +#, c-format +msgid "unterminated quoted string" +msgstr "未结束的引用字符串" + +#: pgc.l:702 +#, c-format +msgid "unterminated dollar-quoted string" +msgstr "未结束的用$符号引用的字符串" + +#: pgc.l:720 pgc.l:740 +#, c-format +msgid "zero-length delimited identifier" +msgstr "长度为0的分隔标识符" + +#: pgc.l:751 +#, c-format +msgid "unterminated quoted identifier" +msgstr "未结束的引用标识符" + +#: pgc.l:1082 +#, c-format +msgid "nested /* ... */ comments" +msgstr "有嵌套注释/*...*/" + +#: pgc.l:1175 +#, c-format +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "在EXEC SQL UNDEF命令中丢失标识符" + +#: pgc.l:1193 pgc.l:1206 pgc.l:1222 pgc.l:1235 +#, c-format +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "嵌套EXEC SQL IFDEF条件太多" + +#: pgc.l:1251 pgc.l:1262 pgc.l:1277 pgc.l:1299 +#, c-format +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "丢失匹配 \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" + +#: pgc.l:1253 pgc.l:1264 pgc.l:1445 +#, c-format +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "\"EXEC SQL ENDIF;\"丢失" + +#: pgc.l:1279 pgc.l:1301 +#, c-format +msgid "more than one EXEC SQL ELSE" +msgstr "多个EXEC SQL ELSE" + +#: pgc.l:1324 pgc.l:1338 +#, c-format +msgid "unmatched EXEC SQL ENDIF" +msgstr "EXEC SQL ENDIF不匹配" + +#: pgc.l:1393 +#, c-format +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "在EXEC SQL IFDEF命令中丢失标识符" + +#: pgc.l:1402 +#, c-format +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "在EXEC SQL DEFINE命令中丢失标识符" + +#: pgc.l:1435 +#, c-format +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "在EXEC SQL INCLUDE命令中出现语法错误" + +#: pgc.l:1485 +msgid "internal error: unreachable state; please report this to <%s>" +msgstr "内部错误:不可到达的状态;请向<%s>发送报告" + +#: pgc.l:1637 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "错误:在第%3$d行上包含路径\"%1$s/%2$s\"太长,跳过\n" + +#: pgc.l:1660 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "在第%2$d行无法打开应用文件\"%1$s\"" + +#: preproc.y:31 +msgid "syntax error" +msgstr "语法错误" + +#: preproc.y:84 +#, c-format +msgid "WARNING: " +msgstr "警告:" + +#: preproc.y:87 +#, c-format +msgid "ERROR: " +msgstr "错误:" + +#: preproc.y:514 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "游标 \"%s\" 不存在" + +#: preproc.y:543 +#, c-format +msgid "initializer not allowed in type definition" +msgstr "在类型定义中不允许进行初始化" + +#: preproc.y:545 +#, c-format +msgid "type name \"string\" is reserved in Informix mode" +msgstr "在Informix模式中类型名称\"string\" 是被保留的" + +#: preproc.y:552 preproc.y:17675 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "已定义类型\"%s\" " + +#: preproc.y:577 preproc.y:18310 preproc.y:18635 variable.c:621 +#, c-format +msgid "multidimensional arrays for simple data types are not supported" +msgstr "不支持针对简单数据类型的多维数组" + +#: preproc.y:599 +msgid "connection %s is overwritten to %s." +msgstr "连接%s被覆盖到%s." + +#: preproc.y:1753 +#, c-format +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "在CLOSE DATABASE语句中不允许使用AT选项" + +#: preproc.y:2001 +#, c-format +msgid "AT option not allowed in CONNECT statement" +msgstr "在CONNECT语句中不允许使用AT选项" + +#: preproc.y:2041 +#, c-format +msgid "AT option not allowed in DISCONNECT statement" +msgstr "在DISCONNECT语句中不允许使用AT选项" + +#: preproc.y:2096 +#, c-format +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "在SET CONNECTION语句中不允许使用AT选项" + +#: preproc.y:2118 +#, c-format +msgid "AT option not allowed in TYPE statement" +msgstr "在TYPE语句中不允许使用AT选项" + +#: preproc.y:2127 +#, c-format +msgid "AT option not allowed in VAR statement" +msgstr "在VAR语句中不允许使用AT选项" + +#: preproc.y:2134 +#, c-format +msgid "AT option not allowed in WHENEVER statement" +msgstr "在WHENEVER语句中不允许使用AT选项" + +#: preproc.y:2211 preproc.y:2383 preproc.y:2388 preproc.y:2511 preproc.y:4143 +#: preproc.y:4807 preproc.y:5340 preproc.y:5678 preproc.y:5978 preproc.y:7514 +#: preproc.y:9082 preproc.y:9087 preproc.y:11915 +#, c-format +msgid "unsupported feature will be passed to server" +msgstr "不支持的功能特性将会传递给服务器" + +#: preproc.y:2769 +#, c-format +msgid "SHOW ALL is not implemented" +msgstr "没有使用SHOW ALL" + +#: preproc.y:3464 +#, c-format +msgid "COPY FROM STDIN is not implemented" +msgstr "不能进行COPY FROM STDIN的操作" + +#: preproc.y:10014 preproc.y:17250 +msgid "\"database\" cannot be used as cursor name in INFORMIX mode" +msgstr "在INFORMIX模式下,\"database\"不能用作游标名称" + +#: preproc.y:10021 preproc.y:17260 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "不支持在不同的声明语句中使用变量\"%s\"" + +#: preproc.y:10023 preproc.y:17262 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "已经定义了游标\"%s\"" + +#: preproc.y:10497 +#, c-format +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "不再支持将LIMIT #,#语法传递给服务器" + +#: preproc.y:10830 preproc.y:10837 +#, c-format +msgid "subquery in FROM must have an alias" +msgstr "FROM 中的子查询必须有一个别名" + +#: preproc.y:16942 preproc.y:16949 +#, c-format +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "在CREATE TABLE AS语句中不能指定INTO子句" + +#: preproc.y:16985 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "期望 \"@\", 但是找到了\"%s\"" + +#: preproc.y:16997 +#, c-format +msgid "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported" +msgstr "只支持协议\"tcp\"和 \"unix\"以及数据库类型 \"postgresql\"" + +#: preproc.y:17000 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "期望得到 \"://\",但是找到了\"%s\"" + +#: preproc.y:17005 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Unix-域的sockets只能在\"localhost\"上运行,而不能在\"%s\"上运行" + +#: preproc.y:17031 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "期望\"postgresql\", 但是只找到了\"%s\"" + +#: preproc.y:17034 +#, c-format +msgid "invalid connection type: %s" +msgstr "无效的连接类型: %s" + +#: preproc.y:17043 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "期望\"@\"或\"://\",但是只找到了\"%s\"" + +#: preproc.y:17118 preproc.y:17136 +#, c-format +msgid "invalid data type" +msgstr "无效数据类型" + +#: preproc.y:17147 preproc.y:17164 +#, c-format +msgid "incomplete statement" +msgstr "未结束的语句" + +#: preproc.y:17150 preproc.y:17167 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "无法识别的符号\"%s\"" + +#: preproc.y:17212 +msgid "name \"%s\" is already declared" +msgstr "已声明名称\"%s\"" + +#: preproc.y:17478 +#, c-format +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "只有数据类型numeric和decimal有精度/范围参数" + +#: preproc.y:17490 +#, c-format +msgid "interval specification not allowed here" +msgstr "在这里不允许使用间隔定义" + +#: preproc.y:17650 preproc.y:17702 +#, c-format +msgid "too many levels in nested structure/union definition" +msgstr "在嵌套结构/联合定义中存在太多的层次" + +#: preproc.y:17825 +#, c-format +msgid "pointers to varchar are not implemented" +msgstr "没有实现指向varchar类型值的指针" + +#: preproc.y:18276 +#, c-format +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "在EXEC SQL VAR命令中不允许初始化" + +#: preproc.y:18593 +#, c-format +msgid "arrays of indicators are not allowed on input" +msgstr "在输入上不允许使用标识数组" + +#: preproc.y:18780 +#, c-format +msgid "operator not allowed in variable definition" +msgstr "操作符不允许出现在变量定义当中" + +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:18821 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "%s 在 \"%s\" 或附近的" + +#: type.c:18 type.c:30 +#, c-format +msgid "out of memory" +msgstr "内存不足" + +#: type.c:214 type.c:685 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "无法识别的变量类型代码%d" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "变量\"%s\"是由一个不同类型的局部变量隐藏的" + +#: type.c:265 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "变量\"%s\"是由一个局部变量隐藏的" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "标记变量(indicator variable)\"%s\"是由一个不同类型的局部变量隐藏的。" + +#: type.c:279 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "标记变量(indicator variable)\"%s\"是由一个局部变量隐藏的" + +#: type.c:287 +#, c-format +msgid "indicator for array/pointer has to be array/pointer" +msgstr "对于数组/指针的记号必须是array/pointer" + +#: type.c:291 +#, c-format +msgid "nested arrays are not supported (except strings)" +msgstr "不支持嵌套数组(除了字符串外)" + +#: type.c:333 +#, c-format +msgid "indicator for struct has to be a struct" +msgstr "结构的记号必须是struct" + +#: type.c:353 type.c:374 type.c:394 +#, c-format +msgid "indicator for simple data type has to be simple" +msgstr "对简单数据类型的指标要简单 " + +#: type.c:625 +#, c-format +msgid "indicator struct \"%s\" has too few members" +msgstr "结构\"%s\"的记号的成员太少" + +#: type.c:633 +#, c-format +msgid "indicator struct \"%s\" has too many members" +msgstr "结构\"%s\"的记号成员太多" + +#: type.c:744 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "无法识别的描述符成员代码 %d" + +#: variable.c:89 variable.c:116 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "不正确形成的变量 \"%s\"" + +#: variable.c:139 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "变量\"%s\"不是一个指针" + +#: variable.c:142 variable.c:167 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "变量\"%s\" 不是一个指向结构或联合的指针" + +#: variable.c:154 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "变量\"%s\"既不是一个结构也不是一个联合" + +#: variable.c:164 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "变量\"%s\"不是一个数组" + +#: variable.c:233 variable.c:255 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "没有声明变量\"%s\"" + +#: variable.c:494 +#, c-format +msgid "indicator variable must have an integer type" +msgstr "标记变量必须有一个整数类型" + +#: variable.c:506 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr "无法识别的数据类型名称 \"%s\"" + +#: variable.c:517 variable.c:525 variable.c:542 variable.c:545 +#, c-format +msgid "multidimensional arrays are not supported" +msgstr "不支持多维数组" + +#: variable.c:534 +#, c-format +msgid "multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "不支持多级指针(超过2级);找到了%d级指针." + +#: variable.c:539 +#, c-format +msgid "pointer to pointer is not supported for this data type" +msgstr "对于这种数据类型不支持指向指针的指针" + +#: variable.c:559 +#, c-format +msgid "multidimensional arrays for structures are not supported" +msgstr "不支持结构类型的多维数组" + diff --git a/src/interfaces/ecpg/preproc/po/zh_TW.po b/src/interfaces/ecpg/preproc/po/zh_TW.po new file mode 100644 index 0000000..9d94f8c --- /dev/null +++ b/src/interfaces/ecpg/preproc/po/zh_TW.po @@ -0,0 +1,645 @@ +# Traditional Chinese message translation file for ecpg +# Copyright (C) 2010 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +msgid "" +msgstr "" +"Project-Id-Version: PostgreSQL 9.1\n" +"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n" +"POT-Creation-Date: 2011-05-11 20:42+0000\n" +"PO-Revision-Date: 2013-09-03 23:28-0400\n" +"Last-Translator: Zhenbang Wei \n" +"Language-Team: EnterpriseDB translation team \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: descriptor.c:64 +#, c-format +msgid "variable \"%s\" must have a numeric type" +msgstr "變數 \"%s\" 必須具有數值型別" + +#: descriptor.c:124 descriptor.c:146 +#, c-format +msgid "descriptor \"%s\" does not exist" +msgstr "描述子 \"%s\" 不存在" + +#: descriptor.c:161 descriptor.c:210 +#, c-format +msgid "descriptor header item \"%d\" does not exist" +msgstr "描述子標頭項目 \"%d\" 不存在" + +#: descriptor.c:182 +msgid "nullable is always 1" +msgstr "Nullable 一律為 1" + +#: descriptor.c:185 +msgid "key_member is always 0" +msgstr "key_member 一律為 0" + +#: descriptor.c:277 +#, c-format +msgid "descriptor item \"%s\" is not implemented" +msgstr "未實作描述子項目 \"%s\"" + +#: descriptor.c:287 +#, c-format +msgid "descriptor item \"%s\" cannot be set" +msgstr "不能設定描述子項目 \"%s\"" + +#: ecpg.c:35 +#, c-format +msgid "" +"%s is the PostgreSQL embedded SQL preprocessor for C programs.\n" +"\n" +msgstr "" +"%s 是 PostgreSQL 內嵌 SQL 前置處理器,適用於 C 程式。\n" +"\n" + +#: ecpg.c:37 +#, c-format +msgid "" +"Usage:\n" +" %s [OPTION]... FILE...\n" +"\n" +msgstr "" +"使用方法:\n" +"%s [選項]...檔案...\n" +"\n" + +# postmaster/postmaster.c:1017 tcop/postgres.c:2115 +#: ecpg.c:40 +#, c-format +msgid "Options:\n" +msgstr "選項:\n" + +#: ecpg.c:41 +#, c-format +msgid "" +" -c automatically generate C code from embedded SQL code;\n" +" this affects EXEC SQL TYPE\n" +msgstr "" +" -c 自動從內嵌 SQL 程式碼產生 C 程式碼,\n" +" EXEC SQL TYPE 會受到影響\n" + +#: ecpg.c:43 +#, c-format +msgid "" +" -C MODE set compatibility mode; MODE can be one of\n" +" \"INFORMIX\", \"INFORMIX_SE\"\n" +msgstr "" +" -C 模式 設定相容性模式,模式可以是下列其中一項\n" +" \"INFORMIX\"、\"INFORMIX_SE\"\n" + +#: ecpg.c:46 +#, c-format +msgid " -d generate parser debug output\n" +msgstr " -d 產生解譯器偵錯輸出\n" + +#: ecpg.c:48 +#, c-format +msgid " -D SYMBOL define SYMBOL\n" +msgstr " -D 符號 定義符號\n" + +#: ecpg.c:49 +#, c-format +msgid "" +" -h parse a header file, this option includes option \"-c\"\n" +msgstr " -h 解譯標頭檔,此選項包含選項 \"-c\"\n" + +#: ecpg.c:50 +#, c-format +msgid " -i parse system include files as well\n" +msgstr " -i 同時解譯系統引用檔案\n" + +#: ecpg.c:51 +#, c-format +msgid " -I DIRECTORY search DIRECTORY for include files\n" +msgstr " -I 目錄 搜尋引用檔案的目錄\n" + +#: ecpg.c:52 +#, c-format +msgid " -o OUTFILE write result to OUTFILE\n" +msgstr " -o 輸出檔 將結果寫入輸出檔\n" + +#: ecpg.c:53 +#, c-format +msgid "" +" -r OPTION specify run-time behavior; OPTION can be:\n" +" \"no_indicator\", \"prepare\", \"questionmarks\"\n" +msgstr "" +" -r 選項 指定執行階段行為,選項可以是:\n" +" \"no_indicator\"、\"prepare\"、\"questionmarks\"\n" + +#: ecpg.c:55 +#, c-format +msgid " --regression run in regression testing mode\n" +msgstr " --regression 以迴歸測試模式執行\n" + +#: ecpg.c:56 +#, c-format +msgid " -t turn on autocommit of transactions\n" +msgstr " -t 開啟交易自動提交功能\n" + +#: ecpg.c:57 +#, c-format +msgid " --help show this help, then exit\n" +msgstr " --help 顯示此說明然後結束\n" + +#: ecpg.c:58 +#, c-format +msgid " --version output version information, then exit\n" +msgstr " --version 輸出版本資訊然後結束\n" + +#: ecpg.c:59 +#, c-format +msgid "" +"\n" +"If no output file is specified, the name is formed by adding .c to the\n" +"input file name, after stripping off .pgc if present.\n" +msgstr "" +"\n" +"如果未指定輸出檔,檔名就是將輸入檔的檔名\n" +"去掉 .pgc (如果有的話) 再加上 .c。\n" + +# tcop/postgres.c:2140 +#: ecpg.c:61 +#, c-format +msgid "" +"\n" +"Report bugs to .\n" +msgstr "" +"\n" +"回報錯誤給 。\n" + +#: ecpg.c:182 ecpg.c:333 ecpg.c:343 +#, c-format +msgid "%s: could not open file \"%s\": %s\n" +msgstr "%s: 無法開啟檔案\"%s\": %s\n" + +# postmaster/postmaster.c:512 postmaster/postmaster.c:525 +#: ecpg.c:221 ecpg.c:234 ecpg.c:250 ecpg.c:275 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "執行\"%s --help\"顯示更多資訊。\n" + +#: ecpg.c:245 +#, c-format +msgid "%s: parser debug support (-d) not available\n" +msgstr "%s: 解譯器偵錯支援 (-d) 無法使用\n" + +#: ecpg.c:263 +#, c-format +msgid "%s, the PostgreSQL embedded C preprocessor, version %d.%d.%d\n" +msgstr "%s,PostgreSQL 內嵌 C 前置處理器,版本 %d.%d.%d\n" + +#: ecpg.c:265 +#, c-format +msgid "EXEC SQL INCLUDE ... search starts here:\n" +msgstr "EXEC SQL INCLUDE ... 在此處開始搜尋:\n" + +#: ecpg.c:268 +#, c-format +msgid "end of search list\n" +msgstr "搜尋清單結尾\n" + +#: ecpg.c:274 +#, c-format +msgid "%s: no input files specified\n" +msgstr "%s: 未指定輸入檔\n" + +#: ecpg.c:466 +#, c-format +msgid "cursor \"%s\" has been declared but not opened" +msgstr "指標 \"%s\" 已宣告但尚未開啟" + +#: ecpg.c:479 preproc.y:109 +#, c-format +msgid "could not remove output file \"%s\"\n" +msgstr "無法移除輸出檔 \"%s\"\n" + +# scan.l:312 +#: pgc.l:402 +msgid "unterminated /* comment" +msgstr "未結束的 /* 註解" + +#: pgc.l:415 +msgid "invalid bit string literal" +msgstr "位元字串實量無效" + +# scan.l:339 +#: pgc.l:424 +msgid "unterminated bit string literal" +msgstr "未結束的位元字串實量" + +# scan.l:358 +#: pgc.l:440 +msgid "unterminated hexadecimal string literal" +msgstr "未結束的十六進位字串實量" + +# scan.l:407 +#: pgc.l:518 +msgid "unterminated quoted string" +msgstr "未結束的引號字串" + +#: pgc.l:573 pgc.l:586 +msgid "zero-length delimited identifier" +msgstr "長度為零的分隔識別字" + +#: pgc.l:594 +msgid "unterminated quoted identifier" +msgstr "未結束的引號識別字" + +#: pgc.l:940 +msgid "missing identifier in EXEC SQL UNDEF command" +msgstr "EXEC SQL UNDEF 指令遺漏識別字" + +#: pgc.l:986 pgc.l:1000 +msgid "missing matching \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" +msgstr "遺漏相符的 \"EXEC SQL IFDEF\" / \"EXEC SQL IFNDEF\"" + +#: pgc.l:989 pgc.l:1002 pgc.l:1178 +msgid "missing \"EXEC SQL ENDIF;\"" +msgstr "遺漏 \"EXEC SQL ENDIF;\"" + +#: pgc.l:1018 pgc.l:1037 +msgid "more than one EXEC SQL ELSE" +msgstr "多個 EXEC SQL ELSE" + +#: pgc.l:1059 pgc.l:1073 +msgid "unmatched EXEC SQL ENDIF" +msgstr "EXEC SQL ENDIF 不相符" + +#: pgc.l:1093 +msgid "too many nested EXEC SQL IFDEF conditions" +msgstr "過多巢狀 EXEC SQL IFDEF 條件" + +#: pgc.l:1126 +msgid "missing identifier in EXEC SQL IFDEF command" +msgstr "EXEC SQL IFDEF 指令遺漏識別字" + +#: pgc.l:1135 +msgid "missing identifier in EXEC SQL DEFINE command" +msgstr "EXEC SQL DEFINE 指令遺漏識別字" + +#: pgc.l:1168 +msgid "syntax error in EXEC SQL INCLUDE command" +msgstr "EXEC SQL INCLUDE 指令的語法錯誤" + +#: pgc.l:1217 +msgid "" +"internal error: unreachable state; please report this to " +msgstr "內部錯誤: 無法連線狀態,請將錯誤回報給 " + +#: pgc.l:1342 +#, c-format +msgid "Error: include path \"%s/%s\" is too long on line %d, skipping\n" +msgstr "錯誤: 引用檔路徑 \"%s/%s\" 太長 (位於行 %d),略過\n" + +#: pgc.l:1364 +#, c-format +msgid "could not open include file \"%s\" on line %d" +msgstr "無法開啟引用檔 \"%s\" (位於行 %d)" + +# gram.y:8218 gram.y:8220 y.tab.c:19175 +#: preproc.y:31 +msgid "syntax error" +msgstr "語法錯誤" + +#: preproc.y:81 +#, c-format +msgid "WARNING: " +msgstr "警告:" + +#: preproc.y:85 +#, c-format +msgid "ERROR: " +msgstr "錯誤:" + +# commands/portalcmds.c:182 commands/portalcmds.c:229 +#: preproc.y:391 +#, c-format +msgid "cursor \"%s\" does not exist" +msgstr "指標 \"%s\"不存在" + +#: preproc.y:419 +msgid "initializer not allowed in type definition" +msgstr "型別定義中不允許使用初始設定式" + +# commands/user.c:1396 +#: preproc.y:421 +msgid "type name \"string\" is reserved in Informix mode" +msgstr "型別名稱 \"string\" 在 Informix 是保留字" + +#: preproc.y:428 preproc.y:13035 +#, c-format +msgid "type \"%s\" is already defined" +msgstr "型別 \"%s\" 已定義" + +#: preproc.y:452 preproc.y:13675 preproc.y:13996 variable.c:610 +msgid "multidimensional arrays for simple data types are not supported" +msgstr "不支援簡單資料型別的多維度陣列" + +#: preproc.y:1426 +msgid "AT option not allowed in CLOSE DATABASE statement" +msgstr "CLOSE DATABASE 陳述式中不允許使用 AT 選項" + +#: preproc.y:1496 preproc.y:1640 +msgid "AT option not allowed in DEALLOCATE statement" +msgstr "DEALLOCATE 陳述式中不允許使用 AT 選項" + +#: preproc.y:1626 +msgid "AT option not allowed in CONNECT statement" +msgstr "CONNECT 陳述式中不允許使用 AT 選項" + +#: preproc.y:1662 +msgid "AT option not allowed in DISCONNECT statement" +msgstr "DISCONNECT 陳述式中不允許使用 AT 選項" + +#: preproc.y:1717 +msgid "AT option not allowed in SET CONNECTION statement" +msgstr "SET CONNECTION 陳述式中不允許使用 AT 選項" + +#: preproc.y:1739 +msgid "AT option not allowed in TYPE statement" +msgstr "TYPE 陳述式中不允許使用 AT 選項" + +#: preproc.y:1748 +msgid "AT option not allowed in VAR statement" +msgstr "VAR 陳述式中不允許使用 AT 選項" + +#: preproc.y:1755 +msgid "AT option not allowed in WHENEVER statement" +msgstr "WHENEVER 陳述式中不允許使用 AT 選項" + +#: preproc.y:2101 preproc.y:3272 preproc.y:3344 preproc.y:4550 preproc.y:4559 +#: preproc.y:4840 preproc.y:7127 preproc.y:7132 preproc.y:7137 preproc.y:9471 +#: preproc.y:10014 +msgid "unsupported feature will be passed to server" +msgstr "不支援的功能將會傳遞到伺服器" + +#: preproc.y:2327 +msgid "SHOW ALL is not implemented" +msgstr "未實作 SHOW ALL" + +#: preproc.y:2750 preproc.y:2761 +msgid "COPY TO STDIN is not possible" +msgstr "COPY TO STDIN 不可行" + +#: preproc.y:2752 +msgid "COPY FROM STDOUT is not possible" +msgstr "COPY FROM STDOUT 不可行" + +#: preproc.y:2754 +msgid "COPY FROM STDIN is not implemented" +msgstr "未實作 COPY FROM STDIN" + +#: preproc.y:4490 preproc.y:4501 +msgid "constraint declared INITIALLY DEFERRED must be DEFERRABLE" +msgstr "限制宣告的 INITIALLY DEFERRED 必須是 DEFERRABLE" + +#: preproc.y:7933 preproc.y:12624 +#, c-format +msgid "using variable \"%s\" in different declare statements is not supported" +msgstr "在多個宣告陳述式中使用變數 \"%s\" 未被支援" + +#: preproc.y:7935 preproc.y:12626 +#, c-format +msgid "cursor \"%s\" is already defined" +msgstr "指標 \"%s\" 已定義" + +#: preproc.y:8353 +msgid "no longer supported LIMIT #,# syntax passed to server" +msgstr "不再支援的 LIMIT #,# 語法已傳遞到伺服器" + +# gram.y:5166 parser/parse_clause.c:423 +#: preproc.y:8588 +msgid "subquery in FROM must have an alias" +msgstr "FROM中的子查詢要有別名" + +#: preproc.y:12356 +msgid "CREATE TABLE AS cannot specify INTO" +msgstr "CREATE TABLE AS 不能指定 INTO" + +#: preproc.y:12393 +#, c-format +msgid "expected \"@\", found \"%s\"" +msgstr "預期 \"@\",找到 \"%s\"" + +#: preproc.y:12405 +msgid "" +"only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are " +"supported" +msgstr "只支援通訊協定 \"tcp\" 和 \"unix\" 以及資料庫類型 \"postgresql\"" + +#: preproc.y:12408 +#, c-format +msgid "expected \"://\", found \"%s\"" +msgstr "預期 \"://\",找到 \"%s\"" + +#: preproc.y:12413 +#, c-format +msgid "Unix-domain sockets only work on \"localhost\" but not on \"%s\"" +msgstr "Unix-可用域通訊端僅適用 \"localhost\",不適用 \"%s\"" + +#: preproc.y:12439 +#, c-format +msgid "expected \"postgresql\", found \"%s\"" +msgstr "預期 \"postgresql\",找到 \"%s\"" + +#: preproc.y:12442 +#, c-format +msgid "invalid connection type: %s" +msgstr "連線類型無效:%s" + +#: preproc.y:12451 +#, c-format +msgid "expected \"@\" or \"://\", found \"%s\"" +msgstr "預期 \"@\" 或 \"://\",找到 \"%s\"" + +#: preproc.y:12526 preproc.y:12544 +msgid "invalid data type" +msgstr "資料型別無效" + +#: preproc.y:12555 preproc.y:12570 +msgid "incomplete statement" +msgstr "陳述式不完整" + +#: preproc.y:12558 preproc.y:12573 +#, c-format +msgid "unrecognized token \"%s\"" +msgstr "無法辨識的 token \"%s\"" + +#: preproc.y:12846 +msgid "only data types numeric and decimal have precision/scale argument" +msgstr "只有數值和十進位資料型別有精確度/小數位數參數" + +#: preproc.y:12858 +msgid "interval specification not allowed here" +msgstr "這裡不允許使用間隔規格" + +#: preproc.y:13010 preproc.y:13062 +msgid "too many levels in nested structure/union definition" +msgstr "巢狀結構/聯集定義中的層級過多" + +#: preproc.y:13193 +msgid "pointers to varchar are not implemented" +msgstr "Varchar 的指標未實作" + +#: preproc.y:13380 preproc.y:13405 +msgid "using unsupported DESCRIBE statement" +msgstr "使用不支援的 DESCRIBE 陳述式" + +#: preproc.y:13642 +msgid "initializer not allowed in EXEC SQL VAR command" +msgstr "EXEC SQL VAR 指令中不允許使用初始設定式" + +#: preproc.y:13954 +msgid "arrays of indicators are not allowed on input" +msgstr "輸入中不允許使用指標陣列" + +# translator: first %s is typically "syntax error" +# scan.l:629 +#. translator: %s is typically the translation of "syntax error" +#: preproc.y:14208 +#, c-format +msgid "%s at or near \"%s\"" +msgstr "在\"%s\"附近發生 %s" + +# commands/sequence.c:798 executor/execGrouping.c:328 +# executor/execGrouping.c:388 executor/nodeIndexscan.c:1051 lib/dllist.c:43 +# lib/dllist.c:88 libpq/auth.c:637 postmaster/pgstat.c:1006 +# postmaster/pgstat.c:1023 postmaster/pgstat.c:2452 postmaster/pgstat.c:2527 +# postmaster/pgstat.c:2572 postmaster/pgstat.c:2623 +# postmaster/postmaster.c:755 postmaster/postmaster.c:1625 +# postmaster/postmaster.c:2344 storage/buffer/localbuf.c:139 +# storage/file/fd.c:587 storage/file/fd.c:620 storage/file/fd.c:766 +# storage/ipc/sinval.c:789 storage/lmgr/lock.c:497 storage/smgr/md.c:138 +# storage/smgr/md.c:848 storage/smgr/smgr.c:213 utils/adt/cash.c:297 +# utils/adt/cash.c:312 utils/adt/oracle_compat.c:73 +# utils/adt/oracle_compat.c:124 utils/adt/regexp.c:191 +# utils/adt/ri_triggers.c:3471 utils/cache/relcache.c:164 +# utils/cache/relcache.c:178 utils/cache/relcache.c:1130 +# utils/cache/typcache.c:165 utils/cache/typcache.c:487 +# utils/fmgr/dfmgr.c:127 utils/fmgr/fmgr.c:521 utils/fmgr/fmgr.c:532 +# utils/init/miscinit.c:213 utils/init/miscinit.c:234 +# utils/init/miscinit.c:244 utils/misc/guc.c:1898 utils/misc/guc.c:1911 +# utils/misc/guc.c:1924 utils/mmgr/aset.c:337 utils/mmgr/aset.c:503 +# utils/mmgr/aset.c:700 utils/mmgr/aset.c:893 utils/mmgr/portalmem.c:75 +#: type.c:18 type.c:30 +msgid "out of memory" +msgstr "記憶體用盡" + +#: type.c:212 type.c:594 +#, c-format +msgid "unrecognized variable type code %d" +msgstr "無法辨識的變數型別程式碼 %d " + +#: type.c:261 +#, c-format +msgid "variable \"%s\" is hidden by a local variable of a different type" +msgstr "變數 \"%s\" 被不同型別的區域變數遮蔽" + +#: type.c:263 +#, c-format +msgid "variable \"%s\" is hidden by a local variable" +msgstr "變數 \"%s\" 被區域變數遮蔽" + +#: type.c:275 +#, c-format +msgid "" +"indicator variable \"%s\" is hidden by a local variable of a different type" +msgstr "指標變數 \"%s\" 被不同型別的區域變數遮蔽" + +#: type.c:277 +#, c-format +msgid "indicator variable \"%s\" is hidden by a local variable" +msgstr "指標變數 \"%s\" 被區域變數遮蔽" + +#: type.c:285 +msgid "indicator for array/pointer has to be array/pointer" +msgstr "陣列/指標的指標必須是陣列/指標" + +#: type.c:289 +msgid "nested arrays are not supported (except strings)" +msgstr "不支援巢狀陣列 (字串除外)" + +#: type.c:322 +msgid "indicator for struct has to be a struct" +msgstr "建構的指標必須是建構" + +#: type.c:331 type.c:339 type.c:347 +msgid "indicator for simple data type has to be simple" +msgstr "簡單資料型別的指標必須簡單" + +#: type.c:653 +#, c-format +msgid "unrecognized descriptor item code %d" +msgstr "無法辨識的描述子項目程式碼 %d" + +#: variable.c:89 variable.c:112 +#, c-format +msgid "incorrectly formed variable \"%s\"" +msgstr "變數 \"%s\" 的格式不正確" + +#: variable.c:135 +#, c-format +msgid "variable \"%s\" is not a pointer" +msgstr "變數 \"%s\" 不是指標" + +#: variable.c:138 variable.c:163 +#, c-format +msgid "variable \"%s\" is not a pointer to a structure or a union" +msgstr "變數 \"%s\" 不是結構或聯集的指標" + +#: variable.c:150 +#, c-format +msgid "variable \"%s\" is neither a structure nor a union" +msgstr "變數 \"%s\" 不是結構或聯集" + +#: variable.c:160 +#, c-format +msgid "variable \"%s\" is not an array" +msgstr "變數 \"%s\" 不是陣列" + +#: variable.c:229 variable.c:251 +#, c-format +msgid "variable \"%s\" is not declared" +msgstr "變數 \"%s\" 未宣告" + +#: variable.c:484 +msgid "indicator variable must have an integer type" +msgstr "指標變數必須是整數型別" + +#: variable.c:496 +#, c-format +msgid "unrecognized data type name \"%s\"" +msgstr " 無法辨識的資料型別名稱 \"%s\"" + +#: variable.c:507 variable.c:515 variable.c:532 variable.c:535 +msgid "multidimensional arrays are not supported" +msgstr "不支援多維度陣列" + +#: variable.c:524 +#, c-format +msgid "" +"multilevel pointers (more than 2 levels) are not supported; found %d level" +msgid_plural "" +"multilevel pointers (more than 2 levels) are not supported; found %d levels" +msgstr[0] "不支援多層指標(2層以上),發現 %d 層" + +#: variable.c:529 +msgid "pointer to pointer is not supported for this data type" +msgstr "此資料型別不支援指標的指標" + +#: variable.c:549 +msgid "multidimensional arrays for structures are not supported" +msgstr "不支援多維度的結構陣列" + +#~ msgid "OLD used in query that is not in a rule" +#~ msgstr "查詢中使用的 OLD 不在規則中" + +#~ msgid "NEW used in query that is not in a rule" +#~ msgstr "查詢中使用的 NEW 不在規則中" diff --git a/src/interfaces/ecpg/preproc/preproc.c b/src/interfaces/ecpg/preproc/preproc.c new file mode 100644 index 0000000..074e508 --- /dev/null +++ b/src/interfaces/ecpg/preproc/preproc.c @@ -0,0 +1,65497 @@ +/* A Bison parser, made by GNU Bison 3.7.5. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output, and Bison version. */ +#define YYBISON 30705 + +/* Bison version string. */ +#define YYBISON_VERSION "3.7.5" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + +/* Substitute the variable and function names. */ +#define yyparse base_yyparse +#define yylex base_yylex +#define yyerror base_yyerror +#define yydebug base_yydebug +#define yynerrs base_yynerrs +#define yylval base_yylval +#define yychar base_yychar +#define yylloc base_yylloc + +/* First part of user prologue. */ +#line 5 "preproc.y" + +#include "postgres_fe.h" + +#include "preproc_extern.h" +#include "ecpg_config.h" +#include + +/* Location tracking support --- simpler than bison's default */ +#define YYLLOC_DEFAULT(Current, Rhs, N) \ + do { \ + if (N) \ + (Current) = (Rhs)[1]; \ + else \ + (Current) = (Rhs)[0]; \ + } while (0) + +/* + * The %name-prefix option below will make bison call base_yylex, but we + * really want it to call filtered_base_yylex (see parser.c). + */ +#define base_yylex filtered_base_yylex + +/* + * This is only here so the string gets into the POT. Bison uses it + * internally. + */ +#define bison_gettext_dummy gettext_noop("syntax error") + +/* + * Variables containing simple states. + */ +int struct_level = 0; +int braces_open; /* brace level counter */ +char *current_function; +int ecpg_internal_var = 0; +char *connection = NULL; +char *input_filename = NULL; + +static int FoundInto = 0; +static int initializer = 0; +static int pacounter = 1; +static char pacounter_buffer[sizeof(int) * CHAR_BIT * 10 / 3]; /* a rough guess at the size we need */ +static struct this_type actual_type[STRUCT_DEPTH]; +static char *actual_startline[STRUCT_DEPTH]; +static int varchar_counter = 1; +static int bytea_counter = 1; + +/* temporarily store struct members while creating the data structure */ +struct ECPGstruct_member *struct_member_list[STRUCT_DEPTH] = { NULL }; + +/* also store struct type so we can do a sizeof() later */ +static char *ECPGstruct_sizeof = NULL; + +/* for forward declarations we have to store some data as well */ +static char *forward_name = NULL; + +struct ECPGtype ecpg_no_indicator = {ECPGt_NO_INDICATOR, NULL, NULL, NULL, {NULL}, 0}; +struct variable no_indicator = {"no_indicator", &ecpg_no_indicator, 0, NULL}; + +static struct ECPGtype ecpg_query = {ECPGt_char_variable, NULL, NULL, NULL, {NULL}, 0}; + +static void vmmerror(int error_code, enum errortype type, const char *error, va_list ap) pg_attribute_printf(3, 0); + +static bool check_declared_list(const char*); + +/* + * Handle parsing errors and warnings + */ +static void +vmmerror(int error_code, enum errortype type, const char *error, va_list ap) +{ + /* localize the error message string */ + error = _(error); + + fprintf(stderr, "%s:%d: ", input_filename, base_yylineno); + + switch(type) + { + case ET_WARNING: + fprintf(stderr, _("WARNING: ")); + break; + case ET_ERROR: + fprintf(stderr, _("ERROR: ")); + break; + } + + vfprintf(stderr, error, ap); + + fprintf(stderr, "\n"); + + switch(type) + { + case ET_WARNING: + break; + case ET_ERROR: + ret_value = error_code; + break; + } +} + +void +mmerror(int error_code, enum errortype type, const char *error, ...) +{ + va_list ap; + + va_start(ap, error); + vmmerror(error_code, type, error, ap); + va_end(ap); +} + +void +mmfatal(int error_code, const char *error, ...) +{ + va_list ap; + + va_start(ap, error); + vmmerror(error_code, ET_ERROR, error, ap); + va_end(ap); + + if (base_yyin) + fclose(base_yyin); + if (base_yyout) + fclose(base_yyout); + + if (strcmp(output_filename, "-") != 0 && unlink(output_filename) != 0) + fprintf(stderr, _("could not remove output file \"%s\"\n"), output_filename); + exit(error_code); +} + +/* + * string concatenation + */ + +static char * +cat2_str(char *str1, char *str2) +{ + char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) + 2); + + strcpy(res_str, str1); + if (strlen(str1) != 0 && strlen(str2) != 0) + strcat(res_str, " "); + strcat(res_str, str2); + free(str1); + free(str2); + return res_str; +} + +static char * +cat_str(int count, ...) +{ + va_list args; + int i; + char *res_str; + + va_start(args, count); + + res_str = va_arg(args, char *); + + /* now add all other strings */ + for (i = 1; i < count; i++) + res_str = cat2_str(res_str, va_arg(args, char *)); + + va_end(args); + + return res_str; +} + +static char * +make2_str(char *str1, char *str2) +{ + char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) + 1); + + strcpy(res_str, str1); + strcat(res_str, str2); + free(str1); + free(str2); + return res_str; +} + +static char * +make3_str(char *str1, char *str2, char *str3) +{ + char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) +strlen(str3) + 1); + + strcpy(res_str, str1); + strcat(res_str, str2); + strcat(res_str, str3); + free(str1); + free(str2); + free(str3); + return res_str; +} + +/* and the rest */ +static char * +make_name(void) +{ + return mm_strdup(base_yytext); +} + +static char * +create_questionmarks(char *name, bool array) +{ + struct variable *p = find_variable(name); + int count; + char *result = EMPTY; + + /* In case we have a struct, we have to print as many "?" as there are attributes in the struct + * An array is only allowed together with an element argument + * This is essentially only used for inserts, but using a struct as input parameter is an error anywhere else + * so we don't have to worry here. */ + + if (p->type->type == ECPGt_struct || (array && p->type->type == ECPGt_array && p->type->u.element->type == ECPGt_struct)) + { + struct ECPGstruct_member *m; + + if (p->type->type == ECPGt_struct) + m = p->type->u.members; + else + m = p->type->u.element->u.members; + + for (count = 0; m != NULL; m=m->next, count++); + } + else + count = 1; + + for (; count > 0; count --) + { + sprintf(pacounter_buffer, "$%d", pacounter++); + result = cat_str(3, result, mm_strdup(pacounter_buffer), mm_strdup(" , ")); + } + + /* removed the trailing " ," */ + + result[strlen(result)-3] = '\0'; + return result; +} + +static char * +adjust_outofscope_cursor_vars(struct cursor *cur) +{ + /* Informix accepts DECLARE with variables that are out of scope when OPEN is called. + * For instance you can DECLARE a cursor in one function, and OPEN/FETCH/CLOSE + * it in another functions. This is very useful for e.g. event-driver programming, + * but may also lead to dangerous programming. The limitation when this is allowed + * and doesn't cause problems have to be documented, like the allocated variables + * must not be realloc()'ed. + * + * We have to change the variables to our own struct and just store the pointer + * instead of the variable. Do it only for local variables, not for globals. + */ + + char *result = EMPTY; + int insert; + + for (insert = 1; insert >= 0; insert--) + { + struct arguments *list; + struct arguments *ptr; + struct arguments *newlist = NULL; + struct variable *newvar, *newind; + + list = (insert ? cur->argsinsert : cur->argsresult); + + for (ptr = list; ptr != NULL; ptr = ptr->next) + { + char var_text[20]; + char *original_var; + bool skip_set_var = false; + bool var_ptr = false; + + /* change variable name to "ECPGget_var()" */ + original_var = ptr->variable->name; + sprintf(var_text, "%d))", ecpg_internal_var); + + /* Don't emit ECPGset_var() calls for global variables */ + if (ptr->variable->brace_level == 0) + { + newvar = ptr->variable; + skip_set_var = true; + } + else if ((ptr->variable->type->type == ECPGt_char_variable) + && (strncmp(ptr->variable->name, "ECPGprepared_statement", strlen("ECPGprepared_statement")) == 0)) + { + newvar = ptr->variable; + skip_set_var = true; + } + else if ((ptr->variable->type->type != ECPGt_varchar + && ptr->variable->type->type != ECPGt_char + && ptr->variable->type->type != ECPGt_unsigned_char + && ptr->variable->type->type != ECPGt_string + && ptr->variable->type->type != ECPGt_bytea) + && atoi(ptr->variable->type->size) > 1) + { + newvar = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, + mm_strdup("1"), + ptr->variable->type->u.element->counter), + ptr->variable->type->size), + 0); + } + else if ((ptr->variable->type->type == ECPGt_varchar + || ptr->variable->type->type == ECPGt_char + || ptr->variable->type->type == ECPGt_unsigned_char + || ptr->variable->type->type == ECPGt_string + || ptr->variable->type->type == ECPGt_bytea) + && atoi(ptr->variable->type->size) > 1) + { + newvar = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->variable->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->variable->type->type, + ptr->variable->type->size, + ptr->variable->type->counter), + 0); + if (ptr->variable->type->type == ECPGt_varchar || + ptr->variable->type->type == ECPGt_bytea) + var_ptr = true; + } + else if (ptr->variable->type->type == ECPGt_struct + || ptr->variable->type->type == ECPGt_union) + { + newvar = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->variable->type->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->variable->type->u.members, + ptr->variable->type->type, + ptr->variable->type->type_name, + ptr->variable->type->struct_sizeof), + 0); + var_ptr = true; + } + else if (ptr->variable->type->type == ECPGt_array) + { + if (ptr->variable->type->u.element->type == ECPGt_struct + || ptr->variable->type->u.element->type == ECPGt_union) + { + newvar = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->variable->type->u.element->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->variable->type->u.element->u.members, + ptr->variable->type->u.element->type, + ptr->variable->type->u.element->type_name, + ptr->variable->type->u.element->struct_sizeof), + 0); + } + else + { + newvar = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, + ptr->variable->type->u.element->size, + ptr->variable->type->u.element->counter), + ptr->variable->type->size), + 0); + var_ptr = true; + } + } + else + { + newvar = new_variable(cat_str(4, mm_strdup("*("), + mm_strdup(ecpg_type_name(ptr->variable->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->variable->type->type, + ptr->variable->type->size, + ptr->variable->type->counter), + 0); + var_ptr = true; + } + + /* create call to "ECPGset_var(, , . )" */ + if (!skip_set_var) + { + sprintf(var_text, "%d, %s", ecpg_internal_var++, var_ptr ? "&(" : "("); + result = cat_str(5, result, mm_strdup("ECPGset_var("), + mm_strdup(var_text), mm_strdup(original_var), + mm_strdup("), __LINE__);\n")); + } + + /* now the indicator if there is one and it's not a global variable */ + if ((ptr->indicator->type->type == ECPGt_NO_INDICATOR) || (ptr->indicator->brace_level == 0)) + { + newind = ptr->indicator; + } + else + { + /* change variable name to "ECPGget_var()" */ + original_var = ptr->indicator->name; + sprintf(var_text, "%d))", ecpg_internal_var); + var_ptr = false; + + if (ptr->indicator->type->type == ECPGt_struct + || ptr->indicator->type->type == ECPGt_union) + { + newind = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->indicator->type->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->indicator->type->u.members, + ptr->indicator->type->type, + ptr->indicator->type->type_name, + ptr->indicator->type->struct_sizeof), + 0); + var_ptr = true; + } + else if (ptr->indicator->type->type == ECPGt_array) + { + if (ptr->indicator->type->u.element->type == ECPGt_struct + || ptr->indicator->type->u.element->type == ECPGt_union) + { + newind = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->indicator->type->u.element->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->indicator->type->u.element->u.members, + ptr->indicator->type->u.element->type, + ptr->indicator->type->u.element->type_name, + ptr->indicator->type->u.element->struct_sizeof), + 0); + } + else + { + newind = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->indicator->type->u.element->type)), + mm_strdup(" *)(ECPGget_var("), mm_strdup(var_text)), + ECPGmake_array_type(ECPGmake_simple_type(ptr->indicator->type->u.element->type, + ptr->indicator->type->u.element->size, + ptr->indicator->type->u.element->counter), + ptr->indicator->type->size), + 0); + var_ptr = true; + } + } + else if (atoi(ptr->indicator->type->size) > 1) + { + newind = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->indicator->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->indicator->type->type, + ptr->indicator->type->size, + ptr->variable->type->counter), + 0); + } + else + { + newind = new_variable(cat_str(4, mm_strdup("*("), + mm_strdup(ecpg_type_name(ptr->indicator->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->indicator->type->type, + ptr->indicator->type->size, + ptr->variable->type->counter), + 0); + var_ptr = true; + } + + /* create call to "ECPGset_var(, . )" */ + sprintf(var_text, "%d, %s", ecpg_internal_var++, var_ptr ? "&(" : "("); + result = cat_str(5, result, mm_strdup("ECPGset_var("), + mm_strdup(var_text), mm_strdup(original_var), + mm_strdup("), __LINE__);\n")); + } + + add_variable_to_tail(&newlist, newvar, newind); + } + + if (insert) + cur->argsinsert_oos = newlist; + else + cur->argsresult_oos = newlist; + } + + return result; +} + +/* This tests whether the cursor was declared and opened in the same function. */ +#define SAMEFUNC(cur) \ + ((cur->function == NULL) || \ + (cur->function != NULL && strcmp(cur->function, current_function) == 0)) + +static struct cursor * +add_additional_variables(char *name, bool insert) +{ + struct cursor *ptr; + struct arguments *p; + int (* strcmp_fn)(const char *, const char *) = ((name[0] == ':' || name[0] == '"') ? strcmp : pg_strcasecmp); + + for (ptr = cur; ptr != NULL; ptr=ptr->next) + { + if (strcmp_fn(ptr->name, name) == 0) + break; + } + + if (ptr == NULL) + { + mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" does not exist", name); + return NULL; + } + + if (insert) + { + /* add all those input variables that were given earlier + * note that we have to append here but have to keep the existing order */ + for (p = (SAMEFUNC(ptr) ? ptr->argsinsert : ptr->argsinsert_oos); p; p = p->next) + add_variable_to_tail(&argsinsert, p->variable, p->indicator); + } + + /* add all those output variables that were given earlier */ + for (p = (SAMEFUNC(ptr) ? ptr->argsresult : ptr->argsresult_oos); p; p = p->next) + add_variable_to_tail(&argsresult, p->variable, p->indicator); + + return ptr; +} + +static void +add_typedef(char *name, char *dimension, char *length, enum ECPGttype type_enum, + char *type_dimension, char *type_index, int initializer, int array) +{ + /* add entry to list */ + struct typedefs *ptr, *this; + + if ((type_enum == ECPGt_struct || + type_enum == ECPGt_union) && + initializer == 1) + mmerror(PARSE_ERROR, ET_ERROR, "initializer not allowed in type definition"); + else if (INFORMIX_MODE && strcmp(name, "string") == 0) + mmerror(PARSE_ERROR, ET_ERROR, "type name \"string\" is reserved in Informix mode"); + else + { + for (ptr = types; ptr != NULL; ptr = ptr->next) + { + if (strcmp(name, ptr->name) == 0) + /* re-definition is a bug */ + mmerror(PARSE_ERROR, ET_ERROR, "type \"%s\" is already defined", name); + } + adjust_array(type_enum, &dimension, &length, type_dimension, type_index, array, true); + + this = (struct typedefs *) mm_alloc(sizeof(struct typedefs)); + + /* initial definition */ + this->next = types; + this->name = name; + this->brace_level = braces_open; + this->type = (struct this_type *) mm_alloc(sizeof(struct this_type)); + this->type->type_enum = type_enum; + this->type->type_str = mm_strdup(name); + this->type->type_dimension = dimension; /* dimension of array */ + this->type->type_index = length; /* length of string */ + this->type->type_sizeof = ECPGstruct_sizeof; + this->struct_member_list = (type_enum == ECPGt_struct || type_enum == ECPGt_union) ? + ECPGstruct_member_dup(struct_member_list[struct_level]) : NULL; + + if (type_enum != ECPGt_varchar && + type_enum != ECPGt_bytea && + type_enum != ECPGt_char && + type_enum != ECPGt_unsigned_char && + type_enum != ECPGt_string && + atoi(this->type->type_index) >= 0) + mmerror(PARSE_ERROR, ET_ERROR, "multidimensional arrays for simple data types are not supported"); + + types = this; + } +} + +/* + * check an SQL identifier is declared or not. + * If it is already declared, the global variable + * connection will be changed to the related connection. + */ +static bool +check_declared_list(const char *name) +{ + struct declared_list *ptr = NULL; + for (ptr = g_declared_list; ptr != NULL; ptr = ptr -> next) + { + if (!ptr->connection) + continue; + if (strcmp(name, ptr -> name) == 0) + { + if (connection && strcmp(ptr->connection, connection) != 0) + mmerror(PARSE_ERROR, ET_WARNING, "connection %s is overwritten with %s by DECLARE statement %s", connection, ptr->connection, name); + connection = mm_strdup(ptr -> connection); + return true; + } + } + return false; +} + +#line 682 "preproc.c" + +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif +# ifndef YY_NULLPTR +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# else +# define YY_NULLPTR ((void*)0) +# endif +# endif + +#include "preproc.h" +/* Symbol kind. */ +enum yysymbol_kind_t +{ + YYSYMBOL_YYEMPTY = -2, + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYerror = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ + YYSYMBOL_SQL_ALLOCATE = 3, /* SQL_ALLOCATE */ + YYSYMBOL_SQL_AUTOCOMMIT = 4, /* SQL_AUTOCOMMIT */ + YYSYMBOL_SQL_BOOL = 5, /* SQL_BOOL */ + YYSYMBOL_SQL_BREAK = 6, /* SQL_BREAK */ + YYSYMBOL_SQL_CARDINALITY = 7, /* SQL_CARDINALITY */ + YYSYMBOL_SQL_CONNECT = 8, /* SQL_CONNECT */ + YYSYMBOL_SQL_COUNT = 9, /* SQL_COUNT */ + YYSYMBOL_SQL_DATETIME_INTERVAL_CODE = 10, /* SQL_DATETIME_INTERVAL_CODE */ + YYSYMBOL_SQL_DATETIME_INTERVAL_PRECISION = 11, /* SQL_DATETIME_INTERVAL_PRECISION */ + YYSYMBOL_SQL_DESCRIBE = 12, /* SQL_DESCRIBE */ + YYSYMBOL_SQL_DESCRIPTOR = 13, /* SQL_DESCRIPTOR */ + YYSYMBOL_SQL_DISCONNECT = 14, /* SQL_DISCONNECT */ + YYSYMBOL_SQL_FOUND = 15, /* SQL_FOUND */ + YYSYMBOL_SQL_FREE = 16, /* SQL_FREE */ + YYSYMBOL_SQL_GET = 17, /* SQL_GET */ + YYSYMBOL_SQL_GO = 18, /* SQL_GO */ + YYSYMBOL_SQL_GOTO = 19, /* SQL_GOTO */ + YYSYMBOL_SQL_IDENTIFIED = 20, /* SQL_IDENTIFIED */ + YYSYMBOL_SQL_INDICATOR = 21, /* SQL_INDICATOR */ + YYSYMBOL_SQL_KEY_MEMBER = 22, /* SQL_KEY_MEMBER */ + YYSYMBOL_SQL_LENGTH = 23, /* SQL_LENGTH */ + YYSYMBOL_SQL_LONG = 24, /* SQL_LONG */ + YYSYMBOL_SQL_NULLABLE = 25, /* SQL_NULLABLE */ + YYSYMBOL_SQL_OCTET_LENGTH = 26, /* SQL_OCTET_LENGTH */ + YYSYMBOL_SQL_OPEN = 27, /* SQL_OPEN */ + YYSYMBOL_SQL_OUTPUT = 28, /* SQL_OUTPUT */ + YYSYMBOL_SQL_REFERENCE = 29, /* SQL_REFERENCE */ + YYSYMBOL_SQL_RETURNED_LENGTH = 30, /* SQL_RETURNED_LENGTH */ + YYSYMBOL_SQL_RETURNED_OCTET_LENGTH = 31, /* SQL_RETURNED_OCTET_LENGTH */ + YYSYMBOL_SQL_SCALE = 32, /* SQL_SCALE */ + YYSYMBOL_SQL_SECTION = 33, /* SQL_SECTION */ + YYSYMBOL_SQL_SHORT = 34, /* SQL_SHORT */ + YYSYMBOL_SQL_SIGNED = 35, /* SQL_SIGNED */ + YYSYMBOL_SQL_SQLERROR = 36, /* SQL_SQLERROR */ + YYSYMBOL_SQL_SQLPRINT = 37, /* SQL_SQLPRINT */ + YYSYMBOL_SQL_SQLWARNING = 38, /* SQL_SQLWARNING */ + YYSYMBOL_SQL_START = 39, /* SQL_START */ + YYSYMBOL_SQL_STOP = 40, /* SQL_STOP */ + YYSYMBOL_SQL_STRUCT = 41, /* SQL_STRUCT */ + YYSYMBOL_SQL_UNSIGNED = 42, /* SQL_UNSIGNED */ + YYSYMBOL_SQL_VAR = 43, /* SQL_VAR */ + YYSYMBOL_SQL_WHENEVER = 44, /* SQL_WHENEVER */ + YYSYMBOL_S_ADD = 45, /* S_ADD */ + YYSYMBOL_S_AND = 46, /* S_AND */ + YYSYMBOL_S_ANYTHING = 47, /* S_ANYTHING */ + YYSYMBOL_S_AUTO = 48, /* S_AUTO */ + YYSYMBOL_S_CONST = 49, /* S_CONST */ + YYSYMBOL_S_DEC = 50, /* S_DEC */ + YYSYMBOL_S_DIV = 51, /* S_DIV */ + YYSYMBOL_S_DOTPOINT = 52, /* S_DOTPOINT */ + YYSYMBOL_S_EQUAL = 53, /* S_EQUAL */ + YYSYMBOL_S_EXTERN = 54, /* S_EXTERN */ + YYSYMBOL_S_INC = 55, /* S_INC */ + YYSYMBOL_S_LSHIFT = 56, /* S_LSHIFT */ + YYSYMBOL_S_MEMPOINT = 57, /* S_MEMPOINT */ + YYSYMBOL_S_MEMBER = 58, /* S_MEMBER */ + YYSYMBOL_S_MOD = 59, /* S_MOD */ + YYSYMBOL_S_MUL = 60, /* S_MUL */ + YYSYMBOL_S_NEQUAL = 61, /* S_NEQUAL */ + YYSYMBOL_S_OR = 62, /* S_OR */ + YYSYMBOL_S_REGISTER = 63, /* S_REGISTER */ + YYSYMBOL_S_RSHIFT = 64, /* S_RSHIFT */ + YYSYMBOL_S_STATIC = 65, /* S_STATIC */ + YYSYMBOL_S_SUB = 66, /* S_SUB */ + YYSYMBOL_S_VOLATILE = 67, /* S_VOLATILE */ + YYSYMBOL_S_TYPEDEF = 68, /* S_TYPEDEF */ + YYSYMBOL_CSTRING = 69, /* CSTRING */ + YYSYMBOL_CVARIABLE = 70, /* CVARIABLE */ + YYSYMBOL_CPP_LINE = 71, /* CPP_LINE */ + YYSYMBOL_IP = 72, /* IP */ + YYSYMBOL_IDENT = 73, /* IDENT */ + YYSYMBOL_UIDENT = 74, /* UIDENT */ + YYSYMBOL_FCONST = 75, /* FCONST */ + YYSYMBOL_SCONST = 76, /* SCONST */ + YYSYMBOL_USCONST = 77, /* USCONST */ + YYSYMBOL_BCONST = 78, /* BCONST */ + YYSYMBOL_XCONST = 79, /* XCONST */ + YYSYMBOL_Op = 80, /* Op */ + YYSYMBOL_ICONST = 81, /* ICONST */ + YYSYMBOL_PARAM = 82, /* PARAM */ + YYSYMBOL_TYPECAST = 83, /* TYPECAST */ + YYSYMBOL_DOT_DOT = 84, /* DOT_DOT */ + YYSYMBOL_COLON_EQUALS = 85, /* COLON_EQUALS */ + YYSYMBOL_EQUALS_GREATER = 86, /* EQUALS_GREATER */ + YYSYMBOL_LESS_EQUALS = 87, /* LESS_EQUALS */ + YYSYMBOL_GREATER_EQUALS = 88, /* GREATER_EQUALS */ + YYSYMBOL_NOT_EQUALS = 89, /* NOT_EQUALS */ + YYSYMBOL_ABORT_P = 90, /* ABORT_P */ + YYSYMBOL_ABSOLUTE_P = 91, /* ABSOLUTE_P */ + YYSYMBOL_ACCESS = 92, /* ACCESS */ + YYSYMBOL_ACTION = 93, /* ACTION */ + YYSYMBOL_ADD_P = 94, /* ADD_P */ + YYSYMBOL_ADMIN = 95, /* ADMIN */ + YYSYMBOL_AFTER = 96, /* AFTER */ + YYSYMBOL_AGGREGATE = 97, /* AGGREGATE */ + YYSYMBOL_ALL = 98, /* ALL */ + YYSYMBOL_ALSO = 99, /* ALSO */ + YYSYMBOL_ALTER = 100, /* ALTER */ + YYSYMBOL_ALWAYS = 101, /* ALWAYS */ + YYSYMBOL_ANALYSE = 102, /* ANALYSE */ + YYSYMBOL_ANALYZE = 103, /* ANALYZE */ + YYSYMBOL_AND = 104, /* AND */ + YYSYMBOL_ANY = 105, /* ANY */ + YYSYMBOL_ARRAY = 106, /* ARRAY */ + YYSYMBOL_AS = 107, /* AS */ + YYSYMBOL_ASC = 108, /* ASC */ + YYSYMBOL_ASENSITIVE = 109, /* ASENSITIVE */ + YYSYMBOL_ASSERTION = 110, /* ASSERTION */ + YYSYMBOL_ASSIGNMENT = 111, /* ASSIGNMENT */ + YYSYMBOL_ASYMMETRIC = 112, /* ASYMMETRIC */ + YYSYMBOL_ATOMIC = 113, /* ATOMIC */ + YYSYMBOL_AT = 114, /* AT */ + YYSYMBOL_ATTACH = 115, /* ATTACH */ + YYSYMBOL_ATTRIBUTE = 116, /* ATTRIBUTE */ + YYSYMBOL_AUTHORIZATION = 117, /* AUTHORIZATION */ + YYSYMBOL_BACKWARD = 118, /* BACKWARD */ + YYSYMBOL_BEFORE = 119, /* BEFORE */ + YYSYMBOL_BEGIN_P = 120, /* BEGIN_P */ + YYSYMBOL_BETWEEN = 121, /* BETWEEN */ + YYSYMBOL_BIGINT = 122, /* BIGINT */ + YYSYMBOL_BINARY = 123, /* BINARY */ + YYSYMBOL_BIT = 124, /* BIT */ + YYSYMBOL_BOOLEAN_P = 125, /* BOOLEAN_P */ + YYSYMBOL_BOTH = 126, /* BOTH */ + YYSYMBOL_BREADTH = 127, /* BREADTH */ + YYSYMBOL_BY = 128, /* BY */ + YYSYMBOL_CACHE = 129, /* CACHE */ + YYSYMBOL_CALL = 130, /* CALL */ + YYSYMBOL_CALLED = 131, /* CALLED */ + YYSYMBOL_CASCADE = 132, /* CASCADE */ + YYSYMBOL_CASCADED = 133, /* CASCADED */ + YYSYMBOL_CASE = 134, /* CASE */ + YYSYMBOL_CAST = 135, /* CAST */ + YYSYMBOL_CATALOG_P = 136, /* CATALOG_P */ + YYSYMBOL_CHAIN = 137, /* CHAIN */ + YYSYMBOL_CHAR_P = 138, /* CHAR_P */ + YYSYMBOL_CHARACTER = 139, /* CHARACTER */ + YYSYMBOL_CHARACTERISTICS = 140, /* CHARACTERISTICS */ + YYSYMBOL_CHECK = 141, /* CHECK */ + YYSYMBOL_CHECKPOINT = 142, /* CHECKPOINT */ + YYSYMBOL_CLASS = 143, /* CLASS */ + YYSYMBOL_CLOSE = 144, /* CLOSE */ + YYSYMBOL_CLUSTER = 145, /* CLUSTER */ + YYSYMBOL_COALESCE = 146, /* COALESCE */ + YYSYMBOL_COLLATE = 147, /* COLLATE */ + YYSYMBOL_COLLATION = 148, /* COLLATION */ + YYSYMBOL_COLUMN = 149, /* COLUMN */ + YYSYMBOL_COLUMNS = 150, /* COLUMNS */ + YYSYMBOL_COMMENT = 151, /* COMMENT */ + YYSYMBOL_COMMENTS = 152, /* COMMENTS */ + YYSYMBOL_COMMIT = 153, /* COMMIT */ + YYSYMBOL_COMMITTED = 154, /* COMMITTED */ + YYSYMBOL_COMPRESSION = 155, /* COMPRESSION */ + YYSYMBOL_CONCURRENTLY = 156, /* CONCURRENTLY */ + YYSYMBOL_CONFIGURATION = 157, /* CONFIGURATION */ + YYSYMBOL_CONFLICT = 158, /* CONFLICT */ + YYSYMBOL_CONNECTION = 159, /* CONNECTION */ + YYSYMBOL_CONSTRAINT = 160, /* CONSTRAINT */ + YYSYMBOL_CONSTRAINTS = 161, /* CONSTRAINTS */ + YYSYMBOL_CONTENT_P = 162, /* CONTENT_P */ + YYSYMBOL_CONTINUE_P = 163, /* CONTINUE_P */ + YYSYMBOL_CONVERSION_P = 164, /* CONVERSION_P */ + YYSYMBOL_COPY = 165, /* COPY */ + YYSYMBOL_COST = 166, /* COST */ + YYSYMBOL_CREATE = 167, /* CREATE */ + YYSYMBOL_CROSS = 168, /* CROSS */ + YYSYMBOL_CSV = 169, /* CSV */ + YYSYMBOL_CUBE = 170, /* CUBE */ + YYSYMBOL_CURRENT_P = 171, /* CURRENT_P */ + YYSYMBOL_CURRENT_CATALOG = 172, /* CURRENT_CATALOG */ + YYSYMBOL_CURRENT_DATE = 173, /* CURRENT_DATE */ + YYSYMBOL_CURRENT_ROLE = 174, /* CURRENT_ROLE */ + YYSYMBOL_CURRENT_SCHEMA = 175, /* CURRENT_SCHEMA */ + YYSYMBOL_CURRENT_TIME = 176, /* CURRENT_TIME */ + YYSYMBOL_CURRENT_TIMESTAMP = 177, /* CURRENT_TIMESTAMP */ + YYSYMBOL_CURRENT_USER = 178, /* CURRENT_USER */ + YYSYMBOL_CURSOR = 179, /* CURSOR */ + YYSYMBOL_CYCLE = 180, /* CYCLE */ + YYSYMBOL_DATA_P = 181, /* DATA_P */ + YYSYMBOL_DATABASE = 182, /* DATABASE */ + YYSYMBOL_DAY_P = 183, /* DAY_P */ + YYSYMBOL_DEALLOCATE = 184, /* DEALLOCATE */ + YYSYMBOL_DEC = 185, /* DEC */ + YYSYMBOL_DECIMAL_P = 186, /* DECIMAL_P */ + YYSYMBOL_DECLARE = 187, /* DECLARE */ + YYSYMBOL_DEFAULT = 188, /* DEFAULT */ + YYSYMBOL_DEFAULTS = 189, /* DEFAULTS */ + YYSYMBOL_DEFERRABLE = 190, /* DEFERRABLE */ + YYSYMBOL_DEFERRED = 191, /* DEFERRED */ + YYSYMBOL_DEFINER = 192, /* DEFINER */ + YYSYMBOL_DELETE_P = 193, /* DELETE_P */ + YYSYMBOL_DELIMITER = 194, /* DELIMITER */ + YYSYMBOL_DELIMITERS = 195, /* DELIMITERS */ + YYSYMBOL_DEPENDS = 196, /* DEPENDS */ + YYSYMBOL_DEPTH = 197, /* DEPTH */ + YYSYMBOL_DESC = 198, /* DESC */ + YYSYMBOL_DETACH = 199, /* DETACH */ + YYSYMBOL_DICTIONARY = 200, /* DICTIONARY */ + YYSYMBOL_DISABLE_P = 201, /* DISABLE_P */ + YYSYMBOL_DISCARD = 202, /* DISCARD */ + YYSYMBOL_DISTINCT = 203, /* DISTINCT */ + YYSYMBOL_DO = 204, /* DO */ + YYSYMBOL_DOCUMENT_P = 205, /* DOCUMENT_P */ + YYSYMBOL_DOMAIN_P = 206, /* DOMAIN_P */ + YYSYMBOL_DOUBLE_P = 207, /* DOUBLE_P */ + YYSYMBOL_DROP = 208, /* DROP */ + YYSYMBOL_EACH = 209, /* EACH */ + YYSYMBOL_ELSE = 210, /* ELSE */ + YYSYMBOL_ENABLE_P = 211, /* ENABLE_P */ + YYSYMBOL_ENCODING = 212, /* ENCODING */ + YYSYMBOL_ENCRYPTED = 213, /* ENCRYPTED */ + YYSYMBOL_END_P = 214, /* END_P */ + YYSYMBOL_ENUM_P = 215, /* ENUM_P */ + YYSYMBOL_ESCAPE = 216, /* ESCAPE */ + YYSYMBOL_EVENT = 217, /* EVENT */ + YYSYMBOL_EXCEPT = 218, /* EXCEPT */ + YYSYMBOL_EXCLUDE = 219, /* EXCLUDE */ + YYSYMBOL_EXCLUDING = 220, /* EXCLUDING */ + YYSYMBOL_EXCLUSIVE = 221, /* EXCLUSIVE */ + YYSYMBOL_EXECUTE = 222, /* EXECUTE */ + YYSYMBOL_EXISTS = 223, /* EXISTS */ + YYSYMBOL_EXPLAIN = 224, /* EXPLAIN */ + YYSYMBOL_EXPRESSION = 225, /* EXPRESSION */ + YYSYMBOL_EXTENSION = 226, /* EXTENSION */ + YYSYMBOL_EXTERNAL = 227, /* EXTERNAL */ + YYSYMBOL_EXTRACT = 228, /* EXTRACT */ + YYSYMBOL_FALSE_P = 229, /* FALSE_P */ + YYSYMBOL_FAMILY = 230, /* FAMILY */ + YYSYMBOL_FETCH = 231, /* FETCH */ + YYSYMBOL_FILTER = 232, /* FILTER */ + YYSYMBOL_FINALIZE = 233, /* FINALIZE */ + YYSYMBOL_FIRST_P = 234, /* FIRST_P */ + YYSYMBOL_FLOAT_P = 235, /* FLOAT_P */ + YYSYMBOL_FOLLOWING = 236, /* FOLLOWING */ + YYSYMBOL_FOR = 237, /* FOR */ + YYSYMBOL_FORCE = 238, /* FORCE */ + YYSYMBOL_FOREIGN = 239, /* FOREIGN */ + YYSYMBOL_FORWARD = 240, /* FORWARD */ + YYSYMBOL_FREEZE = 241, /* FREEZE */ + YYSYMBOL_FROM = 242, /* FROM */ + YYSYMBOL_FULL = 243, /* FULL */ + YYSYMBOL_FUNCTION = 244, /* FUNCTION */ + YYSYMBOL_FUNCTIONS = 245, /* FUNCTIONS */ + YYSYMBOL_GENERATED = 246, /* GENERATED */ + YYSYMBOL_GLOBAL = 247, /* GLOBAL */ + YYSYMBOL_GRANT = 248, /* GRANT */ + YYSYMBOL_GRANTED = 249, /* GRANTED */ + YYSYMBOL_GREATEST = 250, /* GREATEST */ + YYSYMBOL_GROUP_P = 251, /* GROUP_P */ + YYSYMBOL_GROUPING = 252, /* GROUPING */ + YYSYMBOL_GROUPS = 253, /* GROUPS */ + YYSYMBOL_HANDLER = 254, /* HANDLER */ + YYSYMBOL_HAVING = 255, /* HAVING */ + YYSYMBOL_HEADER_P = 256, /* HEADER_P */ + YYSYMBOL_HOLD = 257, /* HOLD */ + YYSYMBOL_HOUR_P = 258, /* HOUR_P */ + YYSYMBOL_IDENTITY_P = 259, /* IDENTITY_P */ + YYSYMBOL_IF_P = 260, /* IF_P */ + YYSYMBOL_ILIKE = 261, /* ILIKE */ + YYSYMBOL_IMMEDIATE = 262, /* IMMEDIATE */ + YYSYMBOL_IMMUTABLE = 263, /* IMMUTABLE */ + YYSYMBOL_IMPLICIT_P = 264, /* IMPLICIT_P */ + YYSYMBOL_IMPORT_P = 265, /* IMPORT_P */ + YYSYMBOL_IN_P = 266, /* IN_P */ + YYSYMBOL_INCLUDE = 267, /* INCLUDE */ + YYSYMBOL_INCLUDING = 268, /* INCLUDING */ + YYSYMBOL_INCREMENT = 269, /* INCREMENT */ + YYSYMBOL_INDEX = 270, /* INDEX */ + YYSYMBOL_INDEXES = 271, /* INDEXES */ + YYSYMBOL_INHERIT = 272, /* INHERIT */ + YYSYMBOL_INHERITS = 273, /* INHERITS */ + YYSYMBOL_INITIALLY = 274, /* INITIALLY */ + YYSYMBOL_INLINE_P = 275, /* INLINE_P */ + YYSYMBOL_INNER_P = 276, /* INNER_P */ + YYSYMBOL_INOUT = 277, /* INOUT */ + YYSYMBOL_INPUT_P = 278, /* INPUT_P */ + YYSYMBOL_INSENSITIVE = 279, /* INSENSITIVE */ + YYSYMBOL_INSERT = 280, /* INSERT */ + YYSYMBOL_INSTEAD = 281, /* INSTEAD */ + YYSYMBOL_INT_P = 282, /* INT_P */ + YYSYMBOL_INTEGER = 283, /* INTEGER */ + YYSYMBOL_INTERSECT = 284, /* INTERSECT */ + YYSYMBOL_INTERVAL = 285, /* INTERVAL */ + YYSYMBOL_INTO = 286, /* INTO */ + YYSYMBOL_INVOKER = 287, /* INVOKER */ + YYSYMBOL_IS = 288, /* IS */ + YYSYMBOL_ISNULL = 289, /* ISNULL */ + YYSYMBOL_ISOLATION = 290, /* ISOLATION */ + YYSYMBOL_JOIN = 291, /* JOIN */ + YYSYMBOL_KEY = 292, /* KEY */ + YYSYMBOL_LABEL = 293, /* LABEL */ + YYSYMBOL_LANGUAGE = 294, /* LANGUAGE */ + YYSYMBOL_LARGE_P = 295, /* LARGE_P */ + YYSYMBOL_LAST_P = 296, /* LAST_P */ + YYSYMBOL_LATERAL_P = 297, /* LATERAL_P */ + YYSYMBOL_LEADING = 298, /* LEADING */ + YYSYMBOL_LEAKPROOF = 299, /* LEAKPROOF */ + YYSYMBOL_LEAST = 300, /* LEAST */ + YYSYMBOL_LEFT = 301, /* LEFT */ + YYSYMBOL_LEVEL = 302, /* LEVEL */ + YYSYMBOL_LIKE = 303, /* LIKE */ + YYSYMBOL_LIMIT = 304, /* LIMIT */ + YYSYMBOL_LISTEN = 305, /* LISTEN */ + YYSYMBOL_LOAD = 306, /* LOAD */ + YYSYMBOL_LOCAL = 307, /* LOCAL */ + YYSYMBOL_LOCALTIME = 308, /* LOCALTIME */ + YYSYMBOL_LOCALTIMESTAMP = 309, /* LOCALTIMESTAMP */ + YYSYMBOL_LOCATION = 310, /* LOCATION */ + YYSYMBOL_LOCK_P = 311, /* LOCK_P */ + YYSYMBOL_LOCKED = 312, /* LOCKED */ + YYSYMBOL_LOGGED = 313, /* LOGGED */ + YYSYMBOL_MAPPING = 314, /* MAPPING */ + YYSYMBOL_MATCH = 315, /* MATCH */ + YYSYMBOL_MATERIALIZED = 316, /* MATERIALIZED */ + YYSYMBOL_MAXVALUE = 317, /* MAXVALUE */ + YYSYMBOL_METHOD = 318, /* METHOD */ + YYSYMBOL_MINUTE_P = 319, /* MINUTE_P */ + YYSYMBOL_MINVALUE = 320, /* MINVALUE */ + YYSYMBOL_MODE = 321, /* MODE */ + YYSYMBOL_MONTH_P = 322, /* MONTH_P */ + YYSYMBOL_MOVE = 323, /* MOVE */ + YYSYMBOL_NAME_P = 324, /* NAME_P */ + YYSYMBOL_NAMES = 325, /* NAMES */ + YYSYMBOL_NATIONAL = 326, /* NATIONAL */ + YYSYMBOL_NATURAL = 327, /* NATURAL */ + YYSYMBOL_NCHAR = 328, /* NCHAR */ + YYSYMBOL_NEW = 329, /* NEW */ + YYSYMBOL_NEXT = 330, /* NEXT */ + YYSYMBOL_NFC = 331, /* NFC */ + YYSYMBOL_NFD = 332, /* NFD */ + YYSYMBOL_NFKC = 333, /* NFKC */ + YYSYMBOL_NFKD = 334, /* NFKD */ + YYSYMBOL_NO = 335, /* NO */ + YYSYMBOL_NONE = 336, /* NONE */ + YYSYMBOL_NORMALIZE = 337, /* NORMALIZE */ + YYSYMBOL_NORMALIZED = 338, /* NORMALIZED */ + YYSYMBOL_NOT = 339, /* NOT */ + YYSYMBOL_NOTHING = 340, /* NOTHING */ + YYSYMBOL_NOTIFY = 341, /* NOTIFY */ + YYSYMBOL_NOTNULL = 342, /* NOTNULL */ + YYSYMBOL_NOWAIT = 343, /* NOWAIT */ + YYSYMBOL_NULL_P = 344, /* NULL_P */ + YYSYMBOL_NULLIF = 345, /* NULLIF */ + YYSYMBOL_NULLS_P = 346, /* NULLS_P */ + YYSYMBOL_NUMERIC = 347, /* NUMERIC */ + YYSYMBOL_OBJECT_P = 348, /* OBJECT_P */ + YYSYMBOL_OF = 349, /* OF */ + YYSYMBOL_OFF = 350, /* OFF */ + YYSYMBOL_OFFSET = 351, /* OFFSET */ + YYSYMBOL_OIDS = 352, /* OIDS */ + YYSYMBOL_OLD = 353, /* OLD */ + YYSYMBOL_ON = 354, /* ON */ + YYSYMBOL_ONLY = 355, /* ONLY */ + YYSYMBOL_OPERATOR = 356, /* OPERATOR */ + YYSYMBOL_OPTION = 357, /* OPTION */ + YYSYMBOL_OPTIONS = 358, /* OPTIONS */ + YYSYMBOL_OR = 359, /* OR */ + YYSYMBOL_ORDER = 360, /* ORDER */ + YYSYMBOL_ORDINALITY = 361, /* ORDINALITY */ + YYSYMBOL_OTHERS = 362, /* OTHERS */ + YYSYMBOL_OUT_P = 363, /* OUT_P */ + YYSYMBOL_OUTER_P = 364, /* OUTER_P */ + YYSYMBOL_OVER = 365, /* OVER */ + YYSYMBOL_OVERLAPS = 366, /* OVERLAPS */ + YYSYMBOL_OVERLAY = 367, /* OVERLAY */ + YYSYMBOL_OVERRIDING = 368, /* OVERRIDING */ + YYSYMBOL_OWNED = 369, /* OWNED */ + YYSYMBOL_OWNER = 370, /* OWNER */ + YYSYMBOL_PARALLEL = 371, /* PARALLEL */ + YYSYMBOL_PARSER = 372, /* PARSER */ + YYSYMBOL_PARTIAL = 373, /* PARTIAL */ + YYSYMBOL_PARTITION = 374, /* PARTITION */ + YYSYMBOL_PASSING = 375, /* PASSING */ + YYSYMBOL_PASSWORD = 376, /* PASSWORD */ + YYSYMBOL_PLACING = 377, /* PLACING */ + YYSYMBOL_PLANS = 378, /* PLANS */ + YYSYMBOL_POLICY = 379, /* POLICY */ + YYSYMBOL_POSITION = 380, /* POSITION */ + YYSYMBOL_PRECEDING = 381, /* PRECEDING */ + YYSYMBOL_PRECISION = 382, /* PRECISION */ + YYSYMBOL_PRESERVE = 383, /* PRESERVE */ + YYSYMBOL_PREPARE = 384, /* PREPARE */ + YYSYMBOL_PREPARED = 385, /* PREPARED */ + YYSYMBOL_PRIMARY = 386, /* PRIMARY */ + YYSYMBOL_PRIOR = 387, /* PRIOR */ + YYSYMBOL_PRIVILEGES = 388, /* PRIVILEGES */ + YYSYMBOL_PROCEDURAL = 389, /* PROCEDURAL */ + YYSYMBOL_PROCEDURE = 390, /* PROCEDURE */ + YYSYMBOL_PROCEDURES = 391, /* PROCEDURES */ + YYSYMBOL_PROGRAM = 392, /* PROGRAM */ + YYSYMBOL_PUBLICATION = 393, /* PUBLICATION */ + YYSYMBOL_QUOTE = 394, /* QUOTE */ + YYSYMBOL_RANGE = 395, /* RANGE */ + YYSYMBOL_READ = 396, /* READ */ + YYSYMBOL_REAL = 397, /* REAL */ + YYSYMBOL_REASSIGN = 398, /* REASSIGN */ + YYSYMBOL_RECHECK = 399, /* RECHECK */ + YYSYMBOL_RECURSIVE = 400, /* RECURSIVE */ + YYSYMBOL_REF = 401, /* REF */ + YYSYMBOL_REFERENCES = 402, /* REFERENCES */ + YYSYMBOL_REFERENCING = 403, /* REFERENCING */ + YYSYMBOL_REFRESH = 404, /* REFRESH */ + YYSYMBOL_REINDEX = 405, /* REINDEX */ + YYSYMBOL_RELATIVE_P = 406, /* RELATIVE_P */ + YYSYMBOL_RELEASE = 407, /* RELEASE */ + YYSYMBOL_RENAME = 408, /* RENAME */ + YYSYMBOL_REPEATABLE = 409, /* REPEATABLE */ + YYSYMBOL_REPLACE = 410, /* REPLACE */ + YYSYMBOL_REPLICA = 411, /* REPLICA */ + YYSYMBOL_RESET = 412, /* RESET */ + YYSYMBOL_RESTART = 413, /* RESTART */ + YYSYMBOL_RESTRICT = 414, /* RESTRICT */ + YYSYMBOL_RETURN = 415, /* RETURN */ + YYSYMBOL_RETURNING = 416, /* RETURNING */ + YYSYMBOL_RETURNS = 417, /* RETURNS */ + YYSYMBOL_REVOKE = 418, /* REVOKE */ + YYSYMBOL_RIGHT = 419, /* RIGHT */ + YYSYMBOL_ROLE = 420, /* ROLE */ + YYSYMBOL_ROLLBACK = 421, /* ROLLBACK */ + YYSYMBOL_ROLLUP = 422, /* ROLLUP */ + YYSYMBOL_ROUTINE = 423, /* ROUTINE */ + YYSYMBOL_ROUTINES = 424, /* ROUTINES */ + YYSYMBOL_ROW = 425, /* ROW */ + YYSYMBOL_ROWS = 426, /* ROWS */ + YYSYMBOL_RULE = 427, /* RULE */ + YYSYMBOL_SAVEPOINT = 428, /* SAVEPOINT */ + YYSYMBOL_SCHEMA = 429, /* SCHEMA */ + YYSYMBOL_SCHEMAS = 430, /* SCHEMAS */ + YYSYMBOL_SCROLL = 431, /* SCROLL */ + YYSYMBOL_SEARCH = 432, /* SEARCH */ + YYSYMBOL_SECOND_P = 433, /* SECOND_P */ + YYSYMBOL_SECURITY = 434, /* SECURITY */ + YYSYMBOL_SELECT = 435, /* SELECT */ + YYSYMBOL_SEQUENCE = 436, /* SEQUENCE */ + YYSYMBOL_SEQUENCES = 437, /* SEQUENCES */ + YYSYMBOL_SERIALIZABLE = 438, /* SERIALIZABLE */ + YYSYMBOL_SERVER = 439, /* SERVER */ + YYSYMBOL_SESSION = 440, /* SESSION */ + YYSYMBOL_SESSION_USER = 441, /* SESSION_USER */ + YYSYMBOL_SET = 442, /* SET */ + YYSYMBOL_SETS = 443, /* SETS */ + YYSYMBOL_SETOF = 444, /* SETOF */ + YYSYMBOL_SHARE = 445, /* SHARE */ + YYSYMBOL_SHOW = 446, /* SHOW */ + YYSYMBOL_SIMILAR = 447, /* SIMILAR */ + YYSYMBOL_SIMPLE = 448, /* SIMPLE */ + YYSYMBOL_SKIP = 449, /* SKIP */ + YYSYMBOL_SMALLINT = 450, /* SMALLINT */ + YYSYMBOL_SNAPSHOT = 451, /* SNAPSHOT */ + YYSYMBOL_SOME = 452, /* SOME */ + YYSYMBOL_SQL_P = 453, /* SQL_P */ + YYSYMBOL_STABLE = 454, /* STABLE */ + YYSYMBOL_STANDALONE_P = 455, /* STANDALONE_P */ + YYSYMBOL_START = 456, /* START */ + YYSYMBOL_STATEMENT = 457, /* STATEMENT */ + YYSYMBOL_STATISTICS = 458, /* STATISTICS */ + YYSYMBOL_STDIN = 459, /* STDIN */ + YYSYMBOL_STDOUT = 460, /* STDOUT */ + YYSYMBOL_STORAGE = 461, /* STORAGE */ + YYSYMBOL_STORED = 462, /* STORED */ + YYSYMBOL_STRICT_P = 463, /* STRICT_P */ + YYSYMBOL_STRIP_P = 464, /* STRIP_P */ + YYSYMBOL_SUBSCRIPTION = 465, /* SUBSCRIPTION */ + YYSYMBOL_SUBSTRING = 466, /* SUBSTRING */ + YYSYMBOL_SUPPORT = 467, /* SUPPORT */ + YYSYMBOL_SYMMETRIC = 468, /* SYMMETRIC */ + YYSYMBOL_SYSID = 469, /* SYSID */ + YYSYMBOL_SYSTEM_P = 470, /* SYSTEM_P */ + YYSYMBOL_TABLE = 471, /* TABLE */ + YYSYMBOL_TABLES = 472, /* TABLES */ + YYSYMBOL_TABLESAMPLE = 473, /* TABLESAMPLE */ + YYSYMBOL_TABLESPACE = 474, /* TABLESPACE */ + YYSYMBOL_TEMP = 475, /* TEMP */ + YYSYMBOL_TEMPLATE = 476, /* TEMPLATE */ + YYSYMBOL_TEMPORARY = 477, /* TEMPORARY */ + YYSYMBOL_TEXT_P = 478, /* TEXT_P */ + YYSYMBOL_THEN = 479, /* THEN */ + YYSYMBOL_TIES = 480, /* TIES */ + YYSYMBOL_TIME = 481, /* TIME */ + YYSYMBOL_TIMESTAMP = 482, /* TIMESTAMP */ + YYSYMBOL_TO = 483, /* TO */ + YYSYMBOL_TRAILING = 484, /* TRAILING */ + YYSYMBOL_TRANSACTION = 485, /* TRANSACTION */ + YYSYMBOL_TRANSFORM = 486, /* TRANSFORM */ + YYSYMBOL_TREAT = 487, /* TREAT */ + YYSYMBOL_TRIGGER = 488, /* TRIGGER */ + YYSYMBOL_TRIM = 489, /* TRIM */ + YYSYMBOL_TRUE_P = 490, /* TRUE_P */ + YYSYMBOL_TRUNCATE = 491, /* TRUNCATE */ + YYSYMBOL_TRUSTED = 492, /* TRUSTED */ + YYSYMBOL_TYPE_P = 493, /* TYPE_P */ + YYSYMBOL_TYPES_P = 494, /* TYPES_P */ + YYSYMBOL_UESCAPE = 495, /* UESCAPE */ + YYSYMBOL_UNBOUNDED = 496, /* UNBOUNDED */ + YYSYMBOL_UNCOMMITTED = 497, /* UNCOMMITTED */ + YYSYMBOL_UNENCRYPTED = 498, /* UNENCRYPTED */ + YYSYMBOL_UNION = 499, /* UNION */ + YYSYMBOL_UNIQUE = 500, /* UNIQUE */ + YYSYMBOL_UNKNOWN = 501, /* UNKNOWN */ + YYSYMBOL_UNLISTEN = 502, /* UNLISTEN */ + YYSYMBOL_UNLOGGED = 503, /* UNLOGGED */ + YYSYMBOL_UNTIL = 504, /* UNTIL */ + YYSYMBOL_UPDATE = 505, /* UPDATE */ + YYSYMBOL_USER = 506, /* USER */ + YYSYMBOL_USING = 507, /* USING */ + YYSYMBOL_VACUUM = 508, /* VACUUM */ + YYSYMBOL_VALID = 509, /* VALID */ + YYSYMBOL_VALIDATE = 510, /* VALIDATE */ + YYSYMBOL_VALIDATOR = 511, /* VALIDATOR */ + YYSYMBOL_VALUE_P = 512, /* VALUE_P */ + YYSYMBOL_VALUES = 513, /* VALUES */ + YYSYMBOL_VARCHAR = 514, /* VARCHAR */ + YYSYMBOL_VARIADIC = 515, /* VARIADIC */ + YYSYMBOL_VARYING = 516, /* VARYING */ + YYSYMBOL_VERBOSE = 517, /* VERBOSE */ + YYSYMBOL_VERSION_P = 518, /* VERSION_P */ + YYSYMBOL_VIEW = 519, /* VIEW */ + YYSYMBOL_VIEWS = 520, /* VIEWS */ + YYSYMBOL_VOLATILE = 521, /* VOLATILE */ + YYSYMBOL_WHEN = 522, /* WHEN */ + YYSYMBOL_WHERE = 523, /* WHERE */ + YYSYMBOL_WHITESPACE_P = 524, /* WHITESPACE_P */ + YYSYMBOL_WINDOW = 525, /* WINDOW */ + YYSYMBOL_WITH = 526, /* WITH */ + YYSYMBOL_WITHIN = 527, /* WITHIN */ + YYSYMBOL_WITHOUT = 528, /* WITHOUT */ + YYSYMBOL_WORK = 529, /* WORK */ + YYSYMBOL_WRAPPER = 530, /* WRAPPER */ + YYSYMBOL_WRITE = 531, /* WRITE */ + YYSYMBOL_XML_P = 532, /* XML_P */ + YYSYMBOL_XMLATTRIBUTES = 533, /* XMLATTRIBUTES */ + YYSYMBOL_XMLCONCAT = 534, /* XMLCONCAT */ + YYSYMBOL_XMLELEMENT = 535, /* XMLELEMENT */ + YYSYMBOL_XMLEXISTS = 536, /* XMLEXISTS */ + YYSYMBOL_XMLFOREST = 537, /* XMLFOREST */ + YYSYMBOL_XMLNAMESPACES = 538, /* XMLNAMESPACES */ + YYSYMBOL_XMLPARSE = 539, /* XMLPARSE */ + YYSYMBOL_XMLPI = 540, /* XMLPI */ + YYSYMBOL_XMLROOT = 541, /* XMLROOT */ + YYSYMBOL_XMLSERIALIZE = 542, /* XMLSERIALIZE */ + YYSYMBOL_XMLTABLE = 543, /* XMLTABLE */ + YYSYMBOL_YEAR_P = 544, /* YEAR_P */ + YYSYMBOL_YES_P = 545, /* YES_P */ + YYSYMBOL_ZONE = 546, /* ZONE */ + YYSYMBOL_NOT_LA = 547, /* NOT_LA */ + YYSYMBOL_NULLS_LA = 548, /* NULLS_LA */ + YYSYMBOL_WITH_LA = 549, /* WITH_LA */ + YYSYMBOL_MODE_TYPE_NAME = 550, /* MODE_TYPE_NAME */ + YYSYMBOL_MODE_PLPGSQL_EXPR = 551, /* MODE_PLPGSQL_EXPR */ + YYSYMBOL_MODE_PLPGSQL_ASSIGN1 = 552, /* MODE_PLPGSQL_ASSIGN1 */ + YYSYMBOL_MODE_PLPGSQL_ASSIGN2 = 553, /* MODE_PLPGSQL_ASSIGN2 */ + YYSYMBOL_MODE_PLPGSQL_ASSIGN3 = 554, /* MODE_PLPGSQL_ASSIGN3 */ + YYSYMBOL_555_ = 555, /* '<' */ + YYSYMBOL_556_ = 556, /* '>' */ + YYSYMBOL_557_ = 557, /* '=' */ + YYSYMBOL_558_ = 558, /* '+' */ + YYSYMBOL_559_ = 559, /* '-' */ + YYSYMBOL_560_ = 560, /* '*' */ + YYSYMBOL_561_ = 561, /* '/' */ + YYSYMBOL_562_ = 562, /* '%' */ + YYSYMBOL_563_ = 563, /* '^' */ + YYSYMBOL_UMINUS = 564, /* UMINUS */ + YYSYMBOL_565_ = 565, /* '[' */ + YYSYMBOL_566_ = 566, /* ']' */ + YYSYMBOL_567_ = 567, /* '(' */ + YYSYMBOL_568_ = 568, /* ')' */ + YYSYMBOL_569_ = 569, /* '.' */ + YYSYMBOL_570_ = 570, /* ',' */ + YYSYMBOL_571_ = 571, /* ';' */ + YYSYMBOL_572_ = 572, /* ':' */ + YYSYMBOL_573_ = 573, /* '{' */ + YYSYMBOL_574_ = 574, /* '}' */ + YYSYMBOL_YYACCEPT = 575, /* $accept */ + YYSYMBOL_prog = 576, /* prog */ + YYSYMBOL_toplevel_stmt = 577, /* toplevel_stmt */ + YYSYMBOL_stmt = 578, /* stmt */ + YYSYMBOL_CallStmt = 579, /* CallStmt */ + YYSYMBOL_CreateRoleStmt = 580, /* CreateRoleStmt */ + YYSYMBOL_opt_with = 581, /* opt_with */ + YYSYMBOL_OptRoleList = 582, /* OptRoleList */ + YYSYMBOL_AlterOptRoleList = 583, /* AlterOptRoleList */ + YYSYMBOL_AlterOptRoleElem = 584, /* AlterOptRoleElem */ + YYSYMBOL_CreateOptRoleElem = 585, /* CreateOptRoleElem */ + YYSYMBOL_CreateUserStmt = 586, /* CreateUserStmt */ + YYSYMBOL_AlterRoleStmt = 587, /* AlterRoleStmt */ + YYSYMBOL_opt_in_database = 588, /* opt_in_database */ + YYSYMBOL_AlterRoleSetStmt = 589, /* AlterRoleSetStmt */ + YYSYMBOL_DropRoleStmt = 590, /* DropRoleStmt */ + YYSYMBOL_CreateGroupStmt = 591, /* CreateGroupStmt */ + YYSYMBOL_AlterGroupStmt = 592, /* AlterGroupStmt */ + YYSYMBOL_add_drop = 593, /* add_drop */ + YYSYMBOL_CreateSchemaStmt = 594, /* CreateSchemaStmt */ + YYSYMBOL_OptSchemaName = 595, /* OptSchemaName */ + YYSYMBOL_OptSchemaEltList = 596, /* OptSchemaEltList */ + YYSYMBOL_schema_stmt = 597, /* schema_stmt */ + YYSYMBOL_VariableSetStmt = 598, /* VariableSetStmt */ + YYSYMBOL_set_rest = 599, /* set_rest */ + YYSYMBOL_generic_set = 600, /* generic_set */ + YYSYMBOL_set_rest_more = 601, /* set_rest_more */ + YYSYMBOL_var_name = 602, /* var_name */ + YYSYMBOL_var_list = 603, /* var_list */ + YYSYMBOL_var_value = 604, /* var_value */ + YYSYMBOL_iso_level = 605, /* iso_level */ + YYSYMBOL_opt_boolean_or_string = 606, /* opt_boolean_or_string */ + YYSYMBOL_zone_value = 607, /* zone_value */ + YYSYMBOL_opt_encoding = 608, /* opt_encoding */ + YYSYMBOL_NonReservedWord_or_Sconst = 609, /* NonReservedWord_or_Sconst */ + YYSYMBOL_VariableResetStmt = 610, /* VariableResetStmt */ + YYSYMBOL_reset_rest = 611, /* reset_rest */ + YYSYMBOL_generic_reset = 612, /* generic_reset */ + YYSYMBOL_SetResetClause = 613, /* SetResetClause */ + YYSYMBOL_FunctionSetResetClause = 614, /* FunctionSetResetClause */ + YYSYMBOL_VariableShowStmt = 615, /* VariableShowStmt */ + YYSYMBOL_ConstraintsSetStmt = 616, /* ConstraintsSetStmt */ + YYSYMBOL_constraints_set_list = 617, /* constraints_set_list */ + YYSYMBOL_constraints_set_mode = 618, /* constraints_set_mode */ + YYSYMBOL_CheckPointStmt = 619, /* CheckPointStmt */ + YYSYMBOL_DiscardStmt = 620, /* DiscardStmt */ + YYSYMBOL_AlterTableStmt = 621, /* AlterTableStmt */ + YYSYMBOL_alter_table_cmds = 622, /* alter_table_cmds */ + YYSYMBOL_partition_cmd = 623, /* partition_cmd */ + YYSYMBOL_index_partition_cmd = 624, /* index_partition_cmd */ + YYSYMBOL_alter_table_cmd = 625, /* alter_table_cmd */ + YYSYMBOL_alter_column_default = 626, /* alter_column_default */ + YYSYMBOL_opt_drop_behavior = 627, /* opt_drop_behavior */ + YYSYMBOL_opt_collate_clause = 628, /* opt_collate_clause */ + YYSYMBOL_alter_using = 629, /* alter_using */ + YYSYMBOL_replica_identity = 630, /* replica_identity */ + YYSYMBOL_reloptions = 631, /* reloptions */ + YYSYMBOL_opt_reloptions = 632, /* opt_reloptions */ + YYSYMBOL_reloption_list = 633, /* reloption_list */ + YYSYMBOL_reloption_elem = 634, /* reloption_elem */ + YYSYMBOL_alter_identity_column_option_list = 635, /* alter_identity_column_option_list */ + YYSYMBOL_alter_identity_column_option = 636, /* alter_identity_column_option */ + YYSYMBOL_PartitionBoundSpec = 637, /* PartitionBoundSpec */ + YYSYMBOL_hash_partbound_elem = 638, /* hash_partbound_elem */ + YYSYMBOL_hash_partbound = 639, /* hash_partbound */ + YYSYMBOL_AlterCompositeTypeStmt = 640, /* AlterCompositeTypeStmt */ + YYSYMBOL_alter_type_cmds = 641, /* alter_type_cmds */ + YYSYMBOL_alter_type_cmd = 642, /* alter_type_cmd */ + YYSYMBOL_ClosePortalStmt = 643, /* ClosePortalStmt */ + YYSYMBOL_CopyStmt = 644, /* CopyStmt */ + YYSYMBOL_copy_from = 645, /* copy_from */ + YYSYMBOL_opt_program = 646, /* opt_program */ + YYSYMBOL_copy_file_name = 647, /* copy_file_name */ + YYSYMBOL_copy_options = 648, /* copy_options */ + YYSYMBOL_copy_opt_list = 649, /* copy_opt_list */ + YYSYMBOL_copy_opt_item = 650, /* copy_opt_item */ + YYSYMBOL_opt_binary = 651, /* opt_binary */ + YYSYMBOL_copy_delimiter = 652, /* copy_delimiter */ + YYSYMBOL_opt_using = 653, /* opt_using */ + YYSYMBOL_copy_generic_opt_list = 654, /* copy_generic_opt_list */ + YYSYMBOL_copy_generic_opt_elem = 655, /* copy_generic_opt_elem */ + YYSYMBOL_copy_generic_opt_arg = 656, /* copy_generic_opt_arg */ + YYSYMBOL_copy_generic_opt_arg_list = 657, /* copy_generic_opt_arg_list */ + YYSYMBOL_copy_generic_opt_arg_list_item = 658, /* copy_generic_opt_arg_list_item */ + YYSYMBOL_CreateStmt = 659, /* CreateStmt */ + YYSYMBOL_OptTemp = 660, /* OptTemp */ + YYSYMBOL_OptTableElementList = 661, /* OptTableElementList */ + YYSYMBOL_OptTypedTableElementList = 662, /* OptTypedTableElementList */ + YYSYMBOL_TableElementList = 663, /* TableElementList */ + YYSYMBOL_TypedTableElementList = 664, /* TypedTableElementList */ + YYSYMBOL_TableElement = 665, /* TableElement */ + YYSYMBOL_TypedTableElement = 666, /* TypedTableElement */ + YYSYMBOL_columnDef = 667, /* columnDef */ + YYSYMBOL_columnOptions = 668, /* columnOptions */ + YYSYMBOL_column_compression = 669, /* column_compression */ + YYSYMBOL_opt_column_compression = 670, /* opt_column_compression */ + YYSYMBOL_ColQualList = 671, /* ColQualList */ + YYSYMBOL_ColConstraint = 672, /* ColConstraint */ + YYSYMBOL_ColConstraintElem = 673, /* ColConstraintElem */ + YYSYMBOL_generated_when = 674, /* generated_when */ + YYSYMBOL_ConstraintAttr = 675, /* ConstraintAttr */ + YYSYMBOL_TableLikeClause = 676, /* TableLikeClause */ + YYSYMBOL_TableLikeOptionList = 677, /* TableLikeOptionList */ + YYSYMBOL_TableLikeOption = 678, /* TableLikeOption */ + YYSYMBOL_TableConstraint = 679, /* TableConstraint */ + YYSYMBOL_ConstraintElem = 680, /* ConstraintElem */ + YYSYMBOL_opt_no_inherit = 681, /* opt_no_inherit */ + YYSYMBOL_opt_column_list = 682, /* opt_column_list */ + YYSYMBOL_columnList = 683, /* columnList */ + YYSYMBOL_columnElem = 684, /* columnElem */ + YYSYMBOL_opt_c_include = 685, /* opt_c_include */ + YYSYMBOL_key_match = 686, /* key_match */ + YYSYMBOL_ExclusionConstraintList = 687, /* ExclusionConstraintList */ + YYSYMBOL_ExclusionConstraintElem = 688, /* ExclusionConstraintElem */ + YYSYMBOL_OptWhereClause = 689, /* OptWhereClause */ + YYSYMBOL_key_actions = 690, /* key_actions */ + YYSYMBOL_key_update = 691, /* key_update */ + YYSYMBOL_key_delete = 692, /* key_delete */ + YYSYMBOL_key_action = 693, /* key_action */ + YYSYMBOL_OptInherit = 694, /* OptInherit */ + YYSYMBOL_OptPartitionSpec = 695, /* OptPartitionSpec */ + YYSYMBOL_PartitionSpec = 696, /* PartitionSpec */ + YYSYMBOL_part_params = 697, /* part_params */ + YYSYMBOL_part_elem = 698, /* part_elem */ + YYSYMBOL_table_access_method_clause = 699, /* table_access_method_clause */ + YYSYMBOL_OptWith = 700, /* OptWith */ + YYSYMBOL_OnCommitOption = 701, /* OnCommitOption */ + YYSYMBOL_OptTableSpace = 702, /* OptTableSpace */ + YYSYMBOL_OptConsTableSpace = 703, /* OptConsTableSpace */ + YYSYMBOL_ExistingIndex = 704, /* ExistingIndex */ + YYSYMBOL_CreateStatsStmt = 705, /* CreateStatsStmt */ + YYSYMBOL_stats_params = 706, /* stats_params */ + YYSYMBOL_stats_param = 707, /* stats_param */ + YYSYMBOL_AlterStatsStmt = 708, /* AlterStatsStmt */ + YYSYMBOL_create_as_target = 709, /* create_as_target */ + YYSYMBOL_opt_with_data = 710, /* opt_with_data */ + YYSYMBOL_CreateMatViewStmt = 711, /* CreateMatViewStmt */ + YYSYMBOL_create_mv_target = 712, /* create_mv_target */ + YYSYMBOL_OptNoLog = 713, /* OptNoLog */ + YYSYMBOL_RefreshMatViewStmt = 714, /* RefreshMatViewStmt */ + YYSYMBOL_CreateSeqStmt = 715, /* CreateSeqStmt */ + YYSYMBOL_AlterSeqStmt = 716, /* AlterSeqStmt */ + YYSYMBOL_OptSeqOptList = 717, /* OptSeqOptList */ + YYSYMBOL_OptParenthesizedSeqOptList = 718, /* OptParenthesizedSeqOptList */ + YYSYMBOL_SeqOptList = 719, /* SeqOptList */ + YYSYMBOL_SeqOptElem = 720, /* SeqOptElem */ + YYSYMBOL_opt_by = 721, /* opt_by */ + YYSYMBOL_NumericOnly = 722, /* NumericOnly */ + YYSYMBOL_NumericOnly_list = 723, /* NumericOnly_list */ + YYSYMBOL_CreatePLangStmt = 724, /* CreatePLangStmt */ + YYSYMBOL_opt_trusted = 725, /* opt_trusted */ + YYSYMBOL_handler_name = 726, /* handler_name */ + YYSYMBOL_opt_inline_handler = 727, /* opt_inline_handler */ + YYSYMBOL_validator_clause = 728, /* validator_clause */ + YYSYMBOL_opt_validator = 729, /* opt_validator */ + YYSYMBOL_opt_procedural = 730, /* opt_procedural */ + YYSYMBOL_CreateTableSpaceStmt = 731, /* CreateTableSpaceStmt */ + YYSYMBOL_OptTableSpaceOwner = 732, /* OptTableSpaceOwner */ + YYSYMBOL_DropTableSpaceStmt = 733, /* DropTableSpaceStmt */ + YYSYMBOL_CreateExtensionStmt = 734, /* CreateExtensionStmt */ + YYSYMBOL_create_extension_opt_list = 735, /* create_extension_opt_list */ + YYSYMBOL_create_extension_opt_item = 736, /* create_extension_opt_item */ + YYSYMBOL_AlterExtensionStmt = 737, /* AlterExtensionStmt */ + YYSYMBOL_alter_extension_opt_list = 738, /* alter_extension_opt_list */ + YYSYMBOL_alter_extension_opt_item = 739, /* alter_extension_opt_item */ + YYSYMBOL_AlterExtensionContentsStmt = 740, /* AlterExtensionContentsStmt */ + YYSYMBOL_CreateFdwStmt = 741, /* CreateFdwStmt */ + YYSYMBOL_fdw_option = 742, /* fdw_option */ + YYSYMBOL_fdw_options = 743, /* fdw_options */ + YYSYMBOL_opt_fdw_options = 744, /* opt_fdw_options */ + YYSYMBOL_AlterFdwStmt = 745, /* AlterFdwStmt */ + YYSYMBOL_create_generic_options = 746, /* create_generic_options */ + YYSYMBOL_generic_option_list = 747, /* generic_option_list */ + YYSYMBOL_alter_generic_options = 748, /* alter_generic_options */ + YYSYMBOL_alter_generic_option_list = 749, /* alter_generic_option_list */ + YYSYMBOL_alter_generic_option_elem = 750, /* alter_generic_option_elem */ + YYSYMBOL_generic_option_elem = 751, /* generic_option_elem */ + YYSYMBOL_generic_option_name = 752, /* generic_option_name */ + YYSYMBOL_generic_option_arg = 753, /* generic_option_arg */ + YYSYMBOL_CreateForeignServerStmt = 754, /* CreateForeignServerStmt */ + YYSYMBOL_opt_type = 755, /* opt_type */ + YYSYMBOL_foreign_server_version = 756, /* foreign_server_version */ + YYSYMBOL_opt_foreign_server_version = 757, /* opt_foreign_server_version */ + YYSYMBOL_AlterForeignServerStmt = 758, /* AlterForeignServerStmt */ + YYSYMBOL_CreateForeignTableStmt = 759, /* CreateForeignTableStmt */ + YYSYMBOL_ImportForeignSchemaStmt = 760, /* ImportForeignSchemaStmt */ + YYSYMBOL_import_qualification_type = 761, /* import_qualification_type */ + YYSYMBOL_import_qualification = 762, /* import_qualification */ + YYSYMBOL_CreateUserMappingStmt = 763, /* CreateUserMappingStmt */ + YYSYMBOL_auth_ident = 764, /* auth_ident */ + YYSYMBOL_DropUserMappingStmt = 765, /* DropUserMappingStmt */ + YYSYMBOL_AlterUserMappingStmt = 766, /* AlterUserMappingStmt */ + YYSYMBOL_CreatePolicyStmt = 767, /* CreatePolicyStmt */ + YYSYMBOL_AlterPolicyStmt = 768, /* AlterPolicyStmt */ + YYSYMBOL_RowSecurityOptionalExpr = 769, /* RowSecurityOptionalExpr */ + YYSYMBOL_RowSecurityOptionalWithCheck = 770, /* RowSecurityOptionalWithCheck */ + YYSYMBOL_RowSecurityDefaultToRole = 771, /* RowSecurityDefaultToRole */ + YYSYMBOL_RowSecurityOptionalToRole = 772, /* RowSecurityOptionalToRole */ + YYSYMBOL_RowSecurityDefaultPermissive = 773, /* RowSecurityDefaultPermissive */ + YYSYMBOL_RowSecurityDefaultForCmd = 774, /* RowSecurityDefaultForCmd */ + YYSYMBOL_row_security_cmd = 775, /* row_security_cmd */ + YYSYMBOL_CreateAmStmt = 776, /* CreateAmStmt */ + YYSYMBOL_am_type = 777, /* am_type */ + YYSYMBOL_CreateTrigStmt = 778, /* CreateTrigStmt */ + YYSYMBOL_TriggerActionTime = 779, /* TriggerActionTime */ + YYSYMBOL_TriggerEvents = 780, /* TriggerEvents */ + YYSYMBOL_TriggerOneEvent = 781, /* TriggerOneEvent */ + YYSYMBOL_TriggerReferencing = 782, /* TriggerReferencing */ + YYSYMBOL_TriggerTransitions = 783, /* TriggerTransitions */ + YYSYMBOL_TriggerTransition = 784, /* TriggerTransition */ + YYSYMBOL_TransitionOldOrNew = 785, /* TransitionOldOrNew */ + YYSYMBOL_TransitionRowOrTable = 786, /* TransitionRowOrTable */ + YYSYMBOL_TransitionRelName = 787, /* TransitionRelName */ + YYSYMBOL_TriggerForSpec = 788, /* TriggerForSpec */ + YYSYMBOL_TriggerForOptEach = 789, /* TriggerForOptEach */ + YYSYMBOL_TriggerForType = 790, /* TriggerForType */ + YYSYMBOL_TriggerWhen = 791, /* TriggerWhen */ + YYSYMBOL_FUNCTION_or_PROCEDURE = 792, /* FUNCTION_or_PROCEDURE */ + YYSYMBOL_TriggerFuncArgs = 793, /* TriggerFuncArgs */ + YYSYMBOL_TriggerFuncArg = 794, /* TriggerFuncArg */ + YYSYMBOL_OptConstrFromTable = 795, /* OptConstrFromTable */ + YYSYMBOL_ConstraintAttributeSpec = 796, /* ConstraintAttributeSpec */ + YYSYMBOL_ConstraintAttributeElem = 797, /* ConstraintAttributeElem */ + YYSYMBOL_CreateEventTrigStmt = 798, /* CreateEventTrigStmt */ + YYSYMBOL_event_trigger_when_list = 799, /* event_trigger_when_list */ + YYSYMBOL_event_trigger_when_item = 800, /* event_trigger_when_item */ + YYSYMBOL_event_trigger_value_list = 801, /* event_trigger_value_list */ + YYSYMBOL_AlterEventTrigStmt = 802, /* AlterEventTrigStmt */ + YYSYMBOL_enable_trigger = 803, /* enable_trigger */ + YYSYMBOL_CreateAssertionStmt = 804, /* CreateAssertionStmt */ + YYSYMBOL_DefineStmt = 805, /* DefineStmt */ + YYSYMBOL_definition = 806, /* definition */ + YYSYMBOL_def_list = 807, /* def_list */ + YYSYMBOL_def_elem = 808, /* def_elem */ + YYSYMBOL_def_arg = 809, /* def_arg */ + YYSYMBOL_old_aggr_definition = 810, /* old_aggr_definition */ + YYSYMBOL_old_aggr_list = 811, /* old_aggr_list */ + YYSYMBOL_old_aggr_elem = 812, /* old_aggr_elem */ + YYSYMBOL_opt_enum_val_list = 813, /* opt_enum_val_list */ + YYSYMBOL_enum_val_list = 814, /* enum_val_list */ + YYSYMBOL_AlterEnumStmt = 815, /* AlterEnumStmt */ + YYSYMBOL_opt_if_not_exists = 816, /* opt_if_not_exists */ + YYSYMBOL_CreateOpClassStmt = 817, /* CreateOpClassStmt */ + YYSYMBOL_opclass_item_list = 818, /* opclass_item_list */ + YYSYMBOL_opclass_item = 819, /* opclass_item */ + YYSYMBOL_opt_default = 820, /* opt_default */ + YYSYMBOL_opt_opfamily = 821, /* opt_opfamily */ + YYSYMBOL_opclass_purpose = 822, /* opclass_purpose */ + YYSYMBOL_opt_recheck = 823, /* opt_recheck */ + YYSYMBOL_CreateOpFamilyStmt = 824, /* CreateOpFamilyStmt */ + YYSYMBOL_AlterOpFamilyStmt = 825, /* AlterOpFamilyStmt */ + YYSYMBOL_opclass_drop_list = 826, /* opclass_drop_list */ + YYSYMBOL_opclass_drop = 827, /* opclass_drop */ + YYSYMBOL_DropOpClassStmt = 828, /* DropOpClassStmt */ + YYSYMBOL_DropOpFamilyStmt = 829, /* DropOpFamilyStmt */ + YYSYMBOL_DropOwnedStmt = 830, /* DropOwnedStmt */ + YYSYMBOL_ReassignOwnedStmt = 831, /* ReassignOwnedStmt */ + YYSYMBOL_DropStmt = 832, /* DropStmt */ + YYSYMBOL_object_type_any_name = 833, /* object_type_any_name */ + YYSYMBOL_object_type_name = 834, /* object_type_name */ + YYSYMBOL_drop_type_name = 835, /* drop_type_name */ + YYSYMBOL_object_type_name_on_any_name = 836, /* object_type_name_on_any_name */ + YYSYMBOL_any_name_list = 837, /* any_name_list */ + YYSYMBOL_any_name = 838, /* any_name */ + YYSYMBOL_attrs = 839, /* attrs */ + YYSYMBOL_type_name_list = 840, /* type_name_list */ + YYSYMBOL_TruncateStmt = 841, /* TruncateStmt */ + YYSYMBOL_opt_restart_seqs = 842, /* opt_restart_seqs */ + YYSYMBOL_CommentStmt = 843, /* CommentStmt */ + YYSYMBOL_comment_text = 844, /* comment_text */ + YYSYMBOL_SecLabelStmt = 845, /* SecLabelStmt */ + YYSYMBOL_opt_provider = 846, /* opt_provider */ + YYSYMBOL_security_label = 847, /* security_label */ + YYSYMBOL_FetchStmt = 848, /* FetchStmt */ + YYSYMBOL_fetch_args = 849, /* fetch_args */ + YYSYMBOL_from_in = 850, /* from_in */ + YYSYMBOL_opt_from_in = 851, /* opt_from_in */ + YYSYMBOL_GrantStmt = 852, /* GrantStmt */ + YYSYMBOL_RevokeStmt = 853, /* RevokeStmt */ + YYSYMBOL_privileges = 854, /* privileges */ + YYSYMBOL_privilege_list = 855, /* privilege_list */ + YYSYMBOL_privilege = 856, /* privilege */ + YYSYMBOL_privilege_target = 857, /* privilege_target */ + YYSYMBOL_grantee_list = 858, /* grantee_list */ + YYSYMBOL_grantee = 859, /* grantee */ + YYSYMBOL_opt_grant_grant_option = 860, /* opt_grant_grant_option */ + YYSYMBOL_GrantRoleStmt = 861, /* GrantRoleStmt */ + YYSYMBOL_RevokeRoleStmt = 862, /* RevokeRoleStmt */ + YYSYMBOL_opt_grant_admin_option = 863, /* opt_grant_admin_option */ + YYSYMBOL_opt_granted_by = 864, /* opt_granted_by */ + YYSYMBOL_AlterDefaultPrivilegesStmt = 865, /* AlterDefaultPrivilegesStmt */ + YYSYMBOL_DefACLOptionList = 866, /* DefACLOptionList */ + YYSYMBOL_DefACLOption = 867, /* DefACLOption */ + YYSYMBOL_DefACLAction = 868, /* DefACLAction */ + YYSYMBOL_defacl_privilege_target = 869, /* defacl_privilege_target */ + YYSYMBOL_IndexStmt = 870, /* IndexStmt */ + YYSYMBOL_opt_unique = 871, /* opt_unique */ + YYSYMBOL_opt_concurrently = 872, /* opt_concurrently */ + YYSYMBOL_opt_index_name = 873, /* opt_index_name */ + YYSYMBOL_access_method_clause = 874, /* access_method_clause */ + YYSYMBOL_index_params = 875, /* index_params */ + YYSYMBOL_index_elem_options = 876, /* index_elem_options */ + YYSYMBOL_index_elem = 877, /* index_elem */ + YYSYMBOL_opt_include = 878, /* opt_include */ + YYSYMBOL_index_including_params = 879, /* index_including_params */ + YYSYMBOL_opt_collate = 880, /* opt_collate */ + YYSYMBOL_opt_class = 881, /* opt_class */ + YYSYMBOL_opt_asc_desc = 882, /* opt_asc_desc */ + YYSYMBOL_opt_nulls_order = 883, /* opt_nulls_order */ + YYSYMBOL_CreateFunctionStmt = 884, /* CreateFunctionStmt */ + YYSYMBOL_opt_or_replace = 885, /* opt_or_replace */ + YYSYMBOL_func_args = 886, /* func_args */ + YYSYMBOL_func_args_list = 887, /* func_args_list */ + YYSYMBOL_function_with_argtypes_list = 888, /* function_with_argtypes_list */ + YYSYMBOL_function_with_argtypes = 889, /* function_with_argtypes */ + YYSYMBOL_func_args_with_defaults = 890, /* func_args_with_defaults */ + YYSYMBOL_func_args_with_defaults_list = 891, /* func_args_with_defaults_list */ + YYSYMBOL_func_arg = 892, /* func_arg */ + YYSYMBOL_arg_class = 893, /* arg_class */ + YYSYMBOL_param_name = 894, /* param_name */ + YYSYMBOL_func_return = 895, /* func_return */ + YYSYMBOL_func_type = 896, /* func_type */ + YYSYMBOL_func_arg_with_default = 897, /* func_arg_with_default */ + YYSYMBOL_aggr_arg = 898, /* aggr_arg */ + YYSYMBOL_aggr_args = 899, /* aggr_args */ + YYSYMBOL_aggr_args_list = 900, /* aggr_args_list */ + YYSYMBOL_aggregate_with_argtypes = 901, /* aggregate_with_argtypes */ + YYSYMBOL_aggregate_with_argtypes_list = 902, /* aggregate_with_argtypes_list */ + YYSYMBOL_opt_createfunc_opt_list = 903, /* opt_createfunc_opt_list */ + YYSYMBOL_createfunc_opt_list = 904, /* createfunc_opt_list */ + YYSYMBOL_common_func_opt_item = 905, /* common_func_opt_item */ + YYSYMBOL_createfunc_opt_item = 906, /* createfunc_opt_item */ + YYSYMBOL_func_as = 907, /* func_as */ + YYSYMBOL_ReturnStmt = 908, /* ReturnStmt */ + YYSYMBOL_opt_routine_body = 909, /* opt_routine_body */ + YYSYMBOL_routine_body_stmt_list = 910, /* routine_body_stmt_list */ + YYSYMBOL_routine_body_stmt = 911, /* routine_body_stmt */ + YYSYMBOL_transform_type_list = 912, /* transform_type_list */ + YYSYMBOL_opt_definition = 913, /* opt_definition */ + YYSYMBOL_table_func_column = 914, /* table_func_column */ + YYSYMBOL_table_func_column_list = 915, /* table_func_column_list */ + YYSYMBOL_AlterFunctionStmt = 916, /* AlterFunctionStmt */ + YYSYMBOL_alterfunc_opt_list = 917, /* alterfunc_opt_list */ + YYSYMBOL_opt_restrict = 918, /* opt_restrict */ + YYSYMBOL_RemoveFuncStmt = 919, /* RemoveFuncStmt */ + YYSYMBOL_RemoveAggrStmt = 920, /* RemoveAggrStmt */ + YYSYMBOL_RemoveOperStmt = 921, /* RemoveOperStmt */ + YYSYMBOL_oper_argtypes = 922, /* oper_argtypes */ + YYSYMBOL_any_operator = 923, /* any_operator */ + YYSYMBOL_operator_with_argtypes_list = 924, /* operator_with_argtypes_list */ + YYSYMBOL_operator_with_argtypes = 925, /* operator_with_argtypes */ + YYSYMBOL_DoStmt = 926, /* DoStmt */ + YYSYMBOL_dostmt_opt_list = 927, /* dostmt_opt_list */ + YYSYMBOL_dostmt_opt_item = 928, /* dostmt_opt_item */ + YYSYMBOL_CreateCastStmt = 929, /* CreateCastStmt */ + YYSYMBOL_cast_context = 930, /* cast_context */ + YYSYMBOL_DropCastStmt = 931, /* DropCastStmt */ + YYSYMBOL_opt_if_exists = 932, /* opt_if_exists */ + YYSYMBOL_CreateTransformStmt = 933, /* CreateTransformStmt */ + YYSYMBOL_transform_element_list = 934, /* transform_element_list */ + YYSYMBOL_DropTransformStmt = 935, /* DropTransformStmt */ + YYSYMBOL_ReindexStmt = 936, /* ReindexStmt */ + YYSYMBOL_reindex_target_type = 937, /* reindex_target_type */ + YYSYMBOL_reindex_target_multitable = 938, /* reindex_target_multitable */ + YYSYMBOL_AlterTblSpcStmt = 939, /* AlterTblSpcStmt */ + YYSYMBOL_RenameStmt = 940, /* RenameStmt */ + YYSYMBOL_opt_column = 941, /* opt_column */ + YYSYMBOL_opt_set_data = 942, /* opt_set_data */ + YYSYMBOL_AlterObjectDependsStmt = 943, /* AlterObjectDependsStmt */ + YYSYMBOL_opt_no = 944, /* opt_no */ + YYSYMBOL_AlterObjectSchemaStmt = 945, /* AlterObjectSchemaStmt */ + YYSYMBOL_AlterOperatorStmt = 946, /* AlterOperatorStmt */ + YYSYMBOL_operator_def_list = 947, /* operator_def_list */ + YYSYMBOL_operator_def_elem = 948, /* operator_def_elem */ + YYSYMBOL_operator_def_arg = 949, /* operator_def_arg */ + YYSYMBOL_AlterTypeStmt = 950, /* AlterTypeStmt */ + YYSYMBOL_AlterOwnerStmt = 951, /* AlterOwnerStmt */ + YYSYMBOL_CreatePublicationStmt = 952, /* CreatePublicationStmt */ + YYSYMBOL_opt_publication_for_tables = 953, /* opt_publication_for_tables */ + YYSYMBOL_publication_for_tables = 954, /* publication_for_tables */ + YYSYMBOL_AlterPublicationStmt = 955, /* AlterPublicationStmt */ + YYSYMBOL_CreateSubscriptionStmt = 956, /* CreateSubscriptionStmt */ + YYSYMBOL_AlterSubscriptionStmt = 957, /* AlterSubscriptionStmt */ + YYSYMBOL_DropSubscriptionStmt = 958, /* DropSubscriptionStmt */ + YYSYMBOL_RuleStmt = 959, /* RuleStmt */ + YYSYMBOL_RuleActionList = 960, /* RuleActionList */ + YYSYMBOL_RuleActionMulti = 961, /* RuleActionMulti */ + YYSYMBOL_RuleActionStmt = 962, /* RuleActionStmt */ + YYSYMBOL_RuleActionStmtOrEmpty = 963, /* RuleActionStmtOrEmpty */ + YYSYMBOL_event = 964, /* event */ + YYSYMBOL_opt_instead = 965, /* opt_instead */ + YYSYMBOL_NotifyStmt = 966, /* NotifyStmt */ + YYSYMBOL_notify_payload = 967, /* notify_payload */ + YYSYMBOL_ListenStmt = 968, /* ListenStmt */ + YYSYMBOL_UnlistenStmt = 969, /* UnlistenStmt */ + YYSYMBOL_TransactionStmt = 970, /* TransactionStmt */ + YYSYMBOL_TransactionStmtLegacy = 971, /* TransactionStmtLegacy */ + YYSYMBOL_opt_transaction = 972, /* opt_transaction */ + YYSYMBOL_transaction_mode_item = 973, /* transaction_mode_item */ + YYSYMBOL_transaction_mode_list = 974, /* transaction_mode_list */ + YYSYMBOL_transaction_mode_list_or_empty = 975, /* transaction_mode_list_or_empty */ + YYSYMBOL_opt_transaction_chain = 976, /* opt_transaction_chain */ + YYSYMBOL_ViewStmt = 977, /* ViewStmt */ + YYSYMBOL_opt_check_option = 978, /* opt_check_option */ + YYSYMBOL_LoadStmt = 979, /* LoadStmt */ + YYSYMBOL_CreatedbStmt = 980, /* CreatedbStmt */ + YYSYMBOL_createdb_opt_list = 981, /* createdb_opt_list */ + YYSYMBOL_createdb_opt_items = 982, /* createdb_opt_items */ + YYSYMBOL_createdb_opt_item = 983, /* createdb_opt_item */ + YYSYMBOL_createdb_opt_name = 984, /* createdb_opt_name */ + YYSYMBOL_opt_equal = 985, /* opt_equal */ + YYSYMBOL_AlterDatabaseStmt = 986, /* AlterDatabaseStmt */ + YYSYMBOL_AlterDatabaseSetStmt = 987, /* AlterDatabaseSetStmt */ + YYSYMBOL_DropdbStmt = 988, /* DropdbStmt */ + YYSYMBOL_drop_option_list = 989, /* drop_option_list */ + YYSYMBOL_drop_option = 990, /* drop_option */ + YYSYMBOL_AlterCollationStmt = 991, /* AlterCollationStmt */ + YYSYMBOL_AlterSystemStmt = 992, /* AlterSystemStmt */ + YYSYMBOL_CreateDomainStmt = 993, /* CreateDomainStmt */ + YYSYMBOL_AlterDomainStmt = 994, /* AlterDomainStmt */ + YYSYMBOL_opt_as = 995, /* opt_as */ + YYSYMBOL_AlterTSDictionaryStmt = 996, /* AlterTSDictionaryStmt */ + YYSYMBOL_AlterTSConfigurationStmt = 997, /* AlterTSConfigurationStmt */ + YYSYMBOL_any_with = 998, /* any_with */ + YYSYMBOL_CreateConversionStmt = 999, /* CreateConversionStmt */ + YYSYMBOL_ClusterStmt = 1000, /* ClusterStmt */ + YYSYMBOL_cluster_index_specification = 1001, /* cluster_index_specification */ + YYSYMBOL_VacuumStmt = 1002, /* VacuumStmt */ + YYSYMBOL_AnalyzeStmt = 1003, /* AnalyzeStmt */ + YYSYMBOL_utility_option_list = 1004, /* utility_option_list */ + YYSYMBOL_analyze_keyword = 1005, /* analyze_keyword */ + YYSYMBOL_utility_option_elem = 1006, /* utility_option_elem */ + YYSYMBOL_utility_option_name = 1007, /* utility_option_name */ + YYSYMBOL_utility_option_arg = 1008, /* utility_option_arg */ + YYSYMBOL_opt_analyze = 1009, /* opt_analyze */ + YYSYMBOL_opt_verbose = 1010, /* opt_verbose */ + YYSYMBOL_opt_full = 1011, /* opt_full */ + YYSYMBOL_opt_freeze = 1012, /* opt_freeze */ + YYSYMBOL_opt_name_list = 1013, /* opt_name_list */ + YYSYMBOL_vacuum_relation = 1014, /* vacuum_relation */ + YYSYMBOL_vacuum_relation_list = 1015, /* vacuum_relation_list */ + YYSYMBOL_opt_vacuum_relation_list = 1016, /* opt_vacuum_relation_list */ + YYSYMBOL_ExplainStmt = 1017, /* ExplainStmt */ + YYSYMBOL_ExplainableStmt = 1018, /* ExplainableStmt */ + YYSYMBOL_PrepareStmt = 1019, /* PrepareStmt */ + YYSYMBOL_prep_type_clause = 1020, /* prep_type_clause */ + YYSYMBOL_PreparableStmt = 1021, /* PreparableStmt */ + YYSYMBOL_ExecuteStmt = 1022, /* ExecuteStmt */ + YYSYMBOL_execute_param_clause = 1023, /* execute_param_clause */ + YYSYMBOL_InsertStmt = 1024, /* InsertStmt */ + YYSYMBOL_insert_target = 1025, /* insert_target */ + YYSYMBOL_insert_rest = 1026, /* insert_rest */ + YYSYMBOL_override_kind = 1027, /* override_kind */ + YYSYMBOL_insert_column_list = 1028, /* insert_column_list */ + YYSYMBOL_insert_column_item = 1029, /* insert_column_item */ + YYSYMBOL_opt_on_conflict = 1030, /* opt_on_conflict */ + YYSYMBOL_opt_conf_expr = 1031, /* opt_conf_expr */ + YYSYMBOL_returning_clause = 1032, /* returning_clause */ + YYSYMBOL_DeleteStmt = 1033, /* DeleteStmt */ + YYSYMBOL_using_clause = 1034, /* using_clause */ + YYSYMBOL_LockStmt = 1035, /* LockStmt */ + YYSYMBOL_opt_lock = 1036, /* opt_lock */ + YYSYMBOL_lock_type = 1037, /* lock_type */ + YYSYMBOL_opt_nowait = 1038, /* opt_nowait */ + YYSYMBOL_opt_nowait_or_skip = 1039, /* opt_nowait_or_skip */ + YYSYMBOL_UpdateStmt = 1040, /* UpdateStmt */ + YYSYMBOL_set_clause_list = 1041, /* set_clause_list */ + YYSYMBOL_set_clause = 1042, /* set_clause */ + YYSYMBOL_set_target = 1043, /* set_target */ + YYSYMBOL_set_target_list = 1044, /* set_target_list */ + YYSYMBOL_DeclareCursorStmt = 1045, /* DeclareCursorStmt */ + YYSYMBOL_cursor_name = 1046, /* cursor_name */ + YYSYMBOL_cursor_options = 1047, /* cursor_options */ + YYSYMBOL_opt_hold = 1048, /* opt_hold */ + YYSYMBOL_SelectStmt = 1049, /* SelectStmt */ + YYSYMBOL_select_with_parens = 1050, /* select_with_parens */ + YYSYMBOL_select_no_parens = 1051, /* select_no_parens */ + YYSYMBOL_select_clause = 1052, /* select_clause */ + YYSYMBOL_simple_select = 1053, /* simple_select */ + YYSYMBOL_with_clause = 1054, /* with_clause */ + YYSYMBOL_cte_list = 1055, /* cte_list */ + YYSYMBOL_common_table_expr = 1056, /* common_table_expr */ + YYSYMBOL_opt_materialized = 1057, /* opt_materialized */ + YYSYMBOL_opt_search_clause = 1058, /* opt_search_clause */ + YYSYMBOL_opt_cycle_clause = 1059, /* opt_cycle_clause */ + YYSYMBOL_opt_with_clause = 1060, /* opt_with_clause */ + YYSYMBOL_into_clause = 1061, /* into_clause */ + YYSYMBOL_OptTempTableName = 1062, /* OptTempTableName */ + YYSYMBOL_opt_table = 1063, /* opt_table */ + YYSYMBOL_set_quantifier = 1064, /* set_quantifier */ + YYSYMBOL_distinct_clause = 1065, /* distinct_clause */ + YYSYMBOL_opt_all_clause = 1066, /* opt_all_clause */ + YYSYMBOL_opt_sort_clause = 1067, /* opt_sort_clause */ + YYSYMBOL_sort_clause = 1068, /* sort_clause */ + YYSYMBOL_sortby_list = 1069, /* sortby_list */ + YYSYMBOL_sortby = 1070, /* sortby */ + YYSYMBOL_select_limit = 1071, /* select_limit */ + YYSYMBOL_opt_select_limit = 1072, /* opt_select_limit */ + YYSYMBOL_limit_clause = 1073, /* limit_clause */ + YYSYMBOL_offset_clause = 1074, /* offset_clause */ + YYSYMBOL_select_limit_value = 1075, /* select_limit_value */ + YYSYMBOL_select_offset_value = 1076, /* select_offset_value */ + YYSYMBOL_select_fetch_first_value = 1077, /* select_fetch_first_value */ + YYSYMBOL_I_or_F_const = 1078, /* I_or_F_const */ + YYSYMBOL_row_or_rows = 1079, /* row_or_rows */ + YYSYMBOL_first_or_next = 1080, /* first_or_next */ + YYSYMBOL_group_clause = 1081, /* group_clause */ + YYSYMBOL_group_by_list = 1082, /* group_by_list */ + YYSYMBOL_group_by_item = 1083, /* group_by_item */ + YYSYMBOL_empty_grouping_set = 1084, /* empty_grouping_set */ + YYSYMBOL_rollup_clause = 1085, /* rollup_clause */ + YYSYMBOL_cube_clause = 1086, /* cube_clause */ + YYSYMBOL_grouping_sets_clause = 1087, /* grouping_sets_clause */ + YYSYMBOL_having_clause = 1088, /* having_clause */ + YYSYMBOL_for_locking_clause = 1089, /* for_locking_clause */ + YYSYMBOL_opt_for_locking_clause = 1090, /* opt_for_locking_clause */ + YYSYMBOL_for_locking_items = 1091, /* for_locking_items */ + YYSYMBOL_for_locking_item = 1092, /* for_locking_item */ + YYSYMBOL_for_locking_strength = 1093, /* for_locking_strength */ + YYSYMBOL_locked_rels_list = 1094, /* locked_rels_list */ + YYSYMBOL_values_clause = 1095, /* values_clause */ + YYSYMBOL_from_clause = 1096, /* from_clause */ + YYSYMBOL_from_list = 1097, /* from_list */ + YYSYMBOL_table_ref = 1098, /* table_ref */ + YYSYMBOL_joined_table = 1099, /* joined_table */ + YYSYMBOL_alias_clause = 1100, /* alias_clause */ + YYSYMBOL_opt_alias_clause = 1101, /* opt_alias_clause */ + YYSYMBOL_opt_alias_clause_for_join_using = 1102, /* opt_alias_clause_for_join_using */ + YYSYMBOL_func_alias_clause = 1103, /* func_alias_clause */ + YYSYMBOL_join_type = 1104, /* join_type */ + YYSYMBOL_opt_outer = 1105, /* opt_outer */ + YYSYMBOL_join_qual = 1106, /* join_qual */ + YYSYMBOL_relation_expr = 1107, /* relation_expr */ + YYSYMBOL_relation_expr_list = 1108, /* relation_expr_list */ + YYSYMBOL_relation_expr_opt_alias = 1109, /* relation_expr_opt_alias */ + YYSYMBOL_tablesample_clause = 1110, /* tablesample_clause */ + YYSYMBOL_opt_repeatable_clause = 1111, /* opt_repeatable_clause */ + YYSYMBOL_func_table = 1112, /* func_table */ + YYSYMBOL_rowsfrom_item = 1113, /* rowsfrom_item */ + YYSYMBOL_rowsfrom_list = 1114, /* rowsfrom_list */ + YYSYMBOL_opt_col_def_list = 1115, /* opt_col_def_list */ + YYSYMBOL_opt_ordinality = 1116, /* opt_ordinality */ + YYSYMBOL_where_clause = 1117, /* where_clause */ + YYSYMBOL_where_or_current_clause = 1118, /* where_or_current_clause */ + YYSYMBOL_OptTableFuncElementList = 1119, /* OptTableFuncElementList */ + YYSYMBOL_TableFuncElementList = 1120, /* TableFuncElementList */ + YYSYMBOL_TableFuncElement = 1121, /* TableFuncElement */ + YYSYMBOL_xmltable = 1122, /* xmltable */ + YYSYMBOL_xmltable_column_list = 1123, /* xmltable_column_list */ + YYSYMBOL_xmltable_column_el = 1124, /* xmltable_column_el */ + YYSYMBOL_xmltable_column_option_list = 1125, /* xmltable_column_option_list */ + YYSYMBOL_xmltable_column_option_el = 1126, /* xmltable_column_option_el */ + YYSYMBOL_xml_namespace_list = 1127, /* xml_namespace_list */ + YYSYMBOL_xml_namespace_el = 1128, /* xml_namespace_el */ + YYSYMBOL_Typename = 1129, /* Typename */ + YYSYMBOL_opt_array_bounds = 1130, /* opt_array_bounds */ + YYSYMBOL_SimpleTypename = 1131, /* SimpleTypename */ + YYSYMBOL_ConstTypename = 1132, /* ConstTypename */ + YYSYMBOL_GenericType = 1133, /* GenericType */ + YYSYMBOL_opt_type_modifiers = 1134, /* opt_type_modifiers */ + YYSYMBOL_Numeric = 1135, /* Numeric */ + YYSYMBOL_opt_float = 1136, /* opt_float */ + YYSYMBOL_Bit = 1137, /* Bit */ + YYSYMBOL_ConstBit = 1138, /* ConstBit */ + YYSYMBOL_BitWithLength = 1139, /* BitWithLength */ + YYSYMBOL_BitWithoutLength = 1140, /* BitWithoutLength */ + YYSYMBOL_Character = 1141, /* Character */ + YYSYMBOL_ConstCharacter = 1142, /* ConstCharacter */ + YYSYMBOL_CharacterWithLength = 1143, /* CharacterWithLength */ + YYSYMBOL_CharacterWithoutLength = 1144, /* CharacterWithoutLength */ + YYSYMBOL_character = 1145, /* character */ + YYSYMBOL_opt_varying = 1146, /* opt_varying */ + YYSYMBOL_ConstDatetime = 1147, /* ConstDatetime */ + YYSYMBOL_ConstInterval = 1148, /* ConstInterval */ + YYSYMBOL_opt_timezone = 1149, /* opt_timezone */ + YYSYMBOL_opt_interval = 1150, /* opt_interval */ + YYSYMBOL_interval_second = 1151, /* interval_second */ + YYSYMBOL_a_expr = 1152, /* a_expr */ + YYSYMBOL_b_expr = 1153, /* b_expr */ + YYSYMBOL_c_expr = 1154, /* c_expr */ + YYSYMBOL_func_application = 1155, /* func_application */ + YYSYMBOL_func_expr = 1156, /* func_expr */ + YYSYMBOL_func_expr_windowless = 1157, /* func_expr_windowless */ + YYSYMBOL_func_expr_common_subexpr = 1158, /* func_expr_common_subexpr */ + YYSYMBOL_xml_root_version = 1159, /* xml_root_version */ + YYSYMBOL_opt_xml_root_standalone = 1160, /* opt_xml_root_standalone */ + YYSYMBOL_xml_attributes = 1161, /* xml_attributes */ + YYSYMBOL_xml_attribute_list = 1162, /* xml_attribute_list */ + YYSYMBOL_xml_attribute_el = 1163, /* xml_attribute_el */ + YYSYMBOL_document_or_content = 1164, /* document_or_content */ + YYSYMBOL_xml_whitespace_option = 1165, /* xml_whitespace_option */ + YYSYMBOL_xmlexists_argument = 1166, /* xmlexists_argument */ + YYSYMBOL_xml_passing_mech = 1167, /* xml_passing_mech */ + YYSYMBOL_within_group_clause = 1168, /* within_group_clause */ + YYSYMBOL_filter_clause = 1169, /* filter_clause */ + YYSYMBOL_window_clause = 1170, /* window_clause */ + YYSYMBOL_window_definition_list = 1171, /* window_definition_list */ + YYSYMBOL_window_definition = 1172, /* window_definition */ + YYSYMBOL_over_clause = 1173, /* over_clause */ + YYSYMBOL_window_specification = 1174, /* window_specification */ + YYSYMBOL_opt_existing_window_name = 1175, /* opt_existing_window_name */ + YYSYMBOL_opt_partition_clause = 1176, /* opt_partition_clause */ + YYSYMBOL_opt_frame_clause = 1177, /* opt_frame_clause */ + YYSYMBOL_frame_extent = 1178, /* frame_extent */ + YYSYMBOL_frame_bound = 1179, /* frame_bound */ + YYSYMBOL_opt_window_exclusion_clause = 1180, /* opt_window_exclusion_clause */ + YYSYMBOL_row = 1181, /* row */ + YYSYMBOL_explicit_row = 1182, /* explicit_row */ + YYSYMBOL_implicit_row = 1183, /* implicit_row */ + YYSYMBOL_sub_type = 1184, /* sub_type */ + YYSYMBOL_all_Op = 1185, /* all_Op */ + YYSYMBOL_MathOp = 1186, /* MathOp */ + YYSYMBOL_qual_Op = 1187, /* qual_Op */ + YYSYMBOL_qual_all_Op = 1188, /* qual_all_Op */ + YYSYMBOL_subquery_Op = 1189, /* subquery_Op */ + YYSYMBOL_expr_list = 1190, /* expr_list */ + YYSYMBOL_func_arg_list = 1191, /* func_arg_list */ + YYSYMBOL_func_arg_expr = 1192, /* func_arg_expr */ + YYSYMBOL_func_arg_list_opt = 1193, /* func_arg_list_opt */ + YYSYMBOL_type_list = 1194, /* type_list */ + YYSYMBOL_array_expr = 1195, /* array_expr */ + YYSYMBOL_array_expr_list = 1196, /* array_expr_list */ + YYSYMBOL_extract_list = 1197, /* extract_list */ + YYSYMBOL_extract_arg = 1198, /* extract_arg */ + YYSYMBOL_unicode_normal_form = 1199, /* unicode_normal_form */ + YYSYMBOL_overlay_list = 1200, /* overlay_list */ + YYSYMBOL_position_list = 1201, /* position_list */ + YYSYMBOL_substr_list = 1202, /* substr_list */ + YYSYMBOL_trim_list = 1203, /* trim_list */ + YYSYMBOL_in_expr = 1204, /* in_expr */ + YYSYMBOL_case_expr = 1205, /* case_expr */ + YYSYMBOL_when_clause_list = 1206, /* when_clause_list */ + YYSYMBOL_when_clause = 1207, /* when_clause */ + YYSYMBOL_case_default = 1208, /* case_default */ + YYSYMBOL_case_arg = 1209, /* case_arg */ + YYSYMBOL_columnref = 1210, /* columnref */ + YYSYMBOL_indirection_el = 1211, /* indirection_el */ + YYSYMBOL_opt_slice_bound = 1212, /* opt_slice_bound */ + YYSYMBOL_indirection = 1213, /* indirection */ + YYSYMBOL_opt_indirection = 1214, /* opt_indirection */ + YYSYMBOL_opt_asymmetric = 1215, /* opt_asymmetric */ + YYSYMBOL_opt_target_list = 1216, /* opt_target_list */ + YYSYMBOL_target_list = 1217, /* target_list */ + YYSYMBOL_target_el = 1218, /* target_el */ + YYSYMBOL_qualified_name_list = 1219, /* qualified_name_list */ + YYSYMBOL_qualified_name = 1220, /* qualified_name */ + YYSYMBOL_name_list = 1221, /* name_list */ + YYSYMBOL_name = 1222, /* name */ + YYSYMBOL_attr_name = 1223, /* attr_name */ + YYSYMBOL_file_name = 1224, /* file_name */ + YYSYMBOL_func_name = 1225, /* func_name */ + YYSYMBOL_AexprConst = 1226, /* AexprConst */ + YYSYMBOL_Iconst = 1227, /* Iconst */ + YYSYMBOL_SignedIconst = 1228, /* SignedIconst */ + YYSYMBOL_RoleId = 1229, /* RoleId */ + YYSYMBOL_RoleSpec = 1230, /* RoleSpec */ + YYSYMBOL_role_list = 1231, /* role_list */ + YYSYMBOL_NonReservedWord = 1232, /* NonReservedWord */ + YYSYMBOL_BareColLabel = 1233, /* BareColLabel */ + YYSYMBOL_unreserved_keyword = 1234, /* unreserved_keyword */ + YYSYMBOL_col_name_keyword = 1235, /* col_name_keyword */ + YYSYMBOL_type_func_name_keyword = 1236, /* type_func_name_keyword */ + YYSYMBOL_reserved_keyword = 1237, /* reserved_keyword */ + YYSYMBOL_bare_label_keyword = 1238, /* bare_label_keyword */ + YYSYMBOL_statements = 1239, /* statements */ + YYSYMBOL_statement = 1240, /* statement */ + YYSYMBOL_CreateAsStmt = 1241, /* CreateAsStmt */ + YYSYMBOL_1242_1 = 1242, /* $@1 */ + YYSYMBOL_1243_2 = 1243, /* $@2 */ + YYSYMBOL_at = 1244, /* at */ + YYSYMBOL_ECPGConnect = 1245, /* ECPGConnect */ + YYSYMBOL_connection_target = 1246, /* connection_target */ + YYSYMBOL_opt_database_name = 1247, /* opt_database_name */ + YYSYMBOL_db_prefix = 1248, /* db_prefix */ + YYSYMBOL_server = 1249, /* server */ + YYSYMBOL_opt_server = 1250, /* opt_server */ + YYSYMBOL_server_name = 1251, /* server_name */ + YYSYMBOL_opt_port = 1252, /* opt_port */ + YYSYMBOL_opt_connection_name = 1253, /* opt_connection_name */ + YYSYMBOL_opt_user = 1254, /* opt_user */ + YYSYMBOL_ora_user = 1255, /* ora_user */ + YYSYMBOL_user_name = 1256, /* user_name */ + YYSYMBOL_char_variable = 1257, /* char_variable */ + YYSYMBOL_opt_options = 1258, /* opt_options */ + YYSYMBOL_connect_options = 1259, /* connect_options */ + YYSYMBOL_opt_opt_value = 1260, /* opt_opt_value */ + YYSYMBOL_prepared_name = 1261, /* prepared_name */ + YYSYMBOL_ECPGDeclareStmt = 1262, /* ECPGDeclareStmt */ + YYSYMBOL_ECPGCursorStmt = 1263, /* ECPGCursorStmt */ + YYSYMBOL_ECPGExecuteImmediateStmt = 1264, /* ECPGExecuteImmediateStmt */ + YYSYMBOL_ECPGVarDeclaration = 1265, /* ECPGVarDeclaration */ + YYSYMBOL_single_vt_declaration = 1266, /* single_vt_declaration */ + YYSYMBOL_precision = 1267, /* precision */ + YYSYMBOL_opt_scale = 1268, /* opt_scale */ + YYSYMBOL_ecpg_interval = 1269, /* ecpg_interval */ + YYSYMBOL_ECPGDeclaration = 1270, /* ECPGDeclaration */ + YYSYMBOL_1271_3 = 1271, /* $@3 */ + YYSYMBOL_sql_startdeclare = 1272, /* sql_startdeclare */ + YYSYMBOL_sql_enddeclare = 1273, /* sql_enddeclare */ + YYSYMBOL_var_type_declarations = 1274, /* var_type_declarations */ + YYSYMBOL_vt_declarations = 1275, /* vt_declarations */ + YYSYMBOL_variable_declarations = 1276, /* variable_declarations */ + YYSYMBOL_type_declaration = 1277, /* type_declaration */ + YYSYMBOL_1278_4 = 1278, /* $@4 */ + YYSYMBOL_var_declaration = 1279, /* var_declaration */ + YYSYMBOL_1280_5 = 1280, /* $@5 */ + YYSYMBOL_1281_6 = 1281, /* $@6 */ + YYSYMBOL_opt_bit_field = 1282, /* opt_bit_field */ + YYSYMBOL_storage_declaration = 1283, /* storage_declaration */ + YYSYMBOL_storage_clause = 1284, /* storage_clause */ + YYSYMBOL_storage_modifier = 1285, /* storage_modifier */ + YYSYMBOL_var_type = 1286, /* var_type */ + YYSYMBOL_enum_type = 1287, /* enum_type */ + YYSYMBOL_enum_definition = 1288, /* enum_definition */ + YYSYMBOL_struct_union_type_with_symbol = 1289, /* struct_union_type_with_symbol */ + YYSYMBOL_1290_7 = 1290, /* $@7 */ + YYSYMBOL_struct_union_type = 1291, /* struct_union_type */ + YYSYMBOL_1292_8 = 1292, /* $@8 */ + YYSYMBOL_s_struct_union_symbol = 1293, /* s_struct_union_symbol */ + YYSYMBOL_s_struct_union = 1294, /* s_struct_union */ + YYSYMBOL_simple_type = 1295, /* simple_type */ + YYSYMBOL_unsigned_type = 1296, /* unsigned_type */ + YYSYMBOL_signed_type = 1297, /* signed_type */ + YYSYMBOL_opt_signed = 1298, /* opt_signed */ + YYSYMBOL_variable_list = 1299, /* variable_list */ + YYSYMBOL_variable = 1300, /* variable */ + YYSYMBOL_opt_initializer = 1301, /* opt_initializer */ + YYSYMBOL_opt_pointer = 1302, /* opt_pointer */ + YYSYMBOL_ECPGDeclare = 1303, /* ECPGDeclare */ + YYSYMBOL_ECPGDisconnect = 1304, /* ECPGDisconnect */ + YYSYMBOL_dis_name = 1305, /* dis_name */ + YYSYMBOL_connection_object = 1306, /* connection_object */ + YYSYMBOL_execstring = 1307, /* execstring */ + YYSYMBOL_ECPGFree = 1308, /* ECPGFree */ + YYSYMBOL_ECPGOpen = 1309, /* ECPGOpen */ + YYSYMBOL_opt_ecpg_using = 1310, /* opt_ecpg_using */ + YYSYMBOL_ecpg_using = 1311, /* ecpg_using */ + YYSYMBOL_using_descriptor = 1312, /* using_descriptor */ + YYSYMBOL_into_descriptor = 1313, /* into_descriptor */ + YYSYMBOL_into_sqlda = 1314, /* into_sqlda */ + YYSYMBOL_using_list = 1315, /* using_list */ + YYSYMBOL_UsingValue = 1316, /* UsingValue */ + YYSYMBOL_UsingConst = 1317, /* UsingConst */ + YYSYMBOL_ECPGDescribe = 1318, /* ECPGDescribe */ + YYSYMBOL_opt_output = 1319, /* opt_output */ + YYSYMBOL_ECPGAllocateDescr = 1320, /* ECPGAllocateDescr */ + YYSYMBOL_ECPGDeallocateDescr = 1321, /* ECPGDeallocateDescr */ + YYSYMBOL_ECPGGetDescriptorHeader = 1322, /* ECPGGetDescriptorHeader */ + YYSYMBOL_ECPGGetDescHeaderItems = 1323, /* ECPGGetDescHeaderItems */ + YYSYMBOL_ECPGGetDescHeaderItem = 1324, /* ECPGGetDescHeaderItem */ + YYSYMBOL_ECPGSetDescriptorHeader = 1325, /* ECPGSetDescriptorHeader */ + YYSYMBOL_ECPGSetDescHeaderItems = 1326, /* ECPGSetDescHeaderItems */ + YYSYMBOL_ECPGSetDescHeaderItem = 1327, /* ECPGSetDescHeaderItem */ + YYSYMBOL_IntConstVar = 1328, /* IntConstVar */ + YYSYMBOL_desc_header_item = 1329, /* desc_header_item */ + YYSYMBOL_ECPGGetDescriptor = 1330, /* ECPGGetDescriptor */ + YYSYMBOL_ECPGGetDescItems = 1331, /* ECPGGetDescItems */ + YYSYMBOL_ECPGGetDescItem = 1332, /* ECPGGetDescItem */ + YYSYMBOL_ECPGSetDescriptor = 1333, /* ECPGSetDescriptor */ + YYSYMBOL_ECPGSetDescItems = 1334, /* ECPGSetDescItems */ + YYSYMBOL_ECPGSetDescItem = 1335, /* ECPGSetDescItem */ + YYSYMBOL_AllConstVar = 1336, /* AllConstVar */ + YYSYMBOL_descriptor_item = 1337, /* descriptor_item */ + YYSYMBOL_ECPGSetAutocommit = 1338, /* ECPGSetAutocommit */ + YYSYMBOL_on_off = 1339, /* on_off */ + YYSYMBOL_ECPGSetConnection = 1340, /* ECPGSetConnection */ + YYSYMBOL_ECPGTypedef = 1341, /* ECPGTypedef */ + YYSYMBOL_1342_9 = 1342, /* $@9 */ + YYSYMBOL_opt_reference = 1343, /* opt_reference */ + YYSYMBOL_ECPGVar = 1344, /* ECPGVar */ + YYSYMBOL_1345_10 = 1345, /* $@10 */ + YYSYMBOL_ECPGWhenever = 1346, /* ECPGWhenever */ + YYSYMBOL_action = 1347, /* action */ + YYSYMBOL_ECPGKeywords = 1348, /* ECPGKeywords */ + YYSYMBOL_ECPGKeywords_vanames = 1349, /* ECPGKeywords_vanames */ + YYSYMBOL_ECPGKeywords_rest = 1350, /* ECPGKeywords_rest */ + YYSYMBOL_ECPGTypeName = 1351, /* ECPGTypeName */ + YYSYMBOL_symbol = 1352, /* symbol */ + YYSYMBOL_ECPGColId = 1353, /* ECPGColId */ + YYSYMBOL_ColId = 1354, /* ColId */ + YYSYMBOL_type_function_name = 1355, /* type_function_name */ + YYSYMBOL_ColLabel = 1356, /* ColLabel */ + YYSYMBOL_ECPGColLabel = 1357, /* ECPGColLabel */ + YYSYMBOL_ECPGColLabelCommon = 1358, /* ECPGColLabelCommon */ + YYSYMBOL_ECPGCKeywords = 1359, /* ECPGCKeywords */ + YYSYMBOL_all_unreserved_keyword = 1360, /* all_unreserved_keyword */ + YYSYMBOL_ECPGunreserved_interval = 1361, /* ECPGunreserved_interval */ + YYSYMBOL_into_list = 1362, /* into_list */ + YYSYMBOL_ecpgstart = 1363, /* ecpgstart */ + YYSYMBOL_c_args = 1364, /* c_args */ + YYSYMBOL_coutputvariable = 1365, /* coutputvariable */ + YYSYMBOL_civarind = 1366, /* civarind */ + YYSYMBOL_char_civar = 1367, /* char_civar */ + YYSYMBOL_civar = 1368, /* civar */ + YYSYMBOL_indicator = 1369, /* indicator */ + YYSYMBOL_cvariable = 1370, /* cvariable */ + YYSYMBOL_ecpg_param = 1371, /* ecpg_param */ + YYSYMBOL_ecpg_bconst = 1372, /* ecpg_bconst */ + YYSYMBOL_ecpg_fconst = 1373, /* ecpg_fconst */ + YYSYMBOL_ecpg_sconst = 1374, /* ecpg_sconst */ + YYSYMBOL_ecpg_xconst = 1375, /* ecpg_xconst */ + YYSYMBOL_ecpg_ident = 1376, /* ecpg_ident */ + YYSYMBOL_quoted_ident_stringvar = 1377, /* quoted_ident_stringvar */ + YYSYMBOL_c_stuff_item = 1378, /* c_stuff_item */ + YYSYMBOL_c_stuff = 1379, /* c_stuff */ + YYSYMBOL_c_list = 1380, /* c_list */ + YYSYMBOL_c_term = 1381, /* c_term */ + YYSYMBOL_c_thing = 1382, /* c_thing */ + YYSYMBOL_c_anything = 1383, /* c_anything */ + YYSYMBOL_DeallocateStmt = 1384, /* DeallocateStmt */ + YYSYMBOL_Iresult = 1385, /* Iresult */ + YYSYMBOL_execute_rest = 1386, /* execute_rest */ + YYSYMBOL_ecpg_into = 1387, /* ecpg_into */ + YYSYMBOL_opt_ecpg_into = 1388, /* opt_ecpg_into */ + YYSYMBOL_ecpg_fetch_into = 1389, /* ecpg_fetch_into */ + YYSYMBOL_opt_ecpg_fetch_into = 1390 /* opt_ecpg_fetch_into */ +}; +typedef enum yysymbol_kind_t yysymbol_kind_t; + + + + +#ifdef short +# undef short +#endif + +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif +#endif + +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +/* Work around bug in HP-UX 11.23, which defines these macros + incorrectly for preprocessor constants. This workaround can likely + be removed in 2023, as HPE has promised support for HP-UX 11.23 + (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of + . */ +#ifdef __hpux +# undef UINT_LEAST8_MAX +# undef UINT_LEAST16_MAX +# define UINT_LEAST8_MAX 255 +# define UINT_LEAST16_MAX 65535 +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; +#else +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned +# endif +#endif + +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + + +/* Stored state numbers (used for stacks). */ +typedef yytype_int16 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + + +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define YY_ATTRIBUTE_PURE +# endif +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YY_USE(E) ((void) (E)) +#else +# define YY_USE(E) /* empty */ +#endif + +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) + +#if !defined yyoverflow + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* !defined yyoverflow */ + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ + && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yy_state_t yyss_alloc; + YYSTYPE yyvs_alloc; + YYLTYPE yyls_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \ + + YYSIZEOF (YYLTYPE)) \ + + 2 * YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYPTRDIFF_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYPTRDIFF_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 3 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 148161 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 575 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 816 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 3620 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 6609 + +/* YYMAXUTOK -- Last valid token kind. */ +#define YYMAXUTOK 810 + + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex. */ +static const yytype_int16 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 562, 2, 2, + 567, 568, 560, 558, 570, 559, 569, 561, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 572, 571, + 555, 557, 556, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 565, 2, 566, 563, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 573, 2, 574, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 564 +}; + +#if YYDEBUG + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_int16 yyrline[] = +{ + 0, 1659, 1659, 1662, 1666, 1676, 1678, 1680, 1682, 1684, + 1686, 1688, 1690, 1692, 1694, 1696, 1698, 1700, 1702, 1704, + 1706, 1708, 1710, 1712, 1714, 1716, 1718, 1720, 1722, 1724, + 1726, 1728, 1730, 1732, 1734, 1736, 1738, 1740, 1742, 1744, + 1746, 1764, 1766, 1768, 1770, 1772, 1774, 1776, 1778, 1780, + 1782, 1784, 1786, 1788, 1790, 1792, 1794, 1796, 1798, 1800, + 1802, 1804, 1806, 1808, 1810, 1812, 1814, 1816, 1818, 1820, + 1822, 1824, 1826, 1828, 1830, 1832, 1834, 1836, 1840, 1842, + 1844, 1846, 1848, 1850, 1852, 1854, 1856, 1858, 1860, 1862, + 1864, 1866, 1868, 1870, 1872, 1896, 1898, 1900, 1902, 1904, + 1906, 1908, 1910, 1912, 1914, 1916, 1918, 1920, 1948, 1950, + 1952, 1954, 1956, 1958, 1960, 1962, 1964, 1966, 1968, 1970, + 1976, 1978, 1980, 1982, 1984, 1986, 1988, 1990, 1992, 1998, + 2008, 2012, 2016, 2022, 2026, 2038, 2048, 2049, 2063, 2070, + 2076, 2087, 2093, 2102, 2109, 2115, 2124, 2131, 2139, 2144, + 2152, 2160, 2164, 2169, 2175, 2180, 2186, 2191, 2197, 2201, + 2205, 2209, 2214, 2218, 2222, 2226, 2230, 2238, 2242, 2246, + 2250, 2254, 2258, 2266, 2274, 2278, 2287, 2289, 2297, 2301, + 2305, 2309, 2317, 2321, 2325, 2329, 2333, 2337, 2345, 2353, + 2361, 2365, 2373, 2377, 2381, 2386, 2395, 2400, 2406, 2411, + 2417, 2421, 2425, 2429, 2433, 2437, 2445, 2449, 2453, 2461, + 2465, 2469, 2477, 2481, 2485, 2489, 2497, 2501, 2505, 2509, + 2514, 2518, 2522, 2526, 2530, 2534, 2538, 2546, 2550, 2558, + 2562, 2570, 2574, 2588, 2592, 2596, 2600, 2608, 2612, 2616, + 2620, 2628, 2632, 2636, 2640, 2644, 2648, 2652, 2660, 2664, + 2669, 2675, 2679, 2687, 2695, 2699, 2703, 2707, 2715, 2719, + 2727, 2731, 2739, 2743, 2751, 2755, 2759, 2763, 2767, 2776, + 2784, 2788, 2796, 2800, 2808, 2816, 2820, 2824, 2828, 2832, + 2840, 2844, 2848, 2852, 2856, 2860, 2864, 2868, 2872, 2876, + 2880, 2884, 2888, 2892, 2896, 2900, 2904, 2908, 2912, 2916, + 2920, 2928, 2932, 2940, 2944, 2948, 2956, 2964, 2968, 2972, + 2976, 2980, 2984, 2988, 2992, 2996, 3000, 3004, 3008, 3012, + 3016, 3020, 3024, 3028, 3032, 3036, 3040, 3044, 3048, 3052, + 3056, 3060, 3064, 3068, 3072, 3076, 3080, 3084, 3088, 3092, + 3096, 3100, 3104, 3108, 3112, 3116, 3120, 3124, 3128, 3132, + 3136, 3140, 3144, 3148, 3152, 3156, 3160, 3164, 3168, 3172, + 3176, 3180, 3184, 3188, 3192, 3196, 3204, 3208, 3216, 3220, + 3225, 3231, 3236, 3242, 3247, 3253, 3257, 3261, 3265, 3273, + 3281, 3286, 3292, 3296, 3304, 3308, 3312, 3316, 3324, 3328, + 3336, 3340, 3344, 3348, 3356, 3360, 3364, 3368, 3376, 3384, + 3388, 3396, 3404, 3408, 3416, 3420, 3424, 3428, 3436, 3452, + 3460, 3468, 3476, 3480, 3488, 3493, 3499, 3503, 3507, 3515, + 3519, 3527, 3532, 3538, 3542, 3546, 3550, 3554, 3558, 3562, + 3566, 3570, 3574, 3578, 3582, 3586, 3594, 3599, 3605, 3610, + 3616, 3621, 3627, 3631, 3639, 3647, 3651, 3655, 3659, 3664, + 3670, 3674, 3682, 3690, 3694, 3698, 3702, 3706, 3710, 3718, + 3722, 3726, 3730, 3734, 3738, 3742, 3747, 3753, 3758, 3764, + 3769, 3775, 3779, 3787, 3791, 3799, 3803, 3807, 3815, 3819, + 3827, 3835, 3839, 3847, 3851, 3859, 3864, 3870, 3875, 3881, + 3885, 3889, 3893, 3901, 3905, 3909, 3913, 3917, 3921, 3925, + 3929, 3933, 3941, 3945, 3953, 3957, 3961, 3965, 3973, 3981, + 3985, 3990, 3996, 4000, 4004, 4008, 4012, 4016, 4020, 4024, + 4028, 4032, 4040, 4044, 4052, 4056, 4060, 4064, 4068, 4072, + 4076, 4084, 4089, 4095, 4100, 4106, 4110, 4118, 4126, 4131, + 4137, 4141, 4146, 4151, 4157, 4161, 4169, 4173, 4181, 4186, + 4192, 4196, 4200, 4204, 4209, 4215, 4223, 4231, 4235, 4239, + 4243, 4247, 4255, 4260, 4266, 4271, 4277, 4285, 4289, 4297, + 4301, 4305, 4313, 4318, 4324, 4328, 4333, 4339, 4343, 4347, + 4352, 4358, 4363, 4369, 4374, 4380, 4388, 4392, 4400, 4404, + 4412, 4416, 4420, 4428, 4432, 4440, 4448, 4452, 4457, 4463, + 4467, 4475, 4483, 4488, 4494, 4502, 4506, 4514, 4518, 4526, + 4531, 4537, 4542, 4548, 4552, 4560, 4564, 4568, 4572, 4576, + 4580, 4584, 4588, 4592, 4596, 4600, 4604, 4608, 4612, 4620, + 4625, 4631, 4635, 4639, 4643, 4651, 4655, 4663, 4667, 4675, + 4680, 4686, 4690, 4698, 4703, 4709, 4713, 4721, 4726, 4732, + 4737, 4743, 4751, 4756, 4762, 4766, 4774, 4778, 4786, 4791, + 4797, 4801, 4805, 4810, 4818, 4826, 4831, 4837, 4845, 4849, + 4853, 4857, 4861, 4865, 4869, 4873, 4877, 4881, 4885, 4889, + 4893, 4901, 4909, 4913, 4917, 4921, 4929, 4933, 4941, 4946, + 4952, 4956, 4964, 4969, 4975, 4979, 4987, 4995, 4999, 5007, + 5011, 5015, 5019, 5027, 5035, 5043, 5051, 5055, 5063, 5068, + 5074, 5078, 5086, 5091, 5097, 5101, 5105, 5113, 5117, 5121, + 5125, 5133, 5141, 5145, 5153, 5158, 5164, 5168, 5176, 5180, + 5188, 5192, 5200, 5208, 5216, 5224, 5229, 5235, 5240, 5246, + 5251, 5257, 5262, 5268, 5273, 5279, 5284, 5290, 5294, 5298, + 5302, 5306, 5314, 5322, 5326, 5334, 5338, 5347, 5351, 5355, + 5363, 5367, 5375, 5379, 5383, 5387, 5391, 5399, 5404, 5410, + 5414, 5422, 5430, 5434, 5442, 5446, 5454, 5462, 5467, 5473, + 5478, 5484, 5488, 5496, 5501, 5507, 5511, 5519, 5523, 5528, + 5534, 5538, 5542, 5546, 5554, 5559, 5566, 5568, 5576, 5580, + 5584, 5588, 5592, 5596, 5604, 5608, 5616, 5620, 5628, 5636, + 5640, 5648, 5656, 5660, 5664, 5668, 5676, 5685, 5689, 5693, + 5697, 5701, 5705, 5709, 5713, 5717, 5721, 5725, 5729, 5733, + 5737, 5741, 5745, 5753, 5761, 5765, 5773, 5777, 5785, 5789, + 5793, 5797, 5801, 5805, 5813, 5821, 5825, 5833, 5841, 5846, + 5852, 5856, 5864, 5868, 5872, 5876, 5884, 5889, 5895, 5903, + 5907, 5915, 5919, 5923, 5927, 5931, 5939, 5944, 5950, 5955, + 5961, 5965, 5970, 5976, 5982, 5988, 5996, 6000, 6008, 6012, + 6020, 6024, 6032, 6036, 6044, 6048, 6056, 6064, 6072, 6076, + 6080, 6084, 6088, 6092, 6096, 6100, 6104, 6108, 6112, 6116, + 6124, 6128, 6132, 6136, 6140, 6144, 6148, 6152, 6156, 6160, + 6164, 6168, 6172, 6180, 6184, 6188, 6192, 6196, 6204, 6208, + 6212, 6216, 6220, 6224, 6228, 6232, 6240, 6244, 6248, 6256, + 6260, 6268, 6272, 6280, 6284, 6292, 6296, 6304, 6312, 6316, + 6321, 6327, 6331, 6335, 6339, 6343, 6347, 6351, 6355, 6359, + 6363, 6367, 6371, 6375, 6379, 6383, 6387, 6391, 6395, 6403, + 6407, 6415, 6419, 6423, 6427, 6431, 6435, 6439, 6443, 6447, + 6451, 6459, 6464, 6470, 6474, 6482, 6486, 6490, 6494, 6503, + 6512, 6521, 6530, 6539, 6548, 6557, 6570, 6584, 6598, 6612, + 6626, 6640, 6654, 6673, 6692, 6711, 6725, 6744, 6758, 6777, + 6795, 6799, 6807, 6812, 6818, 6826, 6830, 6838, 6842, 6846, + 6850, 6854, 6862, 6866, 6874, 6878, 6882, 6886, 6894, 6898, + 6902, 6906, 6910, 6914, 6918, 6922, 6926, 6930, 6934, 6938, + 6942, 6946, 6950, 6954, 6958, 6962, 6966, 6970, 6978, 6982, + 6990, 6994, 7002, 7007, 7013, 7021, 7025, 7033, 7038, 7044, + 7049, 7055, 7063, 7068, 7074, 7078, 7082, 7090, 7094, 7098, + 7106, 7110, 7114, 7118, 7122, 7126, 7134, 7138, 7146, 7151, + 7157, 7162, 7168, 7173, 7179, 7184, 7190, 7194, 7202, 7206, + 7214, 7218, 7222, 7230, 7235, 7241, 7245, 7253, 7258, 7264, + 7269, 7275, 7279, 7284, 7290, 7294, 7299, 7305, 7309, 7313, + 7317, 7325, 7330, 7336, 7340, 7348, 7352, 7360, 7364, 7372, + 7376, 7380, 7384, 7392, 7396, 7404, 7408, 7416, 7420, 7424, + 7428, 7432, 7440, 7444, 7448, 7452, 7456, 7464, 7472, 7480, + 7484, 7488, 7496, 7500, 7504, 7512, 7521, 7525, 7529, 7533, + 7541, 7545, 7553, 7561, 7565, 7573, 7578, 7584, 7588, 7596, + 7600, 7604, 7608, 7612, 7616, 7620, 7624, 7628, 7632, 7636, + 7640, 7644, 7648, 7652, 7656, 7660, 7668, 7672, 7676, 7680, + 7684, 7692, 7696, 7704, 7712, 7716, 7721, 7727, 7732, 7738, + 7742, 7750, 7754, 7762, 7767, 7773, 7781, 7785, 7793, 7797, + 7801, 7809, 7813, 7821, 7826, 7832, 7836, 7840, 7844, 7848, + 7852, 7860, 7864, 7872, 7876, 7884, 7888, 7892, 7896, 7904, + 7908, 7916, 7920, 7928, 7936, 7944, 7948, 7956, 7960, 7968, + 7972, 7976, 7984, 7988, 7993, 7999, 8007, 8012, 8018, 8026, + 8030, 8034, 8038, 8046, 8054, 8058, 8062, 8066, 8074, 8078, + 8086, 8090, 8094, 8102, 8106, 8114, 8118, 8122, 8126, 8130, + 8134, 8138, 8142, 8146, 8150, 8154, 8158, 8162, 8166, 8170, + 8174, 8178, 8182, 8186, 8190, 8194, 8198, 8202, 8206, 8210, + 8214, 8218, 8222, 8226, 8230, 8234, 8238, 8242, 8246, 8250, + 8254, 8258, 8262, 8266, 8270, 8274, 8278, 8282, 8286, 8290, + 8294, 8298, 8302, 8306, 8310, 8314, 8318, 8322, 8326, 8330, + 8338, 8343, 8349, 8354, 8360, 8364, 8368, 8372, 8376, 8380, + 8388, 8393, 8399, 8403, 8407, 8411, 8415, 8419, 8423, 8427, + 8431, 8435, 8439, 8443, 8447, 8451, 8455, 8459, 8463, 8467, + 8471, 8475, 8479, 8483, 8487, 8491, 8495, 8499, 8503, 8511, + 8519, 8523, 8531, 8535, 8543, 8547, 8551, 8555, 8559, 8567, + 8575, 8579, 8583, 8587, 8591, 8595, 8599, 8603, 8607, 8611, + 8615, 8619, 8623, 8627, 8631, 8635, 8639, 8643, 8647, 8651, + 8655, 8659, 8663, 8667, 8675, 8683, 8688, 8694, 8698, 8706, + 8710, 8714, 8718, 8726, 8734, 8738, 8742, 8746, 8750, 8754, + 8758, 8762, 8770, 8774, 8782, 8790, 8794, 8798, 8806, 8810, + 8818, 8822, 8826, 8830, 8834, 8842, 8847, 8853, 8857, 8861, + 8865, 8873, 8877, 8882, 8888, 8896, 8901, 8907, 8915, 8919, + 8927, 8931, 8935, 8939, 8943, 8947, 8951, 8955, 8959, 8963, + 8967, 8971, 8979, 8983, 8991, 8995, 9000, 9006, 9010, 9014, + 9018, 9022, 9030, 9034, 9038, 9046, 9051, 9057, 9061, 9066, + 9072, 9076, 9080, 9085, 9094, 9098, 9102, 9107, 9113, 9121, + 9129, 9134, 9140, 9144, 9152, 9156, 9160, 9168, 9172, 9176, + 9180, 9184, 9188, 9192, 9200, 9205, 9211, 9215, 9219, 9227, + 9235, 9239, 9243, 9247, 9255, 9259, 9267, 9275, 9283, 9287, + 9295, 9303, 9307, 9311, 9315, 9319, 9323, 9327, 9335, 9340, + 9346, 9354, 9358, 9362, 9366, 9370, 9374, 9382, 9386, 9394, + 9402, 9406, 9410, 9414, 9422, 9427, 9433, 9437, 9445, 9449, + 9457, 9461, 9469, 9473, 9481, 9489, 9493, 9501, 9505, 9510, + 9516, 9521, 9527, 9532, 9538, 9543, 9549, 9554, 9560, 9565, + 9571, 9579, 9583, 9591, 9596, 9602, 9606, 9610, 9614, 9622, + 9626, 9630, 9634, 9638, 9642, 9646, 9650, 9654, 9662, 9668, + 9678, 9683, 9689, 9693, 9697, 9701, 9709, 9714, 9718, 9726, + 9731, 9737, 9745, 9749, 9757, 9761, 9765, 9769, 9773, 9781, + 9785, 9793, 9797, 9805, 9813, 9817, 9822, 9828, 9832, 9837, + 9843, 9848, 9854, 9862, 9867, 9873, 9881, 9886, 9892, 9896, + 9900, 9904, 9908, 9912, 9916, 9920, 9928, 9933, 9939, 9943, + 9948, 9954, 9962, 9966, 9974, 9978, 9986, 9994, 9998, 10006, + 10057, 10061, 10074, 10076, 10080, 10084, 10088, 10092, 10101, 10107, + 10111, 10119, 10123, 10131, 10135, 10143, 10147, 10151, 10155, 10159, + 10163, 10167, 10171, 10179, 10183, 10191, 10195, 10199, 10203, 10207, + 10211, 10215, 10223, 10227, 10231, 10239, 10243, 10251, 10259, 10263, + 10268, 10274, 10278, 10283, 10289, 10293, 10298, 10304, 10309, 10315, + 10320, 10322, 10328, 10332, 10336, 10340, 10344, 10348, 10352, 10356, + 10360, 10368, 10373, 10379, 10383, 10388, 10394, 10398, 10406, 10411, + 10417, 10422, 10428, 10436, 10440, 10448, 10452, 10460, 10464, 10468, + 10472, 10480, 10485, 10491, 10495, 10500, 10504, 10508, 10512, 10520, + 10524, 10532, 10536, 10544, 10552, 10556, 10560, 10568, 10572, 10580, + 10584, 10592, 10596, 10604, 10609, 10615, 10619, 10627, 10631, 10635, + 10639, 10643, 10651, 10659, 10667, 10675, 10683, 10688, 10694, 10698, + 10706, 10711, 10717, 10721, 10729, 10737, 10741, 10745, 10749, 10757, + 10762, 10768, 10772, 10780, 10785, 10791, 10795, 10803, 10807, 10811, + 10815, 10819, 10823, 10827, 10834, 10841, 10845, 10853, 10857, 10861, + 10865, 10869, 10873, 10881, 10885, 10889, 10893, 10901, 10906, 10912, + 10917, 10923, 10927, 10931, 10935, 10940, 10946, 10950, 10954, 10958, + 10966, 10971, 10977, 10981, 10989, 10993, 10997, 11001, 11009, 11013, + 11021, 11025, 11029, 11037, 11045, 11050, 11056, 11060, 11068, 11076, + 11080, 11088, 11093, 11099, 11104, 11110, 11115, 11121, 11125, 11131, + 11137, 11142, 11148, 11152, 11160, 11168, 11172, 11180, 11184, 11192, + 11196, 11200, 11208, 11212, 11220, 11224, 11228, 11232, 11240, 11244, + 11252, 11256, 11264, 11266, 11268, 11272, 11276, 11280, 11288, 11298, + 11309, 11318, 11322, 11326, 11330, 11334, 11338, 11342, 11350, 11354, + 11358, 11362, 11370, 11374, 11382, 11387, 11393, 11397, 11401, 11405, + 11409, 11413, 11417, 11421, 11425, 11429, 11433, 11441, 11446, 11452, + 11456, 11464, 11468, 11476, 11484, 11492, 11496, 11504, 11508, 11516, + 11524, 11532, 11536, 11540, 11544, 11548, 11552, 11560, 11565, 11571, + 11575, 11579, 11583, 11591, 11599, 11603, 11608, 11614, 11618, 11622, + 11626, 11630, 11634, 11638, 11642, 11646, 11650, 11654, 11658, 11662, + 11667, 11673, 11677, 11685, 11689, 11693, 11697, 11701, 11705, 11709, + 11713, 11717, 11721, 11725, 11729, 11733, 11737, 11741, 11745, 11749, + 11753, 11757, 11761, 11765, 11769, 11773, 11777, 11781, 11785, 11789, + 11793, 11797, 11801, 11805, 11809, 11813, 11817, 11821, 11825, 11829, + 11833, 11837, 11841, 11845, 11849, 11853, 11857, 11861, 11865, 11869, + 11873, 11877, 11881, 11885, 11889, 11893, 11897, 11901, 11905, 11909, + 11913, 11918, 11922, 11926, 11930, 11934, 11938, 11942, 11950, 11954, + 11958, 11962, 11966, 11970, 11974, 11978, 11982, 11986, 11990, 11994, + 11998, 12002, 12006, 12010, 12014, 12018, 12022, 12026, 12030, 12034, + 12042, 12046, 12050, 12054, 12058, 12062, 12066, 12070, 12074, 12078, + 12082, 12086, 12090, 12094, 12102, 12106, 12110, 12114, 12118, 12122, + 12126, 12134, 12138, 12146, 12150, 12158, 12162, 12166, 12170, 12174, + 12178, 12182, 12186, 12190, 12194, 12198, 12202, 12206, 12210, 12214, + 12218, 12222, 12226, 12230, 12234, 12238, 12242, 12246, 12250, 12254, + 12258, 12262, 12266, 12270, 12274, 12278, 12282, 12286, 12290, 12294, + 12298, 12302, 12306, 12310, 12314, 12318, 12322, 12326, 12330, 12334, + 12338, 12346, 12350, 12358, 12362, 12366, 12371, 12377, 12385, 12389, + 12397, 12401, 12409, 12413, 12421, 12425, 12430, 12436, 12440, 12444, + 12448, 12456, 12460, 12468, 12473, 12479, 12484, 12490, 12495, 12501, + 12505, 12513, 12521, 12525, 12530, 12536, 12544, 12548, 12555, 12560, + 12566, 12570, 12574, 12579, 12585, 12589, 12597, 12601, 12605, 12609, + 12613, 12621, 12625, 12629, 12633, 12638, 12644, 12648, 12652, 12660, + 12664, 12672, 12680, 12684, 12688, 12696, 12700, 12708, 12712, 12716, + 12720, 12724, 12728, 12732, 12736, 12740, 12744, 12748, 12752, 12760, + 12764, 12772, 12776, 12784, 12788, 12792, 12796, 12800, 12804, 12812, + 12816, 12824, 12828, 12836, 12840, 12844, 12852, 12857, 12863, 12867, + 12875, 12879, 12883, 12891, 12895, 12903, 12911, 12915, 12919, 12923, + 12927, 12931, 12935, 12939, 12947, 12951, 12955, 12959, 12967, 12971, + 12979, 12987, 12991, 12995, 12999, 13003, 13011, 13015, 13019, 13027, + 13031, 13039, 13047, 13051, 13059, 13067, 13072, 13078, 13083, 13089, + 13093, 13101, 13105, 13109, 13113, 13121, 13126, 13132, 13136, 13145, + 13147, 13155, 13160, 13166, 13171, 13177, 13181, 13189, 13193, 13197, + 13201, 13209, 13213, 13221, 13225, 13233, 13237, 13245, 13253, 13261, + 13269, 13273, 13281, 13285, 13289, 13293, 13297, 13301, 13305, 13309, + 13313, 13317, 13321, 13325, 13329, 13333, 13334, 13339, 13345, 13349, + 13350, 13354, 13362, 13370, 13374, 13378, 13382, 13390, 13394, 13402, + 13406, 13410, 13414, 13422, 13426, 13434, 13438, 13442, 13446, 13450, + 13454, 13458, 13462, 13466, 13470, 13474, 13478, 13482, 13486, 13490, + 13494, 13498, 13502, 13506, 13510, 13514, 13518, 13522, 13526, 13530, + 13534, 13538, 13542, 13546, 13550, 13554, 13558, 13562, 13566, 13570, + 13574, 13578, 13582, 13586, 13590, 13594, 13598, 13602, 13606, 13610, + 13614, 13618, 13622, 13626, 13630, 13634, 13638, 13642, 13646, 13650, + 13654, 13658, 13662, 13666, 13670, 13674, 13678, 13682, 13686, 13690, + 13694, 13698, 13702, 13706, 13710, 13714, 13718, 13722, 13726, 13730, + 13734, 13738, 13742, 13746, 13750, 13754, 13758, 13762, 13766, 13770, + 13774, 13778, 13782, 13786, 13790, 13794, 13798, 13802, 13806, 13810, + 13814, 13818, 13822, 13826, 13830, 13834, 13838, 13842, 13846, 13850, + 13854, 13858, 13862, 13866, 13870, 13874, 13878, 13882, 13886, 13890, + 13894, 13898, 13902, 13906, 13910, 13914, 13918, 13922, 13926, 13930, + 13934, 13938, 13942, 13946, 13950, 13954, 13958, 13962, 13966, 13970, + 13974, 13978, 13982, 13986, 13990, 13994, 13998, 14002, 14006, 14010, + 14014, 14018, 14022, 14026, 14030, 14034, 14038, 14042, 14046, 14050, + 14054, 14058, 14062, 14066, 14070, 14074, 14078, 14082, 14086, 14090, + 14094, 14098, 14102, 14106, 14110, 14114, 14118, 14122, 14126, 14130, + 14134, 14138, 14142, 14146, 14150, 14154, 14158, 14162, 14166, 14170, + 14174, 14178, 14182, 14186, 14190, 14194, 14198, 14202, 14206, 14210, + 14214, 14218, 14222, 14226, 14230, 14234, 14238, 14242, 14246, 14250, + 14254, 14258, 14262, 14266, 14270, 14274, 14278, 14282, 14286, 14290, + 14294, 14298, 14302, 14306, 14310, 14314, 14318, 14322, 14326, 14330, + 14334, 14338, 14342, 14346, 14350, 14354, 14358, 14362, 14366, 14370, + 14374, 14378, 14382, 14386, 14390, 14394, 14398, 14402, 14406, 14410, + 14414, 14418, 14422, 14426, 14430, 14434, 14438, 14442, 14446, 14450, + 14454, 14458, 14462, 14466, 14470, 14474, 14478, 14482, 14486, 14490, + 14494, 14498, 14502, 14506, 14510, 14514, 14518, 14522, 14526, 14530, + 14534, 14538, 14542, 14546, 14550, 14554, 14558, 14562, 14566, 14570, + 14574, 14578, 14582, 14586, 14590, 14594, 14598, 14602, 14606, 14610, + 14614, 14618, 14626, 14630, 14634, 14638, 14642, 14646, 14650, 14654, + 14658, 14662, 14666, 14670, 14674, 14678, 14682, 14686, 14690, 14694, + 14698, 14702, 14706, 14710, 14714, 14718, 14722, 14726, 14730, 14734, + 14738, 14742, 14746, 14750, 14754, 14758, 14762, 14766, 14770, 14774, + 14778, 14782, 14786, 14790, 14794, 14798, 14802, 14806, 14810, 14814, + 14822, 14826, 14830, 14834, 14838, 14842, 14846, 14850, 14854, 14858, + 14862, 14866, 14870, 14874, 14878, 14882, 14886, 14890, 14894, 14898, + 14902, 14906, 14910, 14918, 14922, 14926, 14930, 14934, 14938, 14942, + 14946, 14950, 14954, 14958, 14962, 14966, 14970, 14974, 14978, 14982, + 14986, 14990, 14994, 14998, 15002, 15006, 15010, 15014, 15018, 15022, + 15026, 15030, 15034, 15038, 15042, 15046, 15050, 15054, 15058, 15062, + 15066, 15070, 15074, 15078, 15082, 15086, 15090, 15094, 15098, 15102, + 15106, 15110, 15114, 15118, 15122, 15126, 15130, 15134, 15138, 15142, + 15146, 15150, 15154, 15158, 15162, 15166, 15170, 15174, 15178, 15182, + 15186, 15190, 15194, 15198, 15202, 15206, 15210, 15214, 15222, 15226, + 15230, 15234, 15238, 15242, 15246, 15250, 15254, 15258, 15262, 15266, + 15270, 15274, 15278, 15282, 15286, 15290, 15294, 15298, 15302, 15306, + 15310, 15314, 15318, 15322, 15326, 15330, 15334, 15338, 15342, 15346, + 15350, 15354, 15358, 15362, 15366, 15370, 15374, 15378, 15382, 15386, + 15390, 15394, 15398, 15402, 15406, 15410, 15414, 15418, 15422, 15426, + 15430, 15434, 15438, 15442, 15446, 15450, 15454, 15458, 15462, 15466, + 15470, 15474, 15478, 15482, 15486, 15490, 15494, 15498, 15502, 15506, + 15510, 15514, 15518, 15522, 15526, 15530, 15534, 15538, 15542, 15546, + 15550, 15554, 15558, 15562, 15566, 15570, 15574, 15578, 15582, 15586, + 15590, 15594, 15598, 15602, 15606, 15610, 15614, 15618, 15622, 15626, + 15630, 15634, 15638, 15642, 15646, 15650, 15654, 15658, 15662, 15666, + 15670, 15674, 15678, 15682, 15686, 15690, 15694, 15698, 15702, 15706, + 15710, 15714, 15718, 15722, 15726, 15730, 15734, 15738, 15742, 15746, + 15750, 15754, 15758, 15762, 15766, 15770, 15774, 15778, 15782, 15786, + 15790, 15794, 15798, 15802, 15806, 15810, 15814, 15818, 15822, 15826, + 15830, 15834, 15838, 15842, 15846, 15850, 15854, 15858, 15862, 15866, + 15870, 15874, 15878, 15882, 15886, 15890, 15894, 15898, 15902, 15906, + 15910, 15914, 15918, 15922, 15926, 15930, 15934, 15938, 15942, 15946, + 15950, 15954, 15958, 15962, 15966, 15970, 15974, 15978, 15982, 15986, + 15990, 15994, 15998, 16002, 16006, 16010, 16014, 16018, 16022, 16026, + 16030, 16034, 16038, 16042, 16046, 16050, 16054, 16058, 16062, 16066, + 16070, 16074, 16078, 16082, 16086, 16090, 16094, 16098, 16102, 16106, + 16110, 16114, 16118, 16122, 16126, 16130, 16134, 16138, 16142, 16146, + 16150, 16154, 16158, 16162, 16166, 16170, 16174, 16178, 16182, 16186, + 16190, 16194, 16198, 16202, 16206, 16210, 16214, 16218, 16222, 16226, + 16230, 16234, 16238, 16242, 16246, 16250, 16254, 16258, 16262, 16266, + 16270, 16274, 16278, 16282, 16286, 16290, 16294, 16298, 16302, 16306, + 16310, 16314, 16318, 16322, 16326, 16330, 16334, 16338, 16342, 16346, + 16350, 16354, 16358, 16362, 16366, 16370, 16374, 16378, 16382, 16386, + 16390, 16394, 16398, 16402, 16406, 16410, 16414, 16418, 16422, 16426, + 16430, 16434, 16438, 16442, 16446, 16450, 16454, 16458, 16462, 16466, + 16470, 16474, 16478, 16482, 16486, 16490, 16494, 16498, 16502, 16506, + 16510, 16514, 16518, 16522, 16526, 16530, 16534, 16538, 16542, 16546, + 16550, 16554, 16558, 16562, 16566, 16570, 16574, 16578, 16582, 16586, + 16590, 16594, 16598, 16602, 16606, 16610, 16614, 16618, 16622, 16626, + 16630, 16634, 16638, 16642, 16646, 16650, 16654, 16658, 16662, 16666, + 16670, 16674, 16678, 16682, 16686, 16690, 16694, 16698, 16702, 16706, + 16710, 16714, 16718, 16722, 16726, 16730, 16734, 16738, 16742, 16746, + 16750, 16754, 16758, 16762, 16766, 16770, 16774, 16778, 16782, 16786, + 16790, 16794, 16798, 16802, 16806, 16810, 16814, 16818, 16822, 16826, + 16830, 16834, 16838, 16842, 16846, 16850, 16854, 16858, 16862, 16866, + 16870, 16874, 16878, 16882, 16886, 16890, 16900, 16901, 16904, 16910, + 16916, 16922, 16923, 16924, 16925, 16926, 16939, 16939, 16946, 16946, + 16955, 16970, 16972, 16975, 16977, 16981, 16993, 17009, 17013, 17024, + 17025, 17028, 17040, 17049, 17050, 17053, 17054, 17055, 17058, 17059, + 17062, 17063, 17066, 17067, 17070, 17072, 17074, 17076, 17080, 17087, + 17094, 17110, 17144, 17154, 17157, 17161, 17174, 17175, 17177, 17179, + 17183, 17197, 17203, 17240, 17302, 17311, 17313, 17314, 17317, 17319, + 17320, 17323, 17324, 17325, 17326, 17327, 17334, 17333, 17343, 17345, + 17347, 17348, 17351, 17352, 17353, 17354, 17357, 17358, 17362, 17361, + 17378, 17376, 17392, 17391, 17405, 17411, 17412, 17415, 17417, 17418, + 17421, 17422, 17423, 17424, 17427, 17428, 17431, 17439, 17456, 17464, + 17487, 17601, 17635, 17637, 17639, 17643, 17647, 17646, 17697, 17699, + 17698, 17713, 17719, 17726, 17731, 17737, 17738, 17741, 17742, 17743, + 17744, 17745, 17746, 17747, 17748, 17749, 17752, 17753, 17754, 17755, + 17756, 17757, 17758, 17759, 17760, 17761, 17764, 17765, 17768, 17770, + 17779, 17879, 17880, 17887, 17888, 17889, 17895, 17904, 17907, 17908, + 17909, 17910, 17913, 17914, 17915, 17918, 17920, 17928, 17929, 17935, + 17943, 17944, 17947, 17948, 17951, 17956, 17963, 17968, 17975, 17982, + 17982, 17984, 17991, 17992, 17995, 17996, 17997, 17998, 17999, 18000, + 18001, 18002, 18003, 18009, 18014, 18024, 18029, 18034, 18041, 18042, + 18054, 18065, 18076, 18080, 18081, 18084, 18089, 18093, 18094, 18097, + 18103, 18111, 18117, 18124, 18128, 18129, 18132, 18135, 18139, 18140, + 18143, 18149, 18158, 18163, 18173, 18183, 18195, 18196, 18197, 18198, + 18199, 18200, 18201, 18202, 18203, 18204, 18205, 18206, 18207, 18208, + 18209, 18216, 18217, 18220, 18221, 18228, 18229, 18230, 18237, 18236, + 18253, 18254, 18261, 18260, 18331, 18337, 18343, 18351, 18357, 18363, + 18369, 18375, 18381, 18387, 18393, 18399, 18405, 18416, 18417, 18420, + 18421, 18422, 18423, 18424, 18425, 18426, 18427, 18428, 18429, 18430, + 18431, 18432, 18433, 18434, 18435, 18436, 18437, 18438, 18439, 18440, + 18441, 18444, 18445, 18446, 18447, 18448, 18449, 18453, 18454, 18455, + 18456, 18457, 18458, 18459, 18462, 18465, 18466, 18467, 18468, 18469, + 18470, 18471, 18472, 18485, 18486, 18487, 18488, 18489, 18490, 18491, + 18496, 18497, 18498, 18499, 18500, 18501, 18507, 18508, 18509, 18510, + 18511, 18512, 18513, 18514, 18515, 18516, 18517, 18520, 18521, 18522, + 18523, 18524, 18527, 18528, 18529, 18530, 18533, 18534, 18535, 18536, + 18537, 18538, 18539, 18556, 18557, 18558, 18561, 18562, 18563, 18564, + 18565, 18566, 18570, 18570, 18573, 18579, 18580, 18583, 18585, 18590, + 18600, 18611, 18618, 18619, 18620, 18623, 18656, 18658, 18660, 18662, + 18664, 18666, 18667, 18670, 18672, 18680, 18681, 18682, 18686, 18687, + 18691, 18692, 18695, 18696, 18699, 18700, 18701, 18702, 18703, 18706, + 18707, 18708, 18709, 18710, 18711, 18712, 18713, 18714, 18715, 18716, + 18717, 18718, 18719, 18720, 18721, 18722, 18723, 18724, 18725, 18726, + 18727, 18728, 18729, 18730, 18731, 18732, 18733, 18734, 18735, 18736, + 18737, 18738, 18739, 18740, 18741, 18742, 18743, 18744, 18745, 18746, + 18747, 18748, 18749, 18750, 18751, 18752, 18753, 18754, 18755, 18756, + 18757, 18758, 18759, 18760, 18761, 18764, 18765, 18766, 18767, 18770, + 18771, 18772, 18773, 18774, 18775, 18776, 18777, 18778, 18779, 18786, + 18787, 18788, 18789, 18792, 18793, 18796, 18797, 18800, 18801, 18812, + 18813 +}; +#endif + +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) + +#if YYDEBUG || 0 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; + +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "\"end of file\"", "error", "\"invalid token\"", "SQL_ALLOCATE", + "SQL_AUTOCOMMIT", "SQL_BOOL", "SQL_BREAK", "SQL_CARDINALITY", + "SQL_CONNECT", "SQL_COUNT", "SQL_DATETIME_INTERVAL_CODE", + "SQL_DATETIME_INTERVAL_PRECISION", "SQL_DESCRIBE", "SQL_DESCRIPTOR", + "SQL_DISCONNECT", "SQL_FOUND", "SQL_FREE", "SQL_GET", "SQL_GO", + "SQL_GOTO", "SQL_IDENTIFIED", "SQL_INDICATOR", "SQL_KEY_MEMBER", + "SQL_LENGTH", "SQL_LONG", "SQL_NULLABLE", "SQL_OCTET_LENGTH", "SQL_OPEN", + "SQL_OUTPUT", "SQL_REFERENCE", "SQL_RETURNED_LENGTH", + "SQL_RETURNED_OCTET_LENGTH", "SQL_SCALE", "SQL_SECTION", "SQL_SHORT", + "SQL_SIGNED", "SQL_SQLERROR", "SQL_SQLPRINT", "SQL_SQLWARNING", + "SQL_START", "SQL_STOP", "SQL_STRUCT", "SQL_UNSIGNED", "SQL_VAR", + "SQL_WHENEVER", "S_ADD", "S_AND", "S_ANYTHING", "S_AUTO", "S_CONST", + "S_DEC", "S_DIV", "S_DOTPOINT", "S_EQUAL", "S_EXTERN", "S_INC", + "S_LSHIFT", "S_MEMPOINT", "S_MEMBER", "S_MOD", "S_MUL", "S_NEQUAL", + "S_OR", "S_REGISTER", "S_RSHIFT", "S_STATIC", "S_SUB", "S_VOLATILE", + "S_TYPEDEF", "CSTRING", "CVARIABLE", "CPP_LINE", "IP", "IDENT", "UIDENT", + "FCONST", "SCONST", "USCONST", "BCONST", "XCONST", "Op", "ICONST", + "PARAM", "TYPECAST", "DOT_DOT", "COLON_EQUALS", "EQUALS_GREATER", + "LESS_EQUALS", "GREATER_EQUALS", "NOT_EQUALS", "ABORT_P", "ABSOLUTE_P", + "ACCESS", "ACTION", "ADD_P", "ADMIN", "AFTER", "AGGREGATE", "ALL", + "ALSO", "ALTER", "ALWAYS", "ANALYSE", "ANALYZE", "AND", "ANY", "ARRAY", + "AS", "ASC", "ASENSITIVE", "ASSERTION", "ASSIGNMENT", "ASYMMETRIC", + "ATOMIC", "AT", "ATTACH", "ATTRIBUTE", "AUTHORIZATION", "BACKWARD", + "BEFORE", "BEGIN_P", "BETWEEN", "BIGINT", "BINARY", "BIT", "BOOLEAN_P", + "BOTH", "BREADTH", "BY", "CACHE", "CALL", "CALLED", "CASCADE", + "CASCADED", "CASE", "CAST", "CATALOG_P", "CHAIN", "CHAR_P", "CHARACTER", + "CHARACTERISTICS", "CHECK", "CHECKPOINT", "CLASS", "CLOSE", "CLUSTER", + "COALESCE", "COLLATE", "COLLATION", "COLUMN", "COLUMNS", "COMMENT", + "COMMENTS", "COMMIT", "COMMITTED", "COMPRESSION", "CONCURRENTLY", + "CONFIGURATION", "CONFLICT", "CONNECTION", "CONSTRAINT", "CONSTRAINTS", + "CONTENT_P", "CONTINUE_P", "CONVERSION_P", "COPY", "COST", "CREATE", + "CROSS", "CSV", "CUBE", "CURRENT_P", "CURRENT_CATALOG", "CURRENT_DATE", + "CURRENT_ROLE", "CURRENT_SCHEMA", "CURRENT_TIME", "CURRENT_TIMESTAMP", + "CURRENT_USER", "CURSOR", "CYCLE", "DATA_P", "DATABASE", "DAY_P", + "DEALLOCATE", "DEC", "DECIMAL_P", "DECLARE", "DEFAULT", "DEFAULTS", + "DEFERRABLE", "DEFERRED", "DEFINER", "DELETE_P", "DELIMITER", + "DELIMITERS", "DEPENDS", "DEPTH", "DESC", "DETACH", "DICTIONARY", + "DISABLE_P", "DISCARD", "DISTINCT", "DO", "DOCUMENT_P", "DOMAIN_P", + "DOUBLE_P", "DROP", "EACH", "ELSE", "ENABLE_P", "ENCODING", "ENCRYPTED", + "END_P", "ENUM_P", "ESCAPE", "EVENT", "EXCEPT", "EXCLUDE", "EXCLUDING", + "EXCLUSIVE", "EXECUTE", "EXISTS", "EXPLAIN", "EXPRESSION", "EXTENSION", + "EXTERNAL", "EXTRACT", "FALSE_P", "FAMILY", "FETCH", "FILTER", + "FINALIZE", "FIRST_P", "FLOAT_P", "FOLLOWING", "FOR", "FORCE", "FOREIGN", + "FORWARD", "FREEZE", "FROM", "FULL", "FUNCTION", "FUNCTIONS", + "GENERATED", "GLOBAL", "GRANT", "GRANTED", "GREATEST", "GROUP_P", + "GROUPING", "GROUPS", "HANDLER", "HAVING", "HEADER_P", "HOLD", "HOUR_P", + "IDENTITY_P", "IF_P", "ILIKE", "IMMEDIATE", "IMMUTABLE", "IMPLICIT_P", + "IMPORT_P", "IN_P", "INCLUDE", "INCLUDING", "INCREMENT", "INDEX", + "INDEXES", "INHERIT", "INHERITS", "INITIALLY", "INLINE_P", "INNER_P", + "INOUT", "INPUT_P", "INSENSITIVE", "INSERT", "INSTEAD", "INT_P", + "INTEGER", "INTERSECT", "INTERVAL", "INTO", "INVOKER", "IS", "ISNULL", + "ISOLATION", "JOIN", "KEY", "LABEL", "LANGUAGE", "LARGE_P", "LAST_P", + "LATERAL_P", "LEADING", "LEAKPROOF", "LEAST", "LEFT", "LEVEL", "LIKE", + "LIMIT", "LISTEN", "LOAD", "LOCAL", "LOCALTIME", "LOCALTIMESTAMP", + "LOCATION", "LOCK_P", "LOCKED", "LOGGED", "MAPPING", "MATCH", + "MATERIALIZED", "MAXVALUE", "METHOD", "MINUTE_P", "MINVALUE", "MODE", + "MONTH_P", "MOVE", "NAME_P", "NAMES", "NATIONAL", "NATURAL", "NCHAR", + "NEW", "NEXT", "NFC", "NFD", "NFKC", "NFKD", "NO", "NONE", "NORMALIZE", + "NORMALIZED", "NOT", "NOTHING", "NOTIFY", "NOTNULL", "NOWAIT", "NULL_P", + "NULLIF", "NULLS_P", "NUMERIC", "OBJECT_P", "OF", "OFF", "OFFSET", + "OIDS", "OLD", "ON", "ONLY", "OPERATOR", "OPTION", "OPTIONS", "OR", + "ORDER", "ORDINALITY", "OTHERS", "OUT_P", "OUTER_P", "OVER", "OVERLAPS", + "OVERLAY", "OVERRIDING", "OWNED", "OWNER", "PARALLEL", "PARSER", + "PARTIAL", "PARTITION", "PASSING", "PASSWORD", "PLACING", "PLANS", + "POLICY", "POSITION", "PRECEDING", "PRECISION", "PRESERVE", "PREPARE", + "PREPARED", "PRIMARY", "PRIOR", "PRIVILEGES", "PROCEDURAL", "PROCEDURE", + "PROCEDURES", "PROGRAM", "PUBLICATION", "QUOTE", "RANGE", "READ", "REAL", + "REASSIGN", "RECHECK", "RECURSIVE", "REF", "REFERENCES", "REFERENCING", + "REFRESH", "REINDEX", "RELATIVE_P", "RELEASE", "RENAME", "REPEATABLE", + "REPLACE", "REPLICA", "RESET", "RESTART", "RESTRICT", "RETURN", + "RETURNING", "RETURNS", "REVOKE", "RIGHT", "ROLE", "ROLLBACK", "ROLLUP", + "ROUTINE", "ROUTINES", "ROW", "ROWS", "RULE", "SAVEPOINT", "SCHEMA", + "SCHEMAS", "SCROLL", "SEARCH", "SECOND_P", "SECURITY", "SELECT", + "SEQUENCE", "SEQUENCES", "SERIALIZABLE", "SERVER", "SESSION", + "SESSION_USER", "SET", "SETS", "SETOF", "SHARE", "SHOW", "SIMILAR", + "SIMPLE", "SKIP", "SMALLINT", "SNAPSHOT", "SOME", "SQL_P", "STABLE", + "STANDALONE_P", "START", "STATEMENT", "STATISTICS", "STDIN", "STDOUT", + "STORAGE", "STORED", "STRICT_P", "STRIP_P", "SUBSCRIPTION", "SUBSTRING", + "SUPPORT", "SYMMETRIC", "SYSID", "SYSTEM_P", "TABLE", "TABLES", + "TABLESAMPLE", "TABLESPACE", "TEMP", "TEMPLATE", "TEMPORARY", "TEXT_P", + "THEN", "TIES", "TIME", "TIMESTAMP", "TO", "TRAILING", "TRANSACTION", + "TRANSFORM", "TREAT", "TRIGGER", "TRIM", "TRUE_P", "TRUNCATE", "TRUSTED", + "TYPE_P", "TYPES_P", "UESCAPE", "UNBOUNDED", "UNCOMMITTED", + "UNENCRYPTED", "UNION", "UNIQUE", "UNKNOWN", "UNLISTEN", "UNLOGGED", + "UNTIL", "UPDATE", "USER", "USING", "VACUUM", "VALID", "VALIDATE", + "VALIDATOR", "VALUE_P", "VALUES", "VARCHAR", "VARIADIC", "VARYING", + "VERBOSE", "VERSION_P", "VIEW", "VIEWS", "VOLATILE", "WHEN", "WHERE", + "WHITESPACE_P", "WINDOW", "WITH", "WITHIN", "WITHOUT", "WORK", "WRAPPER", + "WRITE", "XML_P", "XMLATTRIBUTES", "XMLCONCAT", "XMLELEMENT", + "XMLEXISTS", "XMLFOREST", "XMLNAMESPACES", "XMLPARSE", "XMLPI", + "XMLROOT", "XMLSERIALIZE", "XMLTABLE", "YEAR_P", "YES_P", "ZONE", + "NOT_LA", "NULLS_LA", "WITH_LA", "MODE_TYPE_NAME", "MODE_PLPGSQL_EXPR", + "MODE_PLPGSQL_ASSIGN1", "MODE_PLPGSQL_ASSIGN2", "MODE_PLPGSQL_ASSIGN3", + "'<'", "'>'", "'='", "'+'", "'-'", "'*'", "'/'", "'%'", "'^'", "UMINUS", + "'['", "']'", "'('", "')'", "'.'", "','", "';'", "':'", "'{'", "'}'", + "$accept", "prog", "toplevel_stmt", "stmt", "CallStmt", "CreateRoleStmt", + "opt_with", "OptRoleList", "AlterOptRoleList", "AlterOptRoleElem", + "CreateOptRoleElem", "CreateUserStmt", "AlterRoleStmt", + "opt_in_database", "AlterRoleSetStmt", "DropRoleStmt", "CreateGroupStmt", + "AlterGroupStmt", "add_drop", "CreateSchemaStmt", "OptSchemaName", + "OptSchemaEltList", "schema_stmt", "VariableSetStmt", "set_rest", + "generic_set", "set_rest_more", "var_name", "var_list", "var_value", + "iso_level", "opt_boolean_or_string", "zone_value", "opt_encoding", + "NonReservedWord_or_Sconst", "VariableResetStmt", "reset_rest", + "generic_reset", "SetResetClause", "FunctionSetResetClause", + "VariableShowStmt", "ConstraintsSetStmt", "constraints_set_list", + "constraints_set_mode", "CheckPointStmt", "DiscardStmt", + "AlterTableStmt", "alter_table_cmds", "partition_cmd", + "index_partition_cmd", "alter_table_cmd", "alter_column_default", + "opt_drop_behavior", "opt_collate_clause", "alter_using", + "replica_identity", "reloptions", "opt_reloptions", "reloption_list", + "reloption_elem", "alter_identity_column_option_list", + "alter_identity_column_option", "PartitionBoundSpec", + "hash_partbound_elem", "hash_partbound", "AlterCompositeTypeStmt", + "alter_type_cmds", "alter_type_cmd", "ClosePortalStmt", "CopyStmt", + "copy_from", "opt_program", "copy_file_name", "copy_options", + "copy_opt_list", "copy_opt_item", "opt_binary", "copy_delimiter", + "opt_using", "copy_generic_opt_list", "copy_generic_opt_elem", + "copy_generic_opt_arg", "copy_generic_opt_arg_list", + "copy_generic_opt_arg_list_item", "CreateStmt", "OptTemp", + "OptTableElementList", "OptTypedTableElementList", "TableElementList", + "TypedTableElementList", "TableElement", "TypedTableElement", + "columnDef", "columnOptions", "column_compression", + "opt_column_compression", "ColQualList", "ColConstraint", + "ColConstraintElem", "generated_when", "ConstraintAttr", + "TableLikeClause", "TableLikeOptionList", "TableLikeOption", + "TableConstraint", "ConstraintElem", "opt_no_inherit", "opt_column_list", + "columnList", "columnElem", "opt_c_include", "key_match", + "ExclusionConstraintList", "ExclusionConstraintElem", "OptWhereClause", + "key_actions", "key_update", "key_delete", "key_action", "OptInherit", + "OptPartitionSpec", "PartitionSpec", "part_params", "part_elem", + "table_access_method_clause", "OptWith", "OnCommitOption", + "OptTableSpace", "OptConsTableSpace", "ExistingIndex", "CreateStatsStmt", + "stats_params", "stats_param", "AlterStatsStmt", "create_as_target", + "opt_with_data", "CreateMatViewStmt", "create_mv_target", "OptNoLog", + "RefreshMatViewStmt", "CreateSeqStmt", "AlterSeqStmt", "OptSeqOptList", + "OptParenthesizedSeqOptList", "SeqOptList", "SeqOptElem", "opt_by", + "NumericOnly", "NumericOnly_list", "CreatePLangStmt", "opt_trusted", + "handler_name", "opt_inline_handler", "validator_clause", + "opt_validator", "opt_procedural", "CreateTableSpaceStmt", + "OptTableSpaceOwner", "DropTableSpaceStmt", "CreateExtensionStmt", + "create_extension_opt_list", "create_extension_opt_item", + "AlterExtensionStmt", "alter_extension_opt_list", + "alter_extension_opt_item", "AlterExtensionContentsStmt", + "CreateFdwStmt", "fdw_option", "fdw_options", "opt_fdw_options", + "AlterFdwStmt", "create_generic_options", "generic_option_list", + "alter_generic_options", "alter_generic_option_list", + "alter_generic_option_elem", "generic_option_elem", + "generic_option_name", "generic_option_arg", "CreateForeignServerStmt", + "opt_type", "foreign_server_version", "opt_foreign_server_version", + "AlterForeignServerStmt", "CreateForeignTableStmt", + "ImportForeignSchemaStmt", "import_qualification_type", + "import_qualification", "CreateUserMappingStmt", "auth_ident", + "DropUserMappingStmt", "AlterUserMappingStmt", "CreatePolicyStmt", + "AlterPolicyStmt", "RowSecurityOptionalExpr", + "RowSecurityOptionalWithCheck", "RowSecurityDefaultToRole", + "RowSecurityOptionalToRole", "RowSecurityDefaultPermissive", + "RowSecurityDefaultForCmd", "row_security_cmd", "CreateAmStmt", + "am_type", "CreateTrigStmt", "TriggerActionTime", "TriggerEvents", + "TriggerOneEvent", "TriggerReferencing", "TriggerTransitions", + "TriggerTransition", "TransitionOldOrNew", "TransitionRowOrTable", + "TransitionRelName", "TriggerForSpec", "TriggerForOptEach", + "TriggerForType", "TriggerWhen", "FUNCTION_or_PROCEDURE", + "TriggerFuncArgs", "TriggerFuncArg", "OptConstrFromTable", + "ConstraintAttributeSpec", "ConstraintAttributeElem", + "CreateEventTrigStmt", "event_trigger_when_list", + "event_trigger_when_item", "event_trigger_value_list", + "AlterEventTrigStmt", "enable_trigger", "CreateAssertionStmt", + "DefineStmt", "definition", "def_list", "def_elem", "def_arg", + "old_aggr_definition", "old_aggr_list", "old_aggr_elem", + "opt_enum_val_list", "enum_val_list", "AlterEnumStmt", + "opt_if_not_exists", "CreateOpClassStmt", "opclass_item_list", + "opclass_item", "opt_default", "opt_opfamily", "opclass_purpose", + "opt_recheck", "CreateOpFamilyStmt", "AlterOpFamilyStmt", + "opclass_drop_list", "opclass_drop", "DropOpClassStmt", + "DropOpFamilyStmt", "DropOwnedStmt", "ReassignOwnedStmt", "DropStmt", + "object_type_any_name", "object_type_name", "drop_type_name", + "object_type_name_on_any_name", "any_name_list", "any_name", "attrs", + "type_name_list", "TruncateStmt", "opt_restart_seqs", "CommentStmt", + "comment_text", "SecLabelStmt", "opt_provider", "security_label", + "FetchStmt", "fetch_args", "from_in", "opt_from_in", "GrantStmt", + "RevokeStmt", "privileges", "privilege_list", "privilege", + "privilege_target", "grantee_list", "grantee", "opt_grant_grant_option", + "GrantRoleStmt", "RevokeRoleStmt", "opt_grant_admin_option", + "opt_granted_by", "AlterDefaultPrivilegesStmt", "DefACLOptionList", + "DefACLOption", "DefACLAction", "defacl_privilege_target", "IndexStmt", + "opt_unique", "opt_concurrently", "opt_index_name", + "access_method_clause", "index_params", "index_elem_options", + "index_elem", "opt_include", "index_including_params", "opt_collate", + "opt_class", "opt_asc_desc", "opt_nulls_order", "CreateFunctionStmt", + "opt_or_replace", "func_args", "func_args_list", + "function_with_argtypes_list", "function_with_argtypes", + "func_args_with_defaults", "func_args_with_defaults_list", "func_arg", + "arg_class", "param_name", "func_return", "func_type", + "func_arg_with_default", "aggr_arg", "aggr_args", "aggr_args_list", + "aggregate_with_argtypes", "aggregate_with_argtypes_list", + "opt_createfunc_opt_list", "createfunc_opt_list", "common_func_opt_item", + "createfunc_opt_item", "func_as", "ReturnStmt", "opt_routine_body", + "routine_body_stmt_list", "routine_body_stmt", "transform_type_list", + "opt_definition", "table_func_column", "table_func_column_list", + "AlterFunctionStmt", "alterfunc_opt_list", "opt_restrict", + "RemoveFuncStmt", "RemoveAggrStmt", "RemoveOperStmt", "oper_argtypes", + "any_operator", "operator_with_argtypes_list", "operator_with_argtypes", + "DoStmt", "dostmt_opt_list", "dostmt_opt_item", "CreateCastStmt", + "cast_context", "DropCastStmt", "opt_if_exists", "CreateTransformStmt", + "transform_element_list", "DropTransformStmt", "ReindexStmt", + "reindex_target_type", "reindex_target_multitable", "AlterTblSpcStmt", + "RenameStmt", "opt_column", "opt_set_data", "AlterObjectDependsStmt", + "opt_no", "AlterObjectSchemaStmt", "AlterOperatorStmt", + "operator_def_list", "operator_def_elem", "operator_def_arg", + "AlterTypeStmt", "AlterOwnerStmt", "CreatePublicationStmt", + "opt_publication_for_tables", "publication_for_tables", + "AlterPublicationStmt", "CreateSubscriptionStmt", + "AlterSubscriptionStmt", "DropSubscriptionStmt", "RuleStmt", + "RuleActionList", "RuleActionMulti", "RuleActionStmt", + "RuleActionStmtOrEmpty", "event", "opt_instead", "NotifyStmt", + "notify_payload", "ListenStmt", "UnlistenStmt", "TransactionStmt", + "TransactionStmtLegacy", "opt_transaction", "transaction_mode_item", + "transaction_mode_list", "transaction_mode_list_or_empty", + "opt_transaction_chain", "ViewStmt", "opt_check_option", "LoadStmt", + "CreatedbStmt", "createdb_opt_list", "createdb_opt_items", + "createdb_opt_item", "createdb_opt_name", "opt_equal", + "AlterDatabaseStmt", "AlterDatabaseSetStmt", "DropdbStmt", + "drop_option_list", "drop_option", "AlterCollationStmt", + "AlterSystemStmt", "CreateDomainStmt", "AlterDomainStmt", "opt_as", + "AlterTSDictionaryStmt", "AlterTSConfigurationStmt", "any_with", + "CreateConversionStmt", "ClusterStmt", "cluster_index_specification", + "VacuumStmt", "AnalyzeStmt", "utility_option_list", "analyze_keyword", + "utility_option_elem", "utility_option_name", "utility_option_arg", + "opt_analyze", "opt_verbose", "opt_full", "opt_freeze", "opt_name_list", + "vacuum_relation", "vacuum_relation_list", "opt_vacuum_relation_list", + "ExplainStmt", "ExplainableStmt", "PrepareStmt", "prep_type_clause", + "PreparableStmt", "ExecuteStmt", "execute_param_clause", "InsertStmt", + "insert_target", "insert_rest", "override_kind", "insert_column_list", + "insert_column_item", "opt_on_conflict", "opt_conf_expr", + "returning_clause", "DeleteStmt", "using_clause", "LockStmt", "opt_lock", + "lock_type", "opt_nowait", "opt_nowait_or_skip", "UpdateStmt", + "set_clause_list", "set_clause", "set_target", "set_target_list", + "DeclareCursorStmt", "cursor_name", "cursor_options", "opt_hold", + "SelectStmt", "select_with_parens", "select_no_parens", "select_clause", + "simple_select", "with_clause", "cte_list", "common_table_expr", + "opt_materialized", "opt_search_clause", "opt_cycle_clause", + "opt_with_clause", "into_clause", "OptTempTableName", "opt_table", + "set_quantifier", "distinct_clause", "opt_all_clause", "opt_sort_clause", + "sort_clause", "sortby_list", "sortby", "select_limit", + "opt_select_limit", "limit_clause", "offset_clause", + "select_limit_value", "select_offset_value", "select_fetch_first_value", + "I_or_F_const", "row_or_rows", "first_or_next", "group_clause", + "group_by_list", "group_by_item", "empty_grouping_set", "rollup_clause", + "cube_clause", "grouping_sets_clause", "having_clause", + "for_locking_clause", "opt_for_locking_clause", "for_locking_items", + "for_locking_item", "for_locking_strength", "locked_rels_list", + "values_clause", "from_clause", "from_list", "table_ref", "joined_table", + "alias_clause", "opt_alias_clause", "opt_alias_clause_for_join_using", + "func_alias_clause", "join_type", "opt_outer", "join_qual", + "relation_expr", "relation_expr_list", "relation_expr_opt_alias", + "tablesample_clause", "opt_repeatable_clause", "func_table", + "rowsfrom_item", "rowsfrom_list", "opt_col_def_list", "opt_ordinality", + "where_clause", "where_or_current_clause", "OptTableFuncElementList", + "TableFuncElementList", "TableFuncElement", "xmltable", + "xmltable_column_list", "xmltable_column_el", + "xmltable_column_option_list", "xmltable_column_option_el", + "xml_namespace_list", "xml_namespace_el", "Typename", "opt_array_bounds", + "SimpleTypename", "ConstTypename", "GenericType", "opt_type_modifiers", + "Numeric", "opt_float", "Bit", "ConstBit", "BitWithLength", + "BitWithoutLength", "Character", "ConstCharacter", "CharacterWithLength", + "CharacterWithoutLength", "character", "opt_varying", "ConstDatetime", + "ConstInterval", "opt_timezone", "opt_interval", "interval_second", + "a_expr", "b_expr", "c_expr", "func_application", "func_expr", + "func_expr_windowless", "func_expr_common_subexpr", "xml_root_version", + "opt_xml_root_standalone", "xml_attributes", "xml_attribute_list", + "xml_attribute_el", "document_or_content", "xml_whitespace_option", + "xmlexists_argument", "xml_passing_mech", "within_group_clause", + "filter_clause", "window_clause", "window_definition_list", + "window_definition", "over_clause", "window_specification", + "opt_existing_window_name", "opt_partition_clause", "opt_frame_clause", + "frame_extent", "frame_bound", "opt_window_exclusion_clause", "row", + "explicit_row", "implicit_row", "sub_type", "all_Op", "MathOp", + "qual_Op", "qual_all_Op", "subquery_Op", "expr_list", "func_arg_list", + "func_arg_expr", "func_arg_list_opt", "type_list", "array_expr", + "array_expr_list", "extract_list", "extract_arg", "unicode_normal_form", + "overlay_list", "position_list", "substr_list", "trim_list", "in_expr", + "case_expr", "when_clause_list", "when_clause", "case_default", + "case_arg", "columnref", "indirection_el", "opt_slice_bound", + "indirection", "opt_indirection", "opt_asymmetric", "opt_target_list", + "target_list", "target_el", "qualified_name_list", "qualified_name", + "name_list", "name", "attr_name", "file_name", "func_name", "AexprConst", + "Iconst", "SignedIconst", "RoleId", "RoleSpec", "role_list", + "NonReservedWord", "BareColLabel", "unreserved_keyword", + "col_name_keyword", "type_func_name_keyword", "reserved_keyword", + "bare_label_keyword", "statements", "statement", "CreateAsStmt", "$@1", + "$@2", "at", "ECPGConnect", "connection_target", "opt_database_name", + "db_prefix", "server", "opt_server", "server_name", "opt_port", + "opt_connection_name", "opt_user", "ora_user", "user_name", + "char_variable", "opt_options", "connect_options", "opt_opt_value", + "prepared_name", "ECPGDeclareStmt", "ECPGCursorStmt", + "ECPGExecuteImmediateStmt", "ECPGVarDeclaration", + "single_vt_declaration", "precision", "opt_scale", "ecpg_interval", + "ECPGDeclaration", "$@3", "sql_startdeclare", "sql_enddeclare", + "var_type_declarations", "vt_declarations", "variable_declarations", + "type_declaration", "$@4", "var_declaration", "$@5", "$@6", + "opt_bit_field", "storage_declaration", "storage_clause", + "storage_modifier", "var_type", "enum_type", "enum_definition", + "struct_union_type_with_symbol", "$@7", "struct_union_type", "$@8", + "s_struct_union_symbol", "s_struct_union", "simple_type", + "unsigned_type", "signed_type", "opt_signed", "variable_list", + "variable", "opt_initializer", "opt_pointer", "ECPGDeclare", + "ECPGDisconnect", "dis_name", "connection_object", "execstring", + "ECPGFree", "ECPGOpen", "opt_ecpg_using", "ecpg_using", + "using_descriptor", "into_descriptor", "into_sqlda", "using_list", + "UsingValue", "UsingConst", "ECPGDescribe", "opt_output", + "ECPGAllocateDescr", "ECPGDeallocateDescr", "ECPGGetDescriptorHeader", + "ECPGGetDescHeaderItems", "ECPGGetDescHeaderItem", + "ECPGSetDescriptorHeader", "ECPGSetDescHeaderItems", + "ECPGSetDescHeaderItem", "IntConstVar", "desc_header_item", + "ECPGGetDescriptor", "ECPGGetDescItems", "ECPGGetDescItem", + "ECPGSetDescriptor", "ECPGSetDescItems", "ECPGSetDescItem", + "AllConstVar", "descriptor_item", "ECPGSetAutocommit", "on_off", + "ECPGSetConnection", "ECPGTypedef", "$@9", "opt_reference", "ECPGVar", + "$@10", "ECPGWhenever", "action", "ECPGKeywords", "ECPGKeywords_vanames", + "ECPGKeywords_rest", "ECPGTypeName", "symbol", "ECPGColId", "ColId", + "type_function_name", "ColLabel", "ECPGColLabel", "ECPGColLabelCommon", + "ECPGCKeywords", "all_unreserved_keyword", "ECPGunreserved_interval", + "into_list", "ecpgstart", "c_args", "coutputvariable", "civarind", + "char_civar", "civar", "indicator", "cvariable", "ecpg_param", + "ecpg_bconst", "ecpg_fconst", "ecpg_sconst", "ecpg_xconst", "ecpg_ident", + "quoted_ident_stringvar", "c_stuff_item", "c_stuff", "c_list", "c_term", + "c_thing", "c_anything", "DeallocateStmt", "Iresult", "execute_rest", + "ecpg_into", "opt_ecpg_into", "ecpg_fetch_into", "opt_ecpg_fetch_into", YY_NULLPTR +}; + +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) +{ + return yytname[yysymbol]; +} +#endif + +#ifdef YYPRINT +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ +static const yytype_int16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, + 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 60, 62, 61, 43, 45, + 42, 47, 37, 94, 810, 91, 93, 40, 41, 46, + 44, 59, 58, 123, 125 +}; +#endif + +#define YYPACT_NINF (-5912) + +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) + +#define YYTABLE_NINF (-3465) + +#define yytable_value_is_error(Yyn) \ + ((Yyn) == YYTABLE_NINF) + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const int yypact[] = +{ + -5912, 1049, 14899, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, 38848, -5912, -5912, -5912, -5912, -5912,135029, + 1146, -5912, -5912,140487, -5912, -5912, -5912, 1054, 91749, -5912, + 95536, 1177, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + 99864, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + 77664, 1327, -5912, 586, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, 1274, 19807, -5912, -5912, 96077, -5912, 694, -5912, -5912, + -5912, -5912, -5912, 79832, -5912, -5912, 96618, 1527, -5912, -5912, + 890, 1638, -5912, 176, 19557, -5912, -5912, 97159, 92831, -5912, + -5912,100405, 630, 954, 11061, 1274, 38304,100946, -5912, 1153, + -5912, 73860, -5912, -5912, -5912, 92290, -5912, -5912, -5912, 1019, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + 108520, 1519, 1306, 74402, -5912, -5912, -5912, -5912, -5912,108520, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912,101487, + -5912, 1500, 1590, 517,109061,109602, 90126, -5912, 1656, -5912, + 108520, 1725, 445, 76580, -5912,110143, -5912, -5912, 1602, -5912, + 102028, -5912, -5912, -5912, -5912, -5912, 1306, -5912, 77664, 72774, + 345, 1622, -5912, -5912,110684, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912,108520, 2108, 1645, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, 1532, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, 802, -5912, 948, 1110, 1598, 843, 1706, + -5912, -5912, -5912, 21088, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912,136643, 2387, -5912, -5912, -5912, 1659, -5912, 1792, + -5912, -5912, -5912, 1456, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, 756, -5912, -5912, -5912, -5912, 2358,135567, 99864, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, 93372, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 252, -5912, + -5912, -5912, -5912, -5912, 99864, 99864, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, 99864, 1785, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, 1032, 2137, -5912, -5912, 77664, 2448, 2448, + 2509,136643, -5912, -5912, 2398, 79832,108520,108520,108520, 2076, + 108520, 2079,108520, 534, 79832,143815,102569, 2209, 2063, 67781, + 111225, -5912, 79832,108520,141440, 79832,108520,108520,111766,108520, + 112307,108520, 1472, 97700,108520, 2160,108520,108520,141915,112848, + 2314, -5912, 2591, 1583, -5912, 2068, -5912, 226, -5912, 2135, + -5912, 256, 267, 303, -5912, -5912, -5912,146190,108520, 10218, + 1519, 2398, -5912, 2108,108520, 2330,108520, 2091,113389,108520, + -5912,108520, 2176,113930, 844, 2248,143815, 2286, 68339, 2263, + 108520,108520,143815,114471,115012,115553,108520,108520, -5912, -5912, + 2250,108520, -5912, 2383,144290, 1408, 2391, 2575, 2424, 967, + -5912, -5912, 2651, 2186, -5912, -5912, 2704, 99864, -5912, 98241, + -5912, -5912, -5912, 2632, -5912, 2344, 2349, 2364, -5912, -5912, + -5912, -5912, -5912,147140, 954, -5912, -5912, 2519, 80374, 2582, + -5912, -5912,116094, 85252, 2339, -5912, 866, 80916,144765, 2689, + 2345, 68897, 2744, -5912, 81458, -5912,145240, 82000, -5912, -5912, + -5912, -5912, -5912,116635, -5912,117176, 2453, 2582, -5912, 85794, + 145715, -5912, 2595,117717,118258,118799, 2398, 14804, -5912, 2328, + 496, 2385, 1414, 99864, 99864, 1270,137596, -5912, -5912, 2389, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 408, 1823, + 74944, 800, 75486, -5912, -5912, 1008, 1255, 1334, 408, 2840, + 2840, 185, 99864, -5912, -5912, 1823, -5912, 149, 742, 2404, + 2404, 2404, 2563, 57, -5912, 2404, 2565, -5912, -5912, -5912, + -5912,102028, 74944, 75486, -5912, 2436, 1519, 164, 2884, 2497, + -5912, -5912, -5912, -5912, -5912,146190, 2877, 2877,108520, -5912, + -5912, -5912, 2923, 2501, 2772, -5912, 2521, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, 2740, 2748, 2726, 167, + 1519, 294, -5912, 2864, -5912, 2762, 46684, 46684, 1427, 99864, + 1519, 76028,103110,130701, 233,147140, 1519,119340, 2577, 1549, + 2781, -5912, -5912, -5912, 711, -5912, 3012, 2593, 2852, 414, + 1583, 64485, -5912, 2583, 2135,102028, 24112, -5912, -5912, -5912, + -5912,146190, 2912, 51188,108520, 2597, -5912, 2599, 2597, 2608, + 2609, 1598, -5912,146190,108520, 1626, 1626, 3053, 1626, 1611, + 1849, -5912, 2069, -5912, 2940, 2902,102028, 2627, 1274, 2630, + -5912, -5912, -5912, 2638, -5912, 2670, 2705, -5912, 1077, 2950, + -5912, -5912, -5912, -5912, 2799, 2809, 2816, 2819, 2688, 2824, + 378, -5912, -5912, -5912, -5912, 3099, -5912, -5912, -5912, -5912, + -5912, -5912, 3188, 3190,140965,140965, 878, 894, 240, 269, + -5912, -5912, -5912, 3043, -5912, -5912, 3045, 2853,108520, -5912, + -5912,108520, -5912,119881, -5912, -5912, 2448, 2638, 335, -5912, + 1813, 2782, 2041, 2771, 1863, 1337, -5912, 601,108520, 271, + 2823,103651, 4265, 2790, 2791, 2135, 2956, 418, 3110, 3162, + 6806, 378,104192, -5912, -5912, -5912, -5912,108520,108520, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 2849, 1634, + -5912, -5912, 2817, 3167, 3040, 7585, 1357, 3153, 3018, 1595, + 8460, 3066, 186, 3205, 14931, 1618, 3206, 2044, 2051,120422, + 131242, 3164, 3208, 5257, 1789, 938, 3078, 1425, 3153, 3196, + 3026, 1595, 3212, 4487,108520, 2865, -5912, 3136, 3250, 129, + -5912, 246, -5912, 39947, 51188, 71688, -5912, 2135, 2150, -5912, + -5912,139530, -5912, 2934, 3088, 885, 79832, 2878,108520,108520, + -5912, 86336, 79832, -5912, 3096, 69455, 79832, -5912, 79832, -5912, + -5912, 3209, 86336,108520,108520, -5912,108520, -5912, -5912, 2880, + -5912, -5912, -5912, -5912, 2404,108520, 3308, 86336, 3111, 187, + 1759, 3344,108520, 3114, 1759, 2924,120963, -5912, -5912, 1759, + -5912, -5912,108520,108520, 2889, 1891, 3103, 3221, 1759, 3120, + 3343, 3348, 3127, 2974, 3130, 2599, 3311, 3104, 947, 201, + 2067, 1759, 2953,121504,122045,108520, 2957,108520, 2877, 79832, + 2989, 79832, 79832,108520, 3244,108520, -5912, 3093,104733, -5912, + 2913, 2651, -5912, -5912, -5912, -5912, -5912, 1708, -5912, -5912, + -5912, -5912, -5912, -5912, 3266, -5912, 205, 3267, 2925, 3268, + 1786, -5912, 2977, -5912, 2977, 2977, 2928, 2928, 3115, 2929, + 3275, -5912, -5912, -5912, 1374, 2977, 2928, -5912, 87420, -5912, + 1701, 2010, -5912, 268, -5912, 3394, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, 2935, -5912, 1247, -5912, 2253, -5912, + -5912, -5912, -5912, 2971, -5912, 3280, 291, -5912, 3283, -5912, + 2937,122586, -5912,123127,123668, 3285, 344, -5912,143815, 3289, + 291, 3290, 2937, 3291, 291, 3293, 879, 3294, -5912, 1370, + 3282, 3297, 268, 3300, 2213, 2937, -5912, 3304, 392, -5912, + 3306, 398, -5912, 3309, 3177, -5912, 10828, 14804, -5912, 16292, + 2132, -5912, -5912, -5912, -5912, -5912, -5912, 51188, 941, 3062, + -5912, -5912, 2212, 1270, 1823, -5912, 99864, 1823, 99864, 185, + 1823, 99864, 1823, 99864, 185, 1823, 99864, 99864, 99864, 1823, + -5912, -5912, 327, 311, -5912, -5912, -5912, -5912, -5912, 99864, + 2968,108520,108520, -5912, -5912, -5912, 93913,143815, 94454, -5912, + 108520, -5912, 154, 99864, -5912, 99864, -5912, 1519, -5912, -5912, + 496, 86336, 3429,143815, 2877, 2258, -5912,108520,108520, -5912, + -5912, -5912, 3235,108520, 3302, 3303, 93913,143815, -5912,124209, + -5912,147140, 3187, 2975, -5912, -5912, -5912, -5912, 2273, 3467, + 231, 3468, 51188, 2978, 231, 231, 2980, 3312, -5912, -5912, + -5912, 305, 2981, 2983, -5912, 244, 244, -5912, 2984, 2985, + -5912, 254, 2986, 2988, 3480, 275, 2990, 2991, 2992, 1374, + 231, 2993, 51188, -5912, 2995, 244, 2996, 2997, 2998, 3490, + 3000, -5912, 3492, 3002, 287, 302, 3003, 3006, -5912, 2984, + -5912, 298, 3009, 3010, 3021, 3022, 3024, 3025, 3031, 3032, + 51188, 51188, 51188, -5912, 43869, 2135, 1519, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, 306,138077, -5912, 3063, -5912, + -5912, 3227, -5912, -5912, 51188, -5912, -5912, 142, -5912, 316, + -5912, -5912, 2135, -5912, -5912, 532, -5912, -5912, -5912, -5912, + -5912, 3316, 3034, 2378, 2378, 276, -5912, 96077, 96077, -5912, + -5912, 358, 3035, -5912, 2367, -5912, -5912, -5912, -5912, -5912, + -5912,146665, 3499, -5912, 364, 1519, 246, 2133, 3436,138572, + 139051, 3324, 3324, 3314, -5912, -5912,108520, -5912, -5912, 2135, + 183, 3325, 2281, -5912, 2389, 19273, 2282, 2597,108520,108520, + 3507, -5912, -5912, 2288, -5912, 3047, -5912, 2599, -5912, -5912, + 1598, 1598, 51188, 1598, 293, 1828, 47247, 51751, 3381, 3269, + 1629, 1579, 3382, -5912, 3273, 1611, 1849,102028,108520,124750, + 3181, 51188, -5912, 2638, 3064, 2142, -5912, 88503,136105,136105, + 3345, -5912, -5912, 962, 1475, 3192, 3307, 2840, 827, 1933, + 1933, -5912, -5912, 3056, -5912, 3443, 96077, 3125,140965, -5912, + -5912,108520, -5912, -5912,105274, -5912, -5912, -5912, 499, 3065, + -5912, 3075,108520, 3620, 1933, 1933, -5912, -5912, 3077, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912,136643,108520, -5912, + 3067, 3082, 3074, 3083, -5912, 24112, -5912, 3511, 3168, 3170, + 3226, 72231, -5912, 3173, 3139, 3175, 3230, 77664, 3091, 3179, + 3180, 3236, 3360, -5912, -5912, 3183, 3184,131783, -5912, -5912, + 943, -5912, -5912, -5912, 943, -5912, 3112, -5912, 1516, 1092, + 1465, 3185, 438, 1069, 3510, -5912, 1410, -5912, -5912, 3242, + -5912, 7183,108520, 3449, 7507, 3319, 378, 3240, -5912, -5912, + -5912, 3376, 3193,108520, 3195, 3335, 378, 341,132324, -5912, + -5912,108520, -5912, -5912, -5912, -5912, 6353, 3485, 42767, -5912, + 2037, 3199, 3182, 3213,108520, 89044, 2066, 3317, 3329, 2127, + 2130, 647, 3270,108520, 1809, 3347,108520, 3126, 3211, 3215, + 3440, 3135, 1362, 3544, 3137, -5912, -5912, -5912, 3509, 3336, + 3442, 3486, 7832, 3203, 3207, 83626, -5912, 3229, 94, 70013, + 108520,108520, 3232, 3233,132865, 6353, 3517, 3246, 3248, 3237, + 3238, 54, 3540, 2035, 3241, -5912, -5912, -5912, 2035, 3243, + 3245,133406, 6353, 3527,108520, 3247, 3249,108520, 87420, 378, + -5912, 3599, 378, 378, 2179, 3601, 3251, 416, 3401, 1284, + 1759, 3137, 2827, -5912, 3252, 3253, 958, -5912, 3373,108520, + 3254, 3255, 1824, 3340, 1519, -5912, 3346, -5912, 3259, 3350, + 3262, 99, -5912, -5912, 1402, 3272,102028, 3374, 3375, 1809, + 388, 1729, 3137, -5912, 3264, 3278, 3135, 3135,108520,108520, + 108520,108520,108520, 250, 3635, 3639, 3279, 251, 1325, 3194, + -5912, 2035,142390, 3286, -5912, 2035,108520, 262, 1984, 3137, + 1836, -5912, 2065, -5912, -5912, -5912, 1583, -5912, 51188, 51188, + 51188, 3197, -5912, 2746, 19273, 104, -5912, 323, 15585, 3191, + -5912, -5912, -5912, -5912,108520,146190, -5912, -5912, -5912, -5912, + -5912, -5912, -5912,108520, -5912,108520, 3478, 86336, 3484, 3421, + 3488, 3489, 378,108520,108520, 3491, 3493, 3494, 86336, 3498, + 3500, 3502, 3424, 3310, 213, 3287, 3220, 3685, 3572,108520, + 77664, -5912, 943, -5912, 86336, 3444, 3574, -5912,108520, 3460, + 116, -5912, 3612, 3295, -5912, -5912, 115,108520, 314, 3277, + -5912, -5912, 3581,143815, 1336, 3582, 1519, 3288, 3585, 3455, + 1519,143815, 3503,108520,108520,108520,108520, 285, -5912,142390, + 3471, -5912,108520, 3473, 2827, 3475, 3709, 1000, 2404,125291, + 3583,125832, 3256,108520, 3257, 3257, 3711, 86336, 384, 3525, + -5912, -5912, 3258, 2840, -5912, 2913, -5912, -5912, 2337, -5912, + 3390, -5912, 79832, -5912, -5912, 79832, -5912, -5912, 86336,108520, + 3261, -5912, 3263, -5912, -5912, 51188, -5912, -5912, -5912, 2840, + -5912, 86336, 2977, 2977, -5912, -5912, 3716, 3351, 3352, 2840, + -5912, 2840, -5912, 86336, -5912, 3260, 3274, 2840, 3354, -5912, + 3355, 2840, -5912, 2301, -5912, -5912, 79832, 79832, -5912,143815, + 143815, 3603, 392, 3606, 3327, 3608, 3328, 70013, 70013, -5912, + 400, 79832, -5912,143815, 79832, -5912,108520, -5912,108520, -5912, + -5912, -5912, -5912, 86336, 86336, -5912,143815,142390, 3617,108520, + 108520, -5912,108520,108520, -5912,108520,108520, -5912, 15495, 2190, + -5912, 14804, -5912, 2316, 3324, -5912, 1785,126373, 1893, 1270, + -5912, 99864, -5912, 99864, 185, -5912, -5912, 99864, -5912, 99864, + 185, -5912, 99864, -5912, -5912, -5912, 99864,108520, 3828, 3276, + -5912, 532, -5912,108520, 2326, -5912, -5912, 2334, 1926,108520, + 108520, 973, 79832,108520, 3504, 79832, 79832,108520,108520,108520, + 108520,108520, 3359, 3035, 1570, -5912, 1543, 658,102028, 3505, + -5912, -5912, -5912, -5912, -5912, 2350, 2108, 643,108520, 927, + -5912, -5912, -5912, -5912, 94454, 92290, 3611, 368,108520, -5912, + -5912, 7275, 51188, 46121, -5912, -5912, 19273, 3332, 51188, 51188, + 3298, 2840, 2840, -5912, 951, 51188, 51188, 51188, 2840, 2840, + 51188, 3670, 51188, 70013, 51188, 55129, 41075, 51188, 51188, 44432, + -5912, 51188, 3526, 56255, 51188, 2133, 3531, 51188, 2133, 3670, + 3773, 3773, 1622, 1746, 7858, 3292, 2135, -5912, 2840, 821, + 353, 86336, 51188, 51188, 51188, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 51188, + -5912, 77664, -5912, -5912, -5912, -5912, -5912, -5912, 3379, -5912, + -5912, -5912, -5912, -5912, -5912, 5705, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912,108520, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, 44995, -5912, -5912, -5912, -5912, 3299, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, 2402, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, 45558, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + 3301, -5912, -5912, 51188, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, 3378, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, 956, 51188, 51188, 51188, + 51188, 51188, 51188, 51188, 51188, 51188, -5912, 51188, 356, -5912, + -5912, -5912, 3613, 3625, 85, 642, 94995, 46684, 3627, -5912, + 39947, -5912, 227, 99864, -5912, -5912, 2135, 3627, -5912, -5912, + -5912, -5912, -5912, 499, 3313, -5912, 3315, -5912, -5912, -5912, + -5912, -5912,108520, 3499, -5912, -5912, 3385, -5912, -5912, -5912, + -5912, 326, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + 3318, -5912, -5912, -5912, -5912, 3318, -5912, -5912, 3324, 3305, + 3615, 3618, 879,136643,108520, 2752, 51188, 3379, 283,108520, + 51188, 3299, 2402, 51188, 3301, 51188, 3378, -5912, 51188, -5912, + 2354, 2230,108520,108520, -5912, 3587, -5912, 3320, -5912, 15679, + 3587, -5912, -5912, 55692, 3433, 3588, 3524, -5912, -5912, -5912, + 3321, 19273, 51188, 51188, -5912, 2484, 19273, 2507, -5912, -5912, + -5912, -5912, -5912, -5912, 1411, -5912,108520, 726, 3381, 1579, + 3377, 1485, 3774,108520, -5912, 65028, 2360, 2289, -5912, 2638, + -5912, -5912, 37470, -5912, 39402, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, 3326, -5912, -5912, -5912, -5912, -5912, + 378, 3330, 3854, -5912,140965, -5912, -5912, -5912, 3828, -5912, + 2704, -5912, 2704, 3880, -5912, 99864, -5912, -5912, -5912, -5912, + 371, -5912, -5912, 14804, 14804, -5912, -5912,143815,108520,108520, + 3529, -5912, 3765, -5912, 87420, -5912, 3331, -5912, 86878, 82542, + -5912, -5912, 952, -5912, 1141,143815, -5912,108520,108520, -5912, + 77664,143815,108520,108520, -5912,143815,108520,108520, -5912, -5912, + -5912, -5912, -5912,140009, 1506, 92290, 3466, 90667, -5912, -5912, + 3334,108520, 3389, 3605, 3610, 44, -5912, -5912,126914, -5912, + 3559,143815,108520,108520, 51188, 3561,108520,108520, -5912, 324, + 3423, 3426, -5912,108520, 3427, 79832, 3349, 86336, 79832, 70571, + 79832, 79832, 3674, 86336,108520,108520, 861,102028, 266, 1986, + 3137, 3570, -5912, 921, -5912,143815, -5912,108520, 3565, -5912, + -5912, -5912,105815, 3798, 3469, -5912, -5912, -5912,133947, -5912, + -5912, 3567, -5912, 2361, -5912,143815,143815,108520, 8028,127455, + 984, 3584, -5912, -5912, 86336, -5912,108520,106356,108520,108520, + 3622,108520, 98782,127996,128537, 1719, 1761, 3623,108520, 99323, + 3624, -5912, 3497,108520, -5912, -5912, 78206,143815,108520, 1137, + 77664, -5912, -5912,108520, -5912, 893, -5912,108520, 5028, 3573, + 3445, 3456,108520, 346, 1994, 3137, 3733,108520,108520, 3362, + 2371,143815,108520, 77664, -5912, 3580, 1474,143815,108520,105815, + -5912, 3589,102028,102028,143815,108520,102028, -5912,108520,130701, + -5912,143815, 357, -5912,143815,108520,105815, -5912, 3590, 3530, + 143815,108520, 17708, -5912, -5912, -5912, 378, -5912, -5912, -5912, + -5912, -5912,108520,108520, 378,108520,108520, 378, 1778, -5912, + 143815,108520, -5912, -5912, -5912, 3506,143815,108520,108520, 408, + 108520, -5912,108520,143815, 3277,108520,108520, -5912,108520, 5805, + 108520,108520,108520,108520,108520,108520,143815,108520, -5912, -5912, + 1577, 1597, 1762, 1985, 1593,108520, 3675,108520,129078,143815, + 108520,108520, 1519,108520, 77664, 1774, -5912, -5912, 3508, -5912, + 143815, 357, -5912, 8582,108520,108520,108520, 3458, 3459, 264, + 3550, -5912, -5912, -5912, 734, 734, 3591, -5912, 51188, 51188, + 47810, 3392, -5912, -5912, 51188, 2934, -5912, -5912, -5912, 1020, + 3850, 1020,129619, 1020, 1020, 3673, 3461, 3462, 1020, 1020, + 1020, 3668, 1020, 1020, 1020,108520, 3571, -5912, -5912, 3571, + 204, 51188, 86336,108520, -5912, 2375, -5912, 3408, -5912, -5912, + 77664,108520, 292, 786, 3743, 3626, 89585, 3102, 3730,108520, + 3457,108520, 3867, 3518,102028, 2889, -5912, 3102,108520, -5912, + 1699, 92290, -5912, -5912, -5912, -5912, -5912, -5912, -5912,108520, + -5912, -5912, 3738,108520, 59005, 3586, -5912, 1519, 2889, 2889, + 2889, 2889, 3411, 2889,108520, 3541, 3759, 3102, 3416, 3766, + -5912, 2827, 3769, 3771,108520, 3645, 89585, 3495, 3470, 3656, + 3890, 2404, 1519, 3659, 3646, -5912, 72231, -5912, 2889, 3903, + 43318, 6315, 6498, 3647, 3710, -5912, -5912, 3660, 830,108520, + 104733, -5912, 3447, 3753, 3754, 3776, -5912, 205, -5912, 3907, + 1853, 3778, 51188, 2376, 3450, 268, -5912, -5912, 3452, 3274, + 3476, 3477, 3451, 3453, -5912, 2840, 63392, 3464, 1322, 3702, + 3465, -5912, 291, -5912, 2937, -5912,108520, -5912,108520,108520, + 108520,108520, 344, -5912, -5912, 291, 2937, 291, 879, -5912, + 3731, 268, 2937, 3596, 3790, 392, -5912, 398, -5912, 3676, + 879, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 3690, 2404, + 2337, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, 99864, 2704, -5912, 2380, -5912,108520, -5912, 3770, 3772, + 3775, 3777, 3779, 3472, 3479, 3516,108520, 3481, 3472, 378, + 3481, 3481, 3472, 3035, 3035, 3472, 3479,142865, 3942, 3799, + -5912, 3564, 3487, 3810, 877, -5912, 910, 113, 3734, -5912, + -5912, -5912, -5912, 86336, -5912,143815, 3532, 2877, 2877, 168, + 3705, 3496,142865, 3928, 879, -5912, 79832,108520, 86336, 79832, + 3712, 79832, 79832, 86336,108520,108520, 2381, -5912, 2200, -5912, + 2215, 51188, 458, -5912, 16656, 2390, 51188, 3501, 3512, -5912, + -5912, -5912, -5912, -5912, -5912, 3513, 3819, -5912, -5912, 2419, + 2423, 2434, 3514, 3515, 5824, 6591, 3519, 16905, 3522, 3520, + 3521, 3528, 55129, 55129, 43869, 1127, -5912, 55129, 3535, 3696, + 2435, 15833, 3536, 3539, 17081, 48373, 51188, 48373, 48373, 17182, + 3523, 3545, 2445, 77664, 3689, 17211, 2449, -5912, 51188, 77664, + 6968, 51188, -5912, 51188, 3546, -5912, -5912, 3081, 3081, 3081, + 3670, -5912, 3533, -5912, 55129, 55129, -5912, 2506, 43869, -5912, + -5912, 3823, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 2581, + -5912, -5912, -5912, 3729, 4373, 70013, 3597, 51188, 289, 51188, + 3299, 51188, 3595, 3081, 3081, 3081, 431, 431, 313, 313, + 313, 2187, 642, -5912, -5912, -5912, 3548, 3551, 3552, 3706, + 3553, 51188, -5912, 2394, 2413,108520, 8607, 10275, 10757, -5912, + -5912, -5912, 58455, 3547, 104, -5912, -5912, -5912, 3547, 551, + 3880, 499, -5912, 1583, 2840, 821,139530, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912,108520, 19273, -5912, -5912, 3756, + 3554, -5912, -5912, 51188, -5912, -5912, 2320, 3537, 716, 141, + 1933, 1933, 2484, 1079, -5912, -5912, 3568, -5912, 51188, -5912, + 2573, 2596, -5912, -5912, -5912, -5912, 3035, -5912, 3762, -5912, + -5912, -5912, 58455, 3563, 3609, 1229, 62842, 3740, -5912,108520, + -5912,108520, 265, -5912, 3543, -5912, -5912, -5912, -5912, 2026, + -5912, -5912, -5912, -5912, -5912, -5912, 3555, -5912, 3538, -5912, + 3566, -5912, -5912, -5912, -5912, 255, 3556, 3542, 3557, 2005, + -5912, -5912, -5912, -5912, 82542, 2253, -5912, 86878, -5912, 86878, + -5912, 2253, 3956, -5912, 82542, 2056, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912,143815, + 143815, 3744,108520, 3782, 3780, 51188, 325,108520, 3560, 3562, + 1011, 3827,108520, -5912, 3905, 879, -5912, -5912, 3648, -5912, + 19273, -5912, -5912, -5912, -5912, -5912,143815,108520, -5912,147140, + -5912, -5912, 86336, -5912, -5912,108520,108520, -5912, -5912, -5912, + 86336, -5912, -5912, -5912,108520, 933, 3649, 3650,108520, -5912, + 816, 3373, 9235,108520,108520,108520, 3857, -5912, -5912, -5912, + -5912, 3792, -5912, 3914, -5912, 82542, -5912, 2937, 1582, 3658, + 3137, 3803, -5912, 3920, 3990, -5912, 3708, 1339, -5912, -5912, + 3714, -5912, -5912, -5912, -5912, 3938, 879, 3939, 879,108520, + 108520,108520,108520, 3732, -5912, -5912, -5912, -5912, 3735, 3861, + -5912, 77664, 77664, 77664, 2461, -5912, -5912, 1519, -5912, -5912, + -5912, -5912, -5912, -5912, 3895, -5912, 2464, -5912, 1923, -5912, + -5912, -5912, -5912, -5912, 3941,143815,108520, 9492,108520,108520, + 108520, 3814, 2105, 1510, 86336, -5912, 84168, -5912, -5912, 2471, + -5912, 3616,108520, 3687,143815, 3665, -5912, -5912, -5912, 3949, + 3607, 3607, -5912, -5912, 3607, -5912, -5912, 3872, 3802, -5912, + 1087, 3804,143815, 3677, -5912, -5912, -5912, -5912, -5912, 3953, + 3699, -5912, -5912, 3701, 1997, 3137, 2827, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, 3728, -5912, -5912, -5912, + -5912, 1777, 1777, -5912, -5912, -5912, 1777, 1606, 441, 2017, + 3137, -5912, 1912, 1653, 3704, -5912, 3707, -5912, -5912, -5912, + 3874, 3875, 3877, 3718, 3719, 3763, 3720, 3721, 3764, -5912, + 3724, 3768, 3725, 3784, 3726, 3998, 879, 86336, 3876, 1519, + 3794, 3988, 879, -5912, 3736, -5912, 3737, -5912, 2475, 4098, + -5912,108520, -5912, 457, 2119, 3137, -5912, 3739, -5912,143815, + 108520, -5912, -5912, -5912, 51188, 3653, 3666, 3669, 19273, 19273, + 51188, -5912, -5912, 19273, 3672, -5912, -5912, -5912, -5912, 86336, + -5912,108520, 3936, -5912, -5912, 1020,108520,108520, -5912, -5912, + -5912,108520, -5912, -5912, -5912, 3951, -5912, 281, 281, -5912, + -5912, 3986, 8188, 3678, 286, -5912, 77664, 66664, 2275, 495, + 1759, -5912,147140,108520,147140, -5912, 786, 3883,108520,108520, + 108520, 3679, 3680, -5912, -5912, -5912, -5912,143815, 242,143815, + 2840, -5912, -5912, 3749, -5912,108520, 2404, 2632, 4006, -5912, + 3607, -5912, 4127, 3348, 1336, 2329, 362, 2974, 4064, 2599, + 51188, 308, -5912, -5912, -5912, -5912, 2135,108520, 3470, -5912, + -5912, -5912, -5912, 1519, -5912, 3681, 3686, -5912,108520, 4011, + 108520,108520,108520, 99864, 2108, 3688,108520, 3691, 86336,108520, + 2444, 3135, 4150, 4035, 2108, 3495, 3781, 4040,102028, 2482, + -5912, 3715, -5912, 830, -5912, 2486, 234, -5912, 1519,147140, + 83084, 4029, -5912, 561, 6498, -5912, -5912, 561, 1124,108520, + -5912, -5912, -5912, -5912, 3922, 1185, -5912, 4015, -5912,108520, + -5912, -5912, 62292, -5912, 86336, 3717, -5912, 2487, -5912, 2491, + -5912, -5912, -5912, 2840, -5912, -5912, 1841, 1841, 3713, -5912, + 63942, -5912, 3722, -5912, 2403, -5912, -5912, -5912, 392, 3767, + 879, 3783, 879, -5912, -5912, -5912, -5912,108520, -5912,108520, + 142390, -5912, -5912,108520, -5912, 4052, 4039, -5912, -5912, -5912, + -5912, 3848, 3849, 3852, 3853, 3858,108520, 3472, -5912, 3723, + 143815, 1899, -5912, -5912, 3926, -5912, -5912,102028, 3847, -5912, + -5912, -5912, -5912, 4067, 4073, -5912, -5912, -5912, 1010, -5912, + 108520,108520,143815, 93913, 389,143815, -5912, 4007, 4010, 4012, + 4013, 378, 4014, 4018, 4020, 4021, 4022, -5912, -5912, -5912, + 3748, 17312, 51188, -5912, 4085, 86336, -5912, 8525, -5912, -5912, + -5912, 51188, -5912, -5912, -5912, -5912, -5912, -5912, 2417, 51188, + -5912, 51188, -5912, -5912, 41639, 4232, 4232, 3746, 86336, 55129, + 55129, 55129, 55129, 1573, 2996, 55129, 55129, 55129, 55129, 55129, + 55129, 55129, 55129, 55129, 55129, 530, -5912, 3952, 51188, 51188, + 48936, -5912, -5912, 86336, 3751, 3523, 3752, 3755, 51188, -5912, + -5912, 2505, 56805, 3757, 77664, -5912, 51188, 16574, 2511, 3806, + 17447, 2135, 8718, 1519, 51188, 1380, 1680, 51188, 2530, 51188, + 4075, -5912, -5912, -5912, -5912, -5912, -5912, 3983, -5912, 51188, + 3761, 4857, 55129, 55129, 4954, -5912, 5329, 51188, 43869, -5912, + 3591, 3807, 65571, -5912, 42203, 3786, 1306, 1306, 1306, 1306, + -5912,108520,108520,108520, 59555, 4089, 3760, 57905,106897, 3787, + 2699, -5912,106897,107438,106897, 3788, 2135, 51188, 4081, 3785, + 4081, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, 3789, -5912, 3793, -5912, + -5912, 246, 3795, -5912, -5912, 255, -5912, -5912, 2108, -5912, + 3791, -5912, 3537, 307, -5912, -5912, -5912, 1205, -5912, 3855, + -5912, -5912, -5912, 3787, 49499, 3917, -5912, -5912, -5912, 3824, + 2534, -5912, -5912, 4181, 3917, -5912, -5912, 2545, 65028, 3563, + 51188, 2135, 2840, 3797, -5912, 2704, 551, -5912, -5912, -5912, + -5912, -5912, 2552, 2123, -5912, -5912, 82542, -5912, 3856, 2937, + 2937, 1585, 3472, 4104, 1585, 9113, -5912, -5912, 60105,108520, + 108520, -5912,108520, 2560, 318,108520, -5912,108520, -5912, -5912, + -5912, 4236, 3844, 3845, 4068, -5912, 2771, -5912, -5912,143815, + 108520, -5912, -5912, -5912, 461, 2159, 3137, -5912, 3878, -5912, + -5912, 4086,108520, -5912, 4237, 3892,108520, 4144,108520,107979, + -5912, 3883, 318, 3910, 4125, 1878, 3135, 2167, 2588, -5912, + 1548, -5912, -5912, 3879, -5912,108520, -5912,108520, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, 3940, -5912, -5912, -5912, -5912, + 78206, -5912, -5912,108520, -5912, 77664, 66664, 77664,108520, -5912, + 1617, 467, 2333, 3137, -5912, 3893, -5912, 4147, 3894, 3896, + 3954, 1309, 277, 3897, 3899, 3957, 3817, 3821, 3825, -5912, + 77664, 67223, 3979,108520, 2937, 3830, 3865,108520, 408, 1519, + -5912, -5912, 1519, 2937, 1519,108520,108520,108520,108520, 408, + -5912, -5912, -5912, 4264, 3924,108520,108520,108520,108520, -5912, + 3886, -5912, -5912, -5912,108520,108520, 4163, 1048, 2323,143815, + 108520,108520,143815,108520,108520,108520,108520,108520,108520,108520, + 4047, -5912, 4255, 4180, 2466, 4223, 3912,108520, -5912,108520, + 1519, -5912, 3373,108520,108520,108520,108520, -5912, -5912, -5912, + -5912, -5912, 3591, -5912, 3839, 4120, 1020, -5912, 4121, 4122, + 4123, 1020, -5912, -5912, 1759, -5912, 456,108520, -5912, 2548, + 108520, -5912, -5912, -5912, 3791, 1933, 1933, -5912, -5912, -5912, + -5912, -5912, -5912, 3846,108520,108520, 55129, -5912, 2047, 1311, + 1382, -5912, 4124,108520, 3277, -5912, -5912, -5912, 260,108520, + -5912, -5912, -5912, -5912, 3851, -5912, 912, 3688, -5912, 4139, + 89585, 2937,143815,143815, 2937, -5912, 86336, 3862, 3470, -5912, + 295, 3931,143815, 1336,130160, 3288, 3885, 4063, 9239, 58455, + 59005, 1777, -5912, 3870, 3860, -5912, -5912,108520, 3883,142390, + 2564, 2827, 4314, 1150, 2385, 3532, 91208, 4050, 3688, 4139, + -5912, 3135, 4083, 4071, -5912, 2108,108520, 3532, 3470, 1519, + 108520, 3389, -5912, 2632, 66664, 2157, -5912, 82542, 51188, 51188, + -5912, 3869, -5912, 3873, 6498, -5912, 3948, 3881, 4329, 51188, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 3960, 3887, + 108520,108520, 830,108520, 4364, -5912, -5912, 3884, 3778, -5912, + 3778, -5912, 3889, -5912, -5912, -5912, 2083,136643, 63942, 63942, + 63942, 63942, 63942, -5912, -5912,108520, -5912,108520, -5912, 879, + -5912, 4023, 879,108520, 2108,108520,108520,108520,108520,108520, + 3472, 378, -5912, 4209,142865, 3799, -5912, 2567,108520, -5912, + -5912, -5912, 4279, -5912, -5912, 368, 4221, 879, -5912, 1094, + 1094, 1094, 1094, 4179, 1094, 1094, 1094, 1094, 1094, -5912, + 51188, 19273, -5912, 3900, -5912, 19273, 3901, 9364, 17934, -5912, + 2584, 51188, -5912, 974, 974, 974, 2421, 4228, -5912, 2690, + 974, 974, 974, 437, 437, 223, 223, 223, 4232, 530, + 18468, 18550, 18633, 3904, -5912, -5912, -5912, 3523, -5912, 52314, + 1106, 4343, 56255, -5912, -5912, -5912, 3950, 3955, 3908, -5912, + 51188, 52877, 3911, 87420, 4107, -5912, 1403, 51188, 51188, 1434, + -5912, 7537, 51188, -5912, 1434, 372, 51188, 1973, 2256, 51188, + 51188, 5735, 9788, 3909, 51188,134488, -5912, -5912, -5912, 2617, + 51188,108520,108520,108520,108520, -5912, -5912, -5912,106897,107438, + 106897, 3913, 57355, 61748, 2699, 3915,108520, -5912, -5912, 3918, + 58455, 4184, 4118, -5912, 58455, 4118, 1859, 4118, 4193, 4016, + 66114, -5912, -5912, 3919, -5912, 4129, -5912, 2037, 19273, 4360, + 4238, 1519, 4238, 551, 338, 1519, -5912, 3927, 70013, -5912, + -5912, -5912, -5912, 4017, -5912, 4149, 19273, 46684, -5912, 2108, + 2806,108520, 2135, 119, -5912, 3943,108520, -5912, 3917, 19273, + -5912, 14804, -5912, -5912, -5912, -5912, 4003, 2623, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, 4019, 92290, 4257, -5912, 51188, + 2637, -5912, 3975, 4356, 257, 2640, 2641, 318, -5912, 4239, + -5912, 1808, 4235, 425, -5912, 879, -5912, 86336,108520,108520, + 108520, 3091, -5912, -5912,108520,108520,108520,108520, -5912, -5912, + 143815,108520, -5912,108520, -5912, -5912, -5912, -5912, 408, 2047, + 4244, 4251, 4168, -5912, 378, -5912, 2047, 4171, 408,108520, + -5912, -5912, -5912, 2410, -5912, 86336, 879, 879, -5912, -5912, + -5912, -5912, -5912, 3961, -5912, 4391, 4048,108520,108520,108520, + 108520,108520,143815,108520,108520, 2840, 2840, 86336, 3959, -5912, + 2840, 2840, 3962, -5912,143815,108520,108520, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 4038, -5912, + 51188, 4382, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912,143815,108520, 4041, -5912, 4042, -5912, 915, + -5912, -5912,108520,108520,108520,108520, 4303, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 4301,108520, + -5912, -5912, 1519, 1519, 86336, 879, 879, -5912, -5912, -5912, + 4051, -5912, -5912, 3963, 4242, 1020, -5912, 1020, 1020, 1020, + -5912, 3966, -5912, 1759, 4340, -5912, 318, 1839, 4292, -5912, + 51188, -5912, 940, 2421, -5912, 4349, 4431, -5912, -5912, -5912, + -5912, 3277, 2404, 4032, -5912, -5912, 79832, 422, -5912, 4274, + 292, 77664, 4194, 89585, 1912, 1858, 3980, 4103, -5912, 2937, + 2937, 4043,108520, 4442, -5912, -5912, -5912, -5912, -5912, -5912, + 143815, 3665, -5912, 4214, 1268, 4315,108520, 59005, -5912, 3787, + -5912, -5912, -5912, 1519, -5912, -5912, 4116, 3470, -5912, 4334, + 108520, 4212, 89585, 3532, -5912, 2644, -5912, -5912, -5912, 4036, + 4438, 3495, -5912, 1912, 4050, -5912, -5912, 4420, 4101, 4053, + 4471, -5912, 4101, 4341, 4230, 4026, -5912, 3715, -5912,108520, + -5912, 19273, 19273, 1519, 87962, 561, 86336, 4348, -5912, 19273, + 108520, 221, 4028, 4185, -5912, 4324,108520, -5912, 879, 2645, + -5912, -5912, -5912, 4033, 2243, 2243, -5912, -5912, -5912, 879, + 879, -5912,108520, -5912, 3472, 3472, 3472, 3472, 3472, -5912, + 4233, -5912, -5912, -5912, 4319, -5912, 879,142865, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, 1094, -5912, -5912, -5912, -5912, + -5912, 19273, -5912, -5912, -5912, 51188, -5912, 9850, 55129, 4366, + -5912, 51188, 51188, 51188, -5912, 4044, 2649, 2652, -5912, -5912, + 1106, -5912, 4343, -5912, -5912, -5912, 10166, 4094, 19273, 4155, + 4045, 4054, 1434, 1434, 7537, 1434, 51188, 51188, 1434, 1434, + 51188, -5912, -5912, 11556, 4246, -5912, -5912, 11702, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, 78748, 4049, 3689,106897, 4058, + 108520, 2699, 58455, -5912, -5912, 2152, -5912, 58455, 4335, -5912, + 58455, 79832, -5912,108520, 4060,108520, -5912, 1626, 51188, 4105, + -5912, 4105, -5912, 1933, -5912, -5912, -5912, -5912, -5912, 4196, + 4061, -5912, 99864, 443, -5912, 1229, -5912, -5912, 4473, 60105, + 4427, 51188, -5912, -5912, -5912, -5912, -5912,142865, 4283,142865, + 318, 12196, 4239, 60105, 71129,108520, -5912,108520, -5912, 4240, + 4239, 4074, 3277, -5912, -5912, -5912, -5912, -5912, -5912, 4076, + -5912, -5912, -5912, -5912, 4160, -5912, -5912, 71, 3505, -5912, + 2275, -5912, 4541, 4426, 4428, -5912, -5912, -5912, -5912, -5912, + -5912, 4255, -5912, -5912, 66664,143815,108520, -5912, 4167, -5912, + -5912, -5912, -5912, -5912, -5912, 61205, 70013, -5912, 1309, 4087, + 4088, 277, -5912, -5912, -5912,108520, 12533, 4090, 719, 3505, + 108520,108520, 4092, 4095, 4096, 1892, 88, 2048, 3472, 4415, + 108520, -5912, -5912, -5912, 4255, -5912, -5912,108520, -5912, 1020, + -5912, -5912, -5912, -5912, 77664, -5912, 2325, 3966, 1519, 79832, + 4549, 4549, 12852, 4317, -5912, -5912, 417, 4032, 4350, 4394, + -5912, 4099,108520, 260, 4100, 2655, -5912,108520, 4102, 4229, + 1673, 1673,108520,108520,108520, 2656, 2108, 2937, 3865, 1336, + 4446, 89585, 4491, 3883, 365, -5912,108520, 4567, 99864, 2108, + 3688,108520, 4110, 941, -5912, 91208, 4321, 2275,108520, 2444, + 4050, 3495, 1483,108520, -5912, 1571, -5912, 2108, -5912,108520, + 102028, 60105, 4439, -5912, 86878, -5912, 2659, -5912, -5912, -5912, + 4187, 28413, 3547, 4231, 4234, 4117, 2043, 4449,108520, 765, + -5912, 4132, -5912, -5912, -5912, -5912, -5912, -5912, -5912,108520, + -5912, 389, -5912, 18711, -5912, 3023, 55129, 19273, 19273, 19273, + 51188, -5912, 51188, -5912, -5912, -5912, -5912, 901, -5912, -5912, + 1434, 1434, 1434, -5912, 4562, 3591, -5912, -5912, 2663, 4585, + 54566, 4543, -5912,108520, 2667, -5912, 51188, 4130, -5912, -5912, + 58455, 2152, 4133, 2668,108520, 2674, 86336, 53440, 19273,108520, + -5912, -5912, -5912, -5912, 1838, 4514, -5912, -5912, -5912, 4189, + 108520, 2679, -5912, 1404, 19273, 1899, 1585, 403, 4356, 3277, + -5912, 4135, -5912, -5912, 3135, 1642,108520, 3277,108520, 4032, + -5912,108520, 4222, -5912, 4444, -5912, -5912, 4201, -5912, 1045, + 3505,108520, 86336, -5912, 179, 4475, -5912, 86336, 86336, -5912, + -5912, -5912, 51188, 4241, -5912, -5912, -5912, 51188, 51188,147615, + -5912, -5912,108520,108520,108520,108520,108520, -5912, 879, -5912, + -5912, 2682, -5912,137118, -5912, -5912, 3344, 1519, 3344, 215, + -5912, -5912, 3344, 3344, -5912, 3547, -5912, 4549, 391, -5912, + -5912, 4378, 4151, 51188, -5912, 1209, 4362, 4243, 4152, -5912, + 79832, 4645, -5912, 77664, 3688, 4139,108520, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 2683, + 3883, 4492, 3470, 4053, -5912,108520, 4200, -5912, 58455, 3883, + 2108, 2385, 3532, 4050, 3688, 4139, -5912, -5912, -5912, 4156, + 4071, 3495, 2444, 4298, -5912, 4300, -5912, 4590, 4376, 4594, + 3532, -5912, 3389, 2694,108520, -5912, -5912, 6498, 87962, 86336, + -5912, -5912, -5912, 4165, 4533, 4215, 4216, -5912, -5912, -5912, + 2043, -5912, 801, 4531, 4224, -5912, 4245,108520, -5912, -5912, + 498, 4663, 3883, 879, 51188, 3023, 2700, 2719, 4248, -5912, + 51188, 1330, 3788, 78748, 4177, -5912, 55129, 2723, -5912, 1338, + 108520, 2728, -5912, 19273,108520, -5912, -5912, 51188, -5912, 2735, + -5912, 4178, 617, 4182, 40511, 4183, -5912, -5912, -5912, -5912, + -5912, 19273, 4188, -5912, 4641, 4517, 4520,108520, -5912, 2108, + -5912, 3547, 60105, -5912, 4320, -5912, 4515, -5912, -5912, 4032, + 70013, 1642, 3537, 2404, 4032, 2738, -5912, -5912,108520, 4151, + 51188, -5912, 4287, -5912, -5912, 2742, 1660, 4365, 4365, 2753, + 2754, 13409,108520, 2760, 2761, -5912, 2769, 2840, 3479, 2048, + 3479, -5912, 3472, -5912, -5912, 77664, -5912,143340, -5912, -5912, + -5912, 1519, -5912, 1519, 4419,108520, 73317, 1519, 1519, -5912, + -5912, -5912, -5912, 4493, -5912, 2827, -5912, 13449, -5912, -5912, + -5912, 491, -5912, 4413, 4414,108520, -5912, 4202, -5912, 2773, + -5912, 1912, 4331, 3883, -5912, -5912,108520, 4665, 4666, -5912, + 1290,108520, 3787, -5912, 4053, 3532, -5912, 3495, 1912, 4050, + 2275, 60655, 4101, 2444, 4071, -5912, -5912, 4418, -5912, 4421, + -5912, 4210, 4509, -5912, 1873, 561, -5912, -5912, -5912, 382, + 4536, 4538, -5912, -5912, -5912, 3344, -5912, 138, 4217, 4561, + -5912, -5912, -5912, -5912, -5912,108520, -5912, -5912, 19273, -5912, + -5912, -5912, 3523, 50062, 50062, 50062, 4219, -5912, -5912,108520, + 2421, 4227, 54566, 77664, 2776, -5912, 84710, -5912, 2784, 2797, + -5912, 51188, 4218, 51188, -5912, 53440,108520, 4225, 4671, 4673, + 1122, -5912, -5912, -5912, 65028,142865, 4268, 4226, 3537, -5912, + 4350, -5912, -5912, 318, 3505, -5912, 19273,108520, 79832, 4674, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, 3505, 4310, -5912, + -5912,147615, -5912,108520, -5912, -5912, 2801, -5912, -5912, -5912, + 108520, 4028, -5912, 4028, -5912, -5912, -5912, 926, 4344, 300, + 300, 4610, -5912, 4302, -5912, -5912, 4249, -5912, 4729, 4370, + 108520, -5912, -5912, 1309, 2108, 89585, 3883, -5912, 941, 2444, + 4050, 3495, 51188, 2802, -5912, 4356, 257, -5912, 4071, 4101, + -5912, -5912, 60105, 4254, 3470, 4601, -5912, -5912, -5912, 2768, + 79832, 79832,108520, -5912, -5912, -5912, 51188, 260, -5912, 54003, + 4386, 817, 16324, 4593, -5912, 4593, 4593, -5912, 2812, 56255, + -5912, -5912, -5912,108520, 4457, 1063, 4716, 4416, 2813, 53440, + 2825, -5912, -5912, -5912,108520,108520,108520, 970, 403, 4260, + -5912, -5912, -5912, 4362, 318, -5912, 3505, -5912,108520, -5912, + 4261, -5912, -5912, -5912,143340, 4028, -5912, -5912, -5912, 4731, + -5912, 1428, -5912, -5912, -5912, -5912,108520, 3883, 3959, 4053, + -5912, -5912, 4071, 3495, 2444, 13526, -5912, 60655,108520,108520, + 4101, -5912, 2835, 60105, 4101, 4404, -5912, 2276, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, 4267, 4269, -5912, -5912, 13988, + 79832, 4726, -5912, -5912, -5912, -5912, -5912, 1397, -5912, -5912, + -5912, -5912, 3689, -5912, -5912, 55129, 4490, -5912, 1063, -5912, + 55129,108520, -5912, 4273, -5912, -5912, 2836, -5912, 1218, 1332, + 1950, -5912, -5912, 51188, 318, -5912, -5912, -5912, 51188, -5912, + -5912, -5912, -5912, 3883, -5912, -5912, 4101, 2444, 4071, 4356, + -5912, -5912, -5912, -5912, -5912, 4509, -5912, 2839, 3547, 4224, + 2032, -5912, -5912, 2226, 2609, 4352, 4589, -5912, 4277, 50625, + 4423, -5912, 4479, -5912, 4699, 2421, -5912, -5912, 2421, -5912, + 51188, -5912,108520,108520, 79290,108520, 14062, 318, 2842, -5912, + -5912, 4071, 4101,108520, 3470, -5912, 60105, -5912, 4628, -5912, + 2276, 4398, 4399, 77122, -5912, -5912, -5912,108520, 14199, -5912, + -5912, 329, 4670, -5912, -5912, -5912, 4101, -5912, -5912, 4101, + -5912, 260, -5912, 4328, 4333, 2843, -5912, -5912, -5912, -5912, + -5912, 2847, -5912, 51188, 79290, -5912, 3547, 79832, 4619, 4620, + -5912, 77122, -5912, 734, 4358, -5912, 4299, 79832, 79832, -5912, + 4304,108520, 77122, -5912, -5912, 1519, -5912, 2857, -5912 +}; + + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_int16 yydefact[] = +{ + 3146, 0, 2, 1, 3573, 3577, 3581, 3582, 3504, 3583, + 3584, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, + 3558, 3559, 3560, 3562, 3561, 3563, 3564, 3565, 3566, 3567, + 3568, 3569, 3570, 3572, 3571, 3522, 3153, 3521, 3518, 3519, + 2267, 3586, 3574, 3587, 3575, 3576, 3578, 3579, 3548, 3580, + 3588, 3589, 3590, 3585, 3593, 3544, 3545, 3543, 3546, 3547, + 3591, 3592, 3535, 3536, 3537, 3538, 3594, 3154, 3155, 3540, + 3147, 3151, 3216, 3287, 3541, 3542, 3539, 3152, 3534, 3287, + 0, 3409, 3410, 0, 3411, 3412, 3413, 3339, 3301, 3414, + 0, 0, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, + 0, 3423, 3424, 3425, 3426, 3286, 3427, 3428, 3429, 3430, + 3263, 3269, 3392, 0, 3243, 3244, 3240, 3242, 3241, 3245, + 3228, 1436, 650, 1523, 1522, 0, 2630, 1436, 2582, 2583, + 2631, 2584, 2585, 0, 2586, 274, 0, 1533, 2587, 2632, + 0, 1436, 2633, 437, 1102, 2634, 2635, 3170, 0, 2588, + 2589, 0, 0, 0, 650, 1436, 0, 0, 2590, 1668, + 2591, 0, 2592, 2636, 2637, 0, 2593, 2594, 2638, 0, + 2639, 2595, 2596, 2597, 2640, 2641, 2642, 2598, 2643, 2644, + 0, 0, 1682, 0, 2599, 2645, 2600, 2601, 2602, 0, + 2646, 2603, 2604, 2605, 2647, 2648, 2606, 2607, 2608, 0, + 2609, 0, 0, 0, 0, 0, 0, 2649, 1436, 2610, + 0, 0, 1689, 0, 2611, 0, 2650, 2612, 0, 2613, + 0, 2651, 2614, 2615, 2616, 2617, 1682, 3388, 3264, 0, + 1535, 0, 2618, 2652, 0, 2619, 2620, 2621, 2622, 2623, + 2624, 2625, 2626, 2627, 2628, 2629, 0, 0, 0, 3, + 38, 73, 74, 31, 30, 91, 56, 17, 64, 125, + 124, 126, 43, 39, 81, 26, 28, 40, 44, 66, + 68, 33, 57, 103, 65, 24, 63, 69, 89, 51, + 12, 13, 52, 14, 53, 15, 54, 99, 75, 92, + 36, 62, 23, 45, 71, 72, 5, 47, 79, 11, + 58, 59, 61, 84, 85, 86, 108, 87, 120, 42, + 117, 96, 97, 114, 98, 115, 9, 100, 55, 16, + 111, 110, 112, 82, 48, 83, 70, 90, 109, 27, + 113, 18, 19, 21, 22, 20, 60, 29, 67, 32, + 88, 116, 106, 102, 121, 119, 4, 127, 104, 76, + 7, 8, 93, 6, 25, 50, 10, 35, 34, 49, + 41, 123, 37, 1533, 95, 107, 94, 101, 80, 105, + 122, 78, 118, 1644, 1631, 1691, 1643, 1667, 0, 1647, + 3483, 3484, 46, 1668, 129, 130, 131, 136, 3150, 3205, + 3206, 3207, 3287, 3238, 3239, 3232, 3248, 3258, 3247, 3251, + 3259, 3246, 3265, 0, 133, 135, 137, 140, 134, 128, + 132, 139, 144, 138, 143, 141, 142, 145, 146, 147, + 3485, 1920, 3482, 77, 3223, 3222, 0, 3287, 0, 3515, + 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, + 2295, 2296, 2297, 2298, 2300, 2299, 2301, 2302, 2303, 2304, + 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, + 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, + 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, + 2335, 2274, 2275, 2336, 2337, 2338, 2339, 2340, 2341, 2342, + 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, + 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, + 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, + 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, + 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, + 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, + 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, + 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, + 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, + 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, + 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, + 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, + 2463, 2464, 2465, 2466, 2469, 2467, 2468, 2470, 2471, 2472, + 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, + 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, + 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, + 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, + 2513, 2514, 2515, 2516, 2276, 2517, 2518, 2519, 2520, 2521, + 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, + 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, + 2542, 2543, 2544, 2545, 2546, 3170, 2547, 2548, 2549, 2550, + 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, + 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, + 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, + 2581, 3188, 2272, 2273, 2280, 2281, 2282, 3163, 3184, 3190, + 3511, 3189, 2279, 3338, 0, 0, 3431, 3432, 3433, 3434, + 3435, 3436, 3486, 3487, 3488, 3489, 3490, 3492, 3491, 3300, + 3458, 3495, 3299, 3496, 3303, 3497, 3498, 3499, 3500, 3459, + 3501, 3302, 3493, 3455, 3304, 3297, 3298, 3456, 3407, 3408, + 2247, 3457, 3454, 3494, 3191, 3453, 3308, 3307, 1620, 3510, + 1621, 0, 3310, 3437, 3438, 3439, 3440, 3442, 3441, 3443, + 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, + 2663, 2664, 3468, 2665, 2666, 2667, 3481, 2668, 2669, 3469, + 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, + 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, + 2690, 2691, 2692, 2693, 3470, 3471, 2694, 2695, 2696, 2697, + 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, + 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, + 3472, 2718, 2719, 3473, 2720, 2721, 2722, 3474, 2723, 2724, + 2725, 2726, 2727, 3478, 3479, 3480, 3467, 3261, 3444, 3466, + 3477, 3475, 3476, 3271, 3267, 3275, 3270, 0, 0, 0, + 0, 3287, 1435, 1434, 1449, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3160, 0, 1446, 149, 0, 3462, 3456, 3465, 0, + 2250, 3457, 3454, 3453, 409, 408, 1532, 0, 1512, 650, + 0, 1449, 436, 1668, 0, 0, 0, 0, 0, 0, + 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 0, 0, 0, 460, 459, + 0, 0, 1068, 465, 0, 0, 0, 0, 0, 640, + 3169, 3164, 3174, 0, 3167, 3168, 3453, 0, 3597, 2467, + 3200, 3201, 3595, 2528, 1622, 1620, 3510, 0, 275, 278, + 279, 276, 277, 0, 1214, 1215, 1217, 0, 0, 1227, + 906, 907, 0, 0, 0, 920, 0, 0, 0, 904, + 0, 0, 0, 926, 0, 923, 0, 0, 927, 924, + 901, 925, 908, 0, 900, 0, 0, 1227, 928, 0, + 0, 902, 0, 0, 0, 0, 1449, 0, 3253, 3254, + 2391, 1570, 466, 0, 0, 1668, 0, 1555, 1556, 1533, + 1545, 1557, 1550, 1552, 1551, 1553, 1549, 1554, 2286, 1003, + 2303, 1003, 2379, 1000, 1001, 1003, 1003, 1003, 2487, 0, + 0, 975, 0, 986, 2268, 1003, 2269, 3511, 1008, 534, + 534, 534, 0, 1007, 1012, 534, 0, 1417, 1458, 2249, + 1681, 0, 2303, 2379, 976, 1416, 2547, 1561, 0, 0, + 1242, 1238, 1240, 1241, 1239, 0, 1071, 1071, 2506, 1426, + 259, 3451, 2516, 2614, 2547, 3452, 258, 253, 254, 3446, + 3447, 3449, 227, 3450, 3448, 3445, 2290, 0, 0, 1007, + 0, 1449, 1424, 972, 1688, 1686, 0, 2234, 0, 0, + 2313, 0, 2328, 2417, 250, 2499, 2507, 2516, 2614, 2547, + 2579, 206, 216, 211, 0, 268, 2516, 2614, 2547, 0, + 1446, 0, 1648, 1794, 2243, 0, 0, 3262, 1419, 1418, + 1534, 0, 1537, 0, 2482, 1652, 1655, 1539, 1653, 1644, + 0, 0, 3149, 0, 1544, 1685, 1685, 0, 1685, 0, + 1636, 1644, 1639, 1643, 0, 0, 0, 0, 1436, 0, + 3230, 3258, 3237, 3293, 3234, 0, 0, 3283, 3279, 3276, + 3284, 3285, 3278, 3266, 1909, 1910, 1911, 1908, 1921, 1907, + 0, 3211, 1912, 3250, 3217, 0, 3225, 3224, 3523, 3524, + 3340, 3162, 3181, 0, 0, 0, 0, 0, 0, 0, + 3309, 3311, 3313, 3273, 3272, 3268, 0, 0, 0, 3398, + 3399, 0, 3397, 0, 3394, 3396, 0, 3293, 0, 1420, + 0, 0, 0, 931, 0, 1461, 1053, 0, 0, 0, + 0, 0, 1311, 0, 1110, 1111, 0, 2272, 0, 2390, + 1311, 0, 0, 2145, 2156, 2157, 2158, 2317, 2373, 2153, + 2154, 2155, 2147, 2148, 2149, 2150, 2151, 2152, 0, 0, + 1209, 2146, 0, 2390, 0, 1311, 0, 176, 0, 153, + 1311, 0, 0, 2390, 0, 0, 2390, 0, 0, 0, + 0, 0, 2390, 0, 0, 0, 0, 0, 176, 2422, + 0, 153, 2390, 0, 0, 0, 1440, 0, 0, 0, + 1442, 1445, 1432, 0, 2226, 0, 2227, 2251, 0, 1526, + 1520, 1529, 1525, 1515, 0, 2243, 0, 0, 0, 0, + 914, 0, 0, 904, 0, 0, 0, 915, 0, 916, + 917, 0, 0, 0, 0, 913, 0, 1430, 1422, 0, + 1563, 1565, 1564, 1562, 534, 0, 0, 0, 2390, 0, + 153, 1499, 0, 2390, 153, 0, 0, 464, 463, 153, + 462, 461, 2317, 2373, 0, 1101, 0, 1376, 153, 2390, + 0, 199, 2390, 709, 2390, 1539, 0, 653, 0, 821, + 2422, 153, 0, 0, 0, 0, 0, 0, 1071, 0, + 0, 0, 0, 0, 0, 0, 639, 650, 0, 3173, + 3179, 0, 3171, 3341, 3598, 3596, 3296, 0, 3202, 1218, + 251, 252, 1216, 918, 2390, 1143, 370, 0, 0, 2390, + 153, 1869, 1898, 1876, 1898, 1898, 1865, 1865, 2356, 1878, + 2390, 1866, 1867, 1903, 0, 1898, 1865, 1870, 0, 1868, + 1906, 1906, 1893, 370, 935, 1850, 1851, 1852, 1853, 1879, + 1880, 1854, 1885, 1886, 1890, 1855, 1920, 3463, 1865, 3464, + 3461, 3460, 919, 0, 905, 2390, 370, 1107, 2390, 2277, + 186, 0, 903, 2317, 2373, 2390, 370, 1211, 0, 2390, + 370, 2390, 182, 2390, 370, 2390, 370, 2390, 654, 0, + 0, 2390, 370, 2390, 2422, 184, 922, 2390, 370, 929, + 2390, 370, 2245, 2390, 0, 1433, 0, 0, 3528, 3532, + 0, 3530, 3525, 3252, 3306, 3305, 3204, 0, 3609, 0, + 1622, 1547, 0, 1668, 1003, 1002, 0, 1003, 0, 3619, + 1003, 0, 1003, 0, 3619, 1003, 0, 0, 0, 1003, + 2270, 2271, 0, 0, 3618, 3614, 3617, 977, 987, 0, + 1009, 0, 0, 1016, 1015, 1014, 0, 0, 0, 1017, + 0, 1798, 1597, 0, 984, 0, 982, 0, 1414, 1429, + 0, 0, 0, 0, 1071, 0, 1070, 0, 0, 1425, + 257, 255, 0, 0, 0, 0, 0, 0, 1431, 0, + 1423, 0, 0, 0, 3517, 3520, 2159, 3516, 0, 2583, + 2584, 2585, 2218, 0, 3458, 2586, 2587, 2632, 2049, 2036, + 2045, 2050, 2037, 2039, 2046, 2588, 2589, 1987, 2590, 2591, + 2263, 2592, 2593, 2594, 2596, 2597, 2598, 2041, 2043, 2599, + 2600, 2602, 0, 2264, 2603, 2604, 2449, 2606, 2607, 2609, + 2610, 2047, 2612, 2613, 2614, 2615, 2616, 2617, 2262, 0, + 2048, 2618, 2620, 2621, 2622, 2623, 2625, 2626, 2627, 2628, + 0, 0, 0, 2240, 0, 2016, 0, 1858, 1859, 1881, + 1882, 1860, 1887, 1888, 1861, 0, 2239, 1923, 2104, 2015, + 2032, 0, 2021, 2022, 0, 2014, 2010, 1671, 2235, 0, + 2011, 2252, 2219, 2266, 2265, 3511, 2229, 2255, 2253, 2254, + 2256, 1671, 2233, 0, 0, 0, 219, 0, 0, 3387, + 270, 0, 271, 2241, 2516, 207, 249, 221, 248, 222, + 220, 0, 2315, 208, 0, 0, 209, 0, 0, 0, + 0, 0, 0, 0, 264, 1421, 0, 1796, 1795, 2244, + 940, 0, 0, 1536, 1533, 2169, 0, 1654, 0, 0, + 0, 1634, 1633, 0, 1541, 1543, 1518, 1539, 1683, 1684, + 0, 0, 0, 0, 0, 0, 0, 0, 1741, 1699, + 1700, 1702, 1738, 1742, 1750, 0, 1640, 0, 0, 1800, + 0, 0, 3148, 3293, 3294, 0, 3288, 0, 3287, 3287, + 3281, 3280, 3277, 0, 0, 0, 0, 0, 0, 0, + 0, 3208, 634, 3210, 631, 0, 0, 3183, 0, 3187, + 3185, 0, 3333, 3336, 0, 3334, 3335, 3337, 0, 3342, + 3343, 0, 0, 0, 0, 0, 3324, 3312, 3319, 3321, + 3323, 3322, 3331, 3327, 3330, 3332, 3274, 3287, 0, 3400, + 3406, 3403, 2330, 0, 3395, 0, 1447, 0, 0, 0, + 0, 0, 1142, 0, 0, 0, 0, 0, 932, 0, + 0, 0, 0, 1469, 1470, 1471, 0, 0, 1472, 1473, + 1461, 261, 1479, 1477, 1460, 1462, 1475, 1467, 0, 0, + 0, 0, 0, 0, 0, 1491, 0, 190, 191, 0, + 666, 650, 0, 2390, 0, 0, 0, 0, 1152, 1159, + 1310, 0, 0, 0, 0, 0, 0, 0, 0, 1153, + 1151, 0, 1154, 263, 1164, 1191, 1194, 0, 0, 1109, + 1112, 0, 0, 0, 0, 0, 1301, 0, 0, 0, + 1301, 0, 0, 0, 1310, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 286, 288, 301, 365, 0, 0, + 0, 2390, 1311, 0, 0, 0, 1213, 0, 0, 0, + 0, 0, 0, 0, 0, 1194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 151, 152, 157, 0, 0, + 0, 0, 1194, 0, 0, 0, 0, 0, 0, 0, + 617, 630, 0, 0, 0, 0, 0, 627, 0, 0, + 153, 291, 607, 613, 0, 0, 0, 716, 715, 0, + 0, 0, 0, 0, 0, 1391, 0, 1390, 0, 0, + 0, 0, 1489, 1488, 0, 0, 0, 0, 0, 0, + 1301, 0, 280, 282, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, + 402, 0, 0, 0, 157, 0, 0, 1301, 0, 293, + 0, 3218, 0, 1441, 1438, 1439, 0, 1444, 0, 0, + 0, 0, 2024, 0, 2173, 1691, 2171, 1127, 2225, 0, + 2222, 2221, 2248, 2228, 0, 0, 238, 239, 237, 1527, + 240, 1528, 1524, 0, 1510, 0, 0, 0, 0, 0, + 0, 0, 0, 2317, 2373, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 829, 1461, 1498, 0, 0, 0, 659, 0, 2390, + 0, 155, 867, 0, 819, 465, 0, 0, 0, 1184, + 1375, 155, 0, 0, 193, 0, 0, 713, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, + 0, 155, 0, 2390, 610, 2390, 0, 534, 534, 0, + 0, 1073, 0, 0, 0, 0, 0, 0, 0, 0, + 3177, 3172, 3175, 0, 3165, 3179, 1626, 1625, 1628, 1627, + 0, 1624, 0, 368, 369, 0, 1201, 1226, 0, 0, + 0, 1897, 1884, 1892, 1891, 0, 1874, 1873, 1872, 0, + 1871, 0, 1898, 1898, 1896, 1875, 1850, 0, 0, 0, + 1902, 0, 1900, 0, 896, 1846, 1842, 0, 1909, 1908, + 1907, 0, 1856, 1865, 1862, 921, 0, 0, 1195, 0, + 0, 2390, 370, 2390, 0, 2390, 0, 0, 0, 1203, + 370, 0, 1197, 0, 0, 1199, 0, 1392, 0, 912, + 910, 909, 911, 0, 0, 894, 0, 0, 0, 0, + 0, 889, 0, 0, 891, 0, 0, 3526, 0, 0, + 3529, 0, 3255, 0, 3615, 1566, 3612, 0, 0, 1668, + 1546, 0, 995, 0, 3619, 3620, 980, 0, 990, 0, + 3619, 978, 0, 991, 988, 989, 0, 0, 0, 3613, + 3502, 3508, 994, 0, 0, 535, 537, 0, 0, 2339, + 2355, 0, 2380, 2410, 2411, 2473, 2502, 2507, 2512, 0, + 2541, 2552, 0, 1018, 1048, 1013, 725, 0, 0, 1607, + 985, 983, 1415, 1559, 2178, 0, 1668, 0, 0, 0, + 1234, 1235, 256, 228, 0, 0, 0, 1050, 2506, 1428, + 971, 650, 0, 0, 2019, 2020, 2217, 0, 0, 0, + 0, 0, 0, 2018, 0, 0, 0, 0, 0, 0, + 0, 1945, 0, 0, 2177, 0, 0, 2177, 0, 0, + 1980, 0, 0, 0, 0, 0, 0, 0, 0, 1946, + 1927, 1928, 3459, 2016, 2169, 0, 2017, 2259, 0, 1920, + 2159, 0, 2156, 2157, 2158, 2728, 2729, 2730, 2731, 2732, + 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, + 2743, 0, 2744, 2745, 2746, 2747, 2748, 2750, 2749, 2751, + 2752, 2753, 2754, 2755, 2756, 2232, 2758, 2759, 2760, 2761, + 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, + 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, + 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, + 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, + 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, + 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821, + 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, + 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, + 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, + 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, + 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, + 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, + 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, + 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, + 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2909, 1960, 2910, + 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, + 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, + 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, + 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, + 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 1962, 2959, + 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, + 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, + 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, + 2990, 2991, 2992, 2995, 2993, 2994, 2996, 2997, 2998, 2999, + 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, + 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, + 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, + 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, + 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, + 3050, 3052, 3051, 3053, 3054, 3055, 3056, 3057, 3058, 3059, + 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, + 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, + 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, + 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, + 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, + 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, + 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, + 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, + 3140, 3141, 3142, 3143, 3144, 3145, 0, 2153, 2154, 2155, + 2147, 2148, 2149, 2150, 2151, 2152, 2163, 0, 0, 2238, + 2284, 2283, 0, 2106, 0, 1942, 0, 0, 1754, 1670, + 0, 2257, 2220, 0, 3509, 3512, 2012, 1754, 3384, 3383, + 3382, 3381, 3352, 0, 3346, 3347, 0, 3385, 3386, 272, + 273, 269, 0, 0, 224, 223, 0, 246, 247, 218, + 245, 0, 241, 242, 226, 2093, 2092, 225, 217, 214, + 212, 229, 231, 232, 215, 213, 267, 265, 0, 0, + 0, 0, 370, 3287, 1544, 1531, 0, 0, 2232, 0, + 2167, 0, 0, 2165, 0, 0, 0, 1751, 0, 1656, + 0, 1660, 1544, 0, 1540, 1651, 1650, 1692, 1693, 1093, + 1649, 1721, 1722, 0, 0, 0, 0, 1747, 1745, 1712, + 1703, 1711, 0, 0, 1709, 0, 1713, 1923, 1740, 1638, + 1697, 1698, 1701, 1637, 0, 1743, 0, 1610, 1741, 1702, + 1594, 0, 1572, 0, 1801, 0, 0, 0, 3295, 3293, + 3233, 1850, 3287, 3226, 3287, 3282, 3214, 1914, 1915, 1916, + 1917, 1918, 1919, 3215, 0, 3212, 1913, 3213, 632, 633, + 0, 0, 0, 3180, 0, 3161, 3186, 3318, 2524, 3350, + 0, 3351, 0, 0, 3315, 0, 3325, 3328, 3326, 3329, + 0, 1850, 3401, 3505, 3505, 1850, 1448, 0, 0, 0, + 1122, 1124, 0, 1123, 0, 1126, 0, 1135, 0, 0, + 1121, 1140, 0, 1129, 1127, 0, 1487, 0, 0, 933, + 0, 0, 0, 0, 1468, 0, 0, 2541, 260, 1471, + 1476, 1463, 1474, 0, 0, 0, 0, 0, 1052, 1051, + 0, 0, 1075, 0, 0, 0, 1494, 523, 0, 367, + 0, 0, 0, 0, 0, 0, 0, 0, 815, 812, + 0, 0, 811, 0, 664, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 689, 0, 1301, 0, + 299, 0, 1161, 0, 1160, 0, 1165, 0, 0, 1162, + 1157, 1158, 2507, 2516, 2547, 262, 1163, 1193, 0, 1192, + 1188, 0, 1104, 0, 1105, 0, 0, 0, 0, 0, + 2365, 2390, 307, 330, 0, 1300, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 352, 0, 0, 355, 354, 0, 0, 0, 0, + 0, 359, 338, 0, 339, 0, 358, 0, 0, 0, + 0, 0, 0, 1301, 0, 295, 0, 0, 0, 0, + 0, 0, 0, 0, 1210, 0, 742, 0, 0, 2507, + 1189, 0, 0, 0, 0, 0, 0, 1379, 0, 0, + 179, 0, 174, 178, 0, 0, 2507, 1190, 0, 0, + 0, 0, 0, 615, 616, 629, 0, 620, 621, 618, + 622, 623, 0, 0, 0, 0, 0, 0, 0, 614, + 0, 0, 711, 710, 714, 0, 0, 0, 0, 0, + 0, 1385, 0, 0, 1184, 0, 0, 1384, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1244, 1243, + 0, 0, 0, 0, 1311, 0, 857, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 181, 729, 0, 728, + 0, 175, 180, 0, 0, 0, 0, 0, 0, 0, + 0, 236, 1437, 1443, 1691, 1691, 1691, 2030, 0, 0, + 0, 0, 1690, 2223, 2226, 1515, 1521, 1514, 1513, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 415, 412, 413, 415, + 0, 0, 0, 0, 831, 0, 834, 837, 1459, 488, + 0, 0, 656, 689, 0, 0, 468, 188, 0, 0, + 0, 0, 744, 0, 0, 0, 1374, 150, 197, 199, + 466, 0, 198, 200, 202, 203, 204, 201, 205, 0, + 708, 712, 0, 0, 0, 0, 652, 0, 0, 0, + 0, 0, 0, 0, 1821, 0, 0, 173, 0, 0, + 605, 609, 0, 3156, 0, 0, 468, 573, 381, 2390, + 0, 534, 0, 2390, 0, 1072, 0, 818, 0, 0, + 0, 1146, 1146, 0, 0, 758, 757, 0, 0, 0, + 0, 3178, 0, 0, 0, 0, 1623, 370, 1144, 0, + 153, 0, 0, 0, 0, 370, 1895, 1894, 1847, 1843, + 0, 0, 0, 0, 936, 0, 0, 0, 0, 0, + 0, 1863, 370, 1108, 187, 2278, 0, 898, 0, 0, + 0, 0, 370, 1212, 886, 370, 183, 370, 370, 655, + 0, 370, 185, 0, 0, 370, 930, 370, 2246, 0, + 370, 3527, 3533, 3531, 1569, 3616, 3610, 3611, 2390, 534, + 1628, 1548, 992, 999, 981, 998, 997, 979, 996, 993, + 3317, 0, 0, 3507, 0, 1010, 0, 533, 0, 0, + 0, 0, 0, 1026, 1027, 0, 0, 1023, 1028, 0, + 1024, 1025, 1030, 1020, 1019, 1031, 1032, 0, 0, 1050, + 723, 0, 0, 0, 0, 1604, 0, 1602, 0, 1799, + 1606, 1595, 1560, 0, 1558, 0, 598, 1071, 1071, 0, + 0, 1007, 0, 0, 370, 1427, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2182, 0, 2183, + 0, 0, 2216, 2212, 0, 0, 0, 0, 0, 2189, + 2190, 2191, 2188, 2192, 2187, 0, 0, 2193, 2186, 0, + 0, 0, 0, 0, 0, 0, 0, 2173, 2176, 0, + 0, 2610, 0, 0, 0, 0, 1988, 0, 0, 2140, + 0, 2173, 0, 0, 0, 0, 0, 0, 0, 2169, + 2208, 0, 0, 0, 0, 2091, 0, 2088, 0, 0, + 0, 0, 2229, 0, 0, 2260, 1924, 1938, 1939, 1940, + 1943, 2237, 0, 2231, 0, 0, 1925, 1951, 0, 2209, + 1976, 0, 1981, 1966, 2194, 2195, 2196, 2197, 1983, 0, + 1959, 1964, 1968, 0, 1947, 0, 1944, 0, 2232, 2168, + 0, 2166, 0, 1935, 1936, 1937, 1929, 1930, 1931, 1932, + 1933, 1934, 1941, 2144, 2142, 2143, 0, 0, 0, 2114, + 0, 0, 1963, 2383, 2417, 0, 1682, 1682, 1682, 1669, + 1680, 2236, 0, 1816, 1691, 3514, 3513, 2230, 1816, 0, + 0, 0, 2242, 0, 0, 1920, 0, 266, 1797, 938, + 939, 937, 1850, 1517, 1530, 1544, 2170, 1538, 1658, 0, + 0, 1519, 1542, 0, 1091, 1092, 0, 1096, 2610, 2504, + 0, 0, 0, 0, 1714, 1748, 0, 1739, 0, 1715, + 2252, 2253, 1716, 1719, 1720, 1710, 1749, 1608, 0, 1744, + 1642, 1641, 0, 1819, 0, 0, 0, 1586, 1574, 0, + 1802, 0, 1754, 1612, 0, 2229, 1752, 3231, 3289, 3236, + 3257, 3227, 3260, 1922, 3209, 3249, 0, 3182, 3353, 3354, + 0, 3344, 3345, 3314, 3320, 3391, 0, 3506, 0, 0, + 1350, 1245, 1312, 1125, 0, 1865, 1136, 0, 1120, 0, + 1119, 1865, 0, 1137, 0, 1865, 1351, 1246, 1313, 934, + 1352, 1247, 1314, 1353, 1248, 1478, 1466, 1465, 1464, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 796, 2390, 370, 1492, 1354, 0, 1249, + 366, 1493, 1315, 1497, 814, 813, 0, 0, 1316, 0, + 665, 670, 0, 672, 673, 2317, 2373, 674, 677, 678, + 0, 680, 669, 668, 0, 0, 0, 0, 0, 686, + 688, 0, 0, 0, 0, 0, 0, 1155, 1156, 1355, + 1252, 0, 1317, 0, 1103, 0, 1253, 189, 0, 0, + 287, 2390, 309, 0, 486, 796, 0, 1303, 306, 336, + 0, 351, 346, 347, 345, 2390, 370, 2390, 370, 0, + 0, 0, 0, 0, 348, 343, 344, 340, 0, 0, + 353, 2289, 2357, 2517, 0, 697, 699, 0, 704, 356, + 1273, 377, 376, 375, 0, 360, 0, 382, 385, 357, + 337, 335, 332, 302, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1205, 0, 1358, 1318, 0, + 1340, 0, 0, 0, 0, 736, 1361, 1259, 1321, 0, + 1380, 1382, 1372, 1260, 1381, 177, 1290, 0, 0, 162, + 0, 0, 0, 0, 156, 166, 1362, 1261, 1322, 0, + 0, 1363, 1262, 0, 0, 292, 608, 619, 624, 1267, + 628, 625, 1330, 626, 1370, 1263, 0, 1366, 1293, 1325, + 593, 1184, 1184, 1373, 1386, 1264, 1184, 0, 1301, 0, + 281, 283, 0, 1071, 0, 1265, 0, 1323, 1365, 1292, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1500, + 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, + 1303, 2390, 370, 1364, 0, 1298, 0, 1338, 0, 0, + 403, 0, 1291, 1301, 0, 294, 1269, 0, 1332, 0, + 0, 234, 233, 235, 0, 0, 0, 0, 2174, 2175, + 0, 2172, 2025, 2225, 0, 1511, 960, 946, 959, 0, + 942, 2355, 0, 945, 947, 0, 0, 0, 948, 952, + 953, 0, 944, 941, 943, 0, 414, 0, 0, 753, + 754, 0, 0, 0, 0, 833, 0, 0, 1490, 0, + 153, 663, 0, 0, 0, 658, 688, 693, 0, 0, + 0, 0, 467, 471, 475, 476, 477, 0, 0, 0, + 0, 167, 154, 0, 875, 0, 534, 0, 746, 1378, + 1377, 1183, 0, 199, 192, 0, 0, 709, 0, 1539, + 0, 0, 588, 2033, 591, 2034, 590, 0, 381, 828, + 826, 825, 827, 849, 824, 0, 1820, 1822, 0, 0, + 0, 0, 0, 0, 0, 470, 0, 0, 537, 0, + 576, 0, 0, 0, 0, 573, 0, 0, 0, 0, + 845, 3460, 817, 0, 1114, 0, 1132, 1115, 0, 0, + 0, 0, 1169, 1176, 1145, 1170, 1147, 1176, 0, 0, + 759, 763, 762, 766, 764, 0, 760, 637, 3176, 3170, + 1629, 1630, 0, 1202, 0, 0, 1486, 0, 1484, 0, + 1864, 1877, 897, 0, 1905, 1904, 1906, 1906, 0, 1848, + 0, 3599, 3607, 3606, 0, 1889, 1857, 1196, 370, 0, + 370, 0, 370, 1204, 1198, 1200, 1393, 0, 895, 0, + 0, 888, 890, 0, 892, 0, 0, 3316, 3503, 1011, + 536, 0, 0, 0, 0, 0, 0, 1022, 635, 1029, + 0, 1043, 1038, 1040, 0, 1044, 722, 0, 0, 1605, + 1598, 1600, 1599, 0, 0, 1596, 2179, 887, 0, 604, + 0, 0, 0, 0, 1050, 0, 1045, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1687, 2180, 2181, + 0, 0, 0, 2213, 0, 0, 2066, 0, 2038, 2040, + 2052, 0, 2067, 2023, 2068, 2042, 2044, 2053, 0, 0, + 2160, 0, 2056, 2055, 0, 1990, 1991, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2005, 2057, 2139, 0, 0, + 0, 2059, 2058, 0, 0, 2207, 0, 0, 0, 2064, + 2069, 0, 0, 0, 0, 2075, 0, 2096, 0, 0, + 0, 2013, 2170, 0, 0, 0, 0, 0, 0, 0, + 0, 1982, 1967, 1985, 1961, 1965, 1969, 0, 1984, 0, + 0, 1955, 0, 0, 1953, 1977, 1949, 0, 0, 1978, + 0, 0, 0, 2031, 0, 0, 1682, 1682, 1682, 1682, + 1679, 0, 0, 0, 0, 2504, 2629, 0, 1778, 1753, + 1755, 1765, 1778, 1785, 1778, 1814, 2243, 0, 1724, 0, + 1724, 3366, 3368, 3369, 3370, 3371, 3372, 3374, 3375, 3377, + 3378, 3379, 3367, 3373, 3376, 3380, 3357, 3358, 0, 3348, + 3349, 210, 0, 243, 230, 3391, 1516, 1659, 1668, 1694, + 0, 2161, 1096, 0, 1696, 1717, 1718, 0, 1707, 0, + 1746, 1704, 1609, 1593, 0, 1591, 1578, 1580, 1579, 0, + 0, 1581, 2229, 0, 1591, 1573, 1617, 0, 0, 1819, + 0, 1616, 0, 3291, 3219, 0, 0, 3390, 3393, 3405, + 3402, 3229, 0, 1865, 1117, 1118, 0, 1141, 0, 1055, + 1056, 0, 1054, 0, 0, 0, 522, 1074, 0, 0, + 0, 796, 0, 0, 526, 0, 1495, 0, 1371, 1289, + 667, 0, 0, 0, 0, 682, 641, 683, 685, 0, + 0, 684, 687, 690, 1301, 0, 300, 1275, 0, 1336, + 1149, 0, 0, 1106, 0, 0, 0, 0, 0, 0, + 485, 693, 331, 0, 0, 0, 0, 153, 0, 311, + 323, 388, 329, 0, 362, 0, 334, 0, 327, 349, + 341, 350, 342, 361, 363, 0, 701, 702, 700, 696, + 0, 703, 705, 0, 379, 0, 0, 0, 0, 1357, + 0, 1301, 0, 296, 1271, 0, 1334, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1339, + 0, 0, 0, 0, 741, 0, 738, 0, 0, 0, + 159, 158, 0, 165, 0, 0, 0, 0, 0, 0, + 1387, 1388, 1389, 0, 0, 0, 0, 0, 0, 397, + 0, 303, 305, 304, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 404, 372, 0, 852, 0, 0, 0, 406, 0, + 0, 1349, 0, 0, 0, 0, 0, 1356, 1254, 2028, + 2029, 2026, 1691, 2224, 0, 0, 0, 957, 0, 0, + 0, 0, 417, 418, 153, 416, 439, 0, 796, 0, + 0, 830, 835, 843, 2449, 2147, 2148, 841, 836, 838, + 840, 839, 842, 0, 0, 0, 0, 504, 0, 0, + 0, 494, 0, 0, 1184, 487, 490, 491, 0, 0, + 659, 662, 660, 661, 0, 681, 0, 470, 511, 563, + 0, 169, 0, 0, 170, 168, 0, 0, 381, 743, + 0, 740, 0, 195, 0, 713, 0, 0, 0, 0, + 0, 1184, 651, 0, 848, 850, 822, 0, 693, 0, + 0, 610, 0, 534, 1570, 598, 0, 565, 470, 563, + 572, 0, 0, 580, 380, 0, 0, 598, 381, 0, + 0, 1075, 844, 0, 0, 0, 1113, 0, 0, 0, + 1166, 1171, 1167, 0, 1146, 1128, 0, 1168, 0, 0, + 1174, 1099, 1148, 1100, 1409, 1410, 1407, 1408, 0, 0, + 0, 0, 0, 0, 3193, 1619, 3203, 0, 0, 1482, + 0, 1883, 0, 1901, 1899, 1844, 0, 3287, 0, 0, + 0, 0, 0, 1849, 899, 0, 882, 0, 884, 370, + 730, 0, 370, 0, 0, 0, 0, 0, 0, 0, + 1021, 0, 1041, 0, 0, 1050, 1047, 0, 0, 1603, + 1601, 596, 0, 1236, 1237, 1050, 0, 370, 1049, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2184, + 0, 2215, 2211, 0, 2035, 2185, 0, 0, 0, 2140, + 0, 0, 1989, 2001, 2002, 2003, 2200, 0, 2008, 0, + 1998, 1999, 2000, 1992, 1993, 1994, 1995, 1996, 1997, 2004, + 2204, 2203, 0, 0, 2061, 2062, 2063, 2206, 2070, 0, + 2307, 2097, 0, 2074, 2090, 2089, 0, 0, 0, 2077, + 0, 0, 2086, 0, 2141, 2261, 1926, 0, 0, 1952, + 2210, 1970, 0, 1986, 1948, 2160, 0, 0, 0, 0, + 0, 1957, 0, 0, 0, 2117, 2112, 2113, 2137, 0, + 0, 0, 0, 0, 0, 1673, 1672, 1678, 1778, 1785, + 1778, 0, 0, 1644, 0, 1765, 0, 1777, 1763, 1776, + 0, 0, 1791, 1789, 0, 1791, 0, 1791, 0, 1757, + 0, 1781, 1759, 1776, 1761, 0, 1806, 2244, 1815, 0, + 1737, 2025, 1737, 0, 0, 0, 3389, 0, 0, 1695, + 1094, 1095, 1705, 0, 1708, 0, 1817, 0, 1592, 0, + 0, 0, 1583, 1589, 1571, 0, 0, 1613, 1591, 1614, + 3235, 0, 3290, 3355, 3356, 1138, 0, 0, 1130, 1061, + 1062, 1065, 1063, 1060, 1064, 0, 0, 0, 796, 0, + 0, 544, 0, 1088, 1088, 0, 0, 528, 585, 539, + 799, 0, 0, 0, 797, 370, 1250, 0, 0, 0, + 0, 642, 1369, 1251, 0, 0, 0, 0, 1150, 1304, + 0, 0, 1274, 0, 308, 484, 483, 488, 0, 0, + 314, 324, 0, 319, 0, 1302, 0, 0, 0, 0, + 318, 321, 392, 0, 389, 0, 370, 370, 364, 698, + 378, 383, 384, 387, 1309, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 876, 859, + 0, 0, 877, 878, 0, 0, 0, 1207, 1208, 1206, + 1341, 1342, 1347, 1344, 1343, 1346, 1345, 1348, 0, 1257, + 0, 0, 734, 1305, 163, 160, 161, 164, 1306, 1287, + 1268, 1331, 594, 0, 0, 0, 1266, 0, 1324, 0, + 1283, 1277, 0, 0, 0, 0, 0, 1368, 1297, 1329, + 1367, 1295, 1327, 1294, 1326, 1296, 1328, 1288, 0, 0, + 1824, 856, 0, 0, 0, 370, 370, 855, 732, 1270, + 0, 1333, 1279, 0, 0, 0, 949, 0, 0, 0, + 951, 422, 440, 153, 0, 752, 816, 0, 0, 832, + 0, 492, 0, 498, 502, 0, 0, 506, 507, 505, + 493, 1184, 534, 584, 785, 786, 0, 0, 806, 0, + 657, 0, 0, 468, 0, 508, 0, 0, 472, 172, + 171, 0, 0, 0, 747, 751, 749, 748, 750, 745, + 0, 736, 199, 2390, 0, 0, 0, 0, 592, 586, + 589, 1383, 823, 0, 1823, 726, 0, 381, 606, 3158, + 0, 0, 468, 598, 3157, 0, 473, 478, 479, 488, + 0, 573, 564, 0, 565, 574, 575, 0, 582, 1457, + 0, 599, 582, 0, 0, 0, 846, 0, 847, 0, + 1116, 1133, 1134, 0, 0, 1176, 0, 0, 1178, 1173, + 0, 0, 765, 768, 761, 644, 0, 3166, 370, 0, + 1485, 1845, 3600, 0, 3601, 3602, 3603, 3604, 3605, 370, + 370, 1233, 0, 893, 1035, 1036, 1037, 1034, 1033, 636, + 0, 1039, 1004, 724, 0, 597, 370, 0, 1005, 974, + 966, 973, 962, 965, 967, 0, 969, 970, 964, 961, + 963, 2214, 2051, 2054, 2065, 0, 2139, 2170, 0, 0, + 2009, 0, 0, 0, 2060, 2619, 0, 0, 2101, 2102, + 0, 2098, 2099, 2094, 2095, 2076, 0, 2438, 2081, 0, + 0, 0, 1974, 1972, 1971, 1956, 0, 0, 1954, 1950, + 0, 1979, 2103, 0, 2119, 2116, 2136, 2170, 1677, 1676, + 1675, 1674, 1764, 1760, 1762, 0, 2624, 0, 1767, 1774, + 0, 1756, 0, 1790, 1786, 0, 1787, 0, 0, 1788, + 0, 0, 1758, 0, 1774, 0, 1813, 1685, 0, 2108, + 2258, 2108, 3359, 0, 3362, 3360, 3361, 3365, 244, 1663, + 0, 1706, 0, 3615, 1575, 0, 1576, 1582, 0, 0, + 0, 0, 1618, 1611, 3292, 1131, 1139, 0, 0, 0, + 524, 0, 539, 0, 0, 0, 1081, 1090, 1080, 0, + 539, 0, 1184, 801, 800, 803, 798, 802, 1496, 0, + 675, 676, 679, 1276, 0, 1337, 1285, 0, 1607, 310, + 480, 317, 0, 0, 0, 312, 391, 393, 313, 316, + 320, 372, 333, 326, 0, 0, 0, 1272, 0, 1335, + 1281, 1308, 1359, 1255, 1319, 0, 0, 865, 0, 0, + 0, 0, 1360, 1256, 1320, 0, 0, 0, 0, 1607, + 0, 0, 0, 0, 0, 0, 0, 0, 1505, 0, + 0, 371, 854, 853, 372, 405, 1299, 0, 2027, 0, + 950, 955, 956, 954, 0, 411, 419, 422, 0, 0, + 1224, 1224, 0, 0, 489, 503, 0, 584, 543, 0, + 495, 0, 0, 0, 0, 0, 694, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 739, 738, 194, + 0, 468, 0, 693, 0, 851, 0, 0, 0, 0, + 470, 0, 0, 3609, 469, 0, 0, 481, 0, 576, + 565, 573, 0, 0, 595, 0, 1450, 0, 601, 0, + 0, 0, 795, 1172, 0, 1186, 0, 1127, 1097, 1181, + 0, 1668, 1816, 0, 0, 0, 0, 778, 0, 648, + 3192, 3196, 1225, 1483, 3608, 883, 885, 731, 1042, 0, + 1046, 1050, 968, 2199, 2141, 2006, 0, 2202, 2201, 2205, + 0, 2071, 0, 2072, 2100, 2078, 2082, 0, 2079, 2080, + 1975, 1973, 1958, 2105, 0, 1691, 2138, 1809, 0, 1812, + 0, 0, 1766, 0, 0, 1768, 0, 0, 1770, 1772, + 0, 0, 0, 0, 0, 0, 2247, 0, 1736, 0, + 1646, 1645, 3364, 3363, 0, 1666, 2162, 1818, 1590, 0, + 0, 0, 1076, 0, 1615, 1043, 0, 370, 1088, 1184, + 545, 2449, 546, 1087, 1089, 1093, 0, 1184, 0, 584, + 671, 0, 0, 289, 0, 315, 325, 374, 386, 0, + 1607, 0, 0, 863, 872, 872, 860, 0, 0, 879, + 1258, 735, 0, 0, 284, 1284, 1278, 0, 0, 0, + 1507, 1508, 0, 0, 0, 0, 0, 1307, 370, 1280, + 958, 0, 442, 449, 423, 427, 1499, 0, 1499, 0, + 424, 428, 1499, 1499, 421, 1816, 438, 1224, 0, 1221, + 1220, 532, 612, 0, 496, 0, 554, 0, 0, 807, + 0, 0, 692, 0, 470, 563, 0, 521, 512, 513, + 514, 515, 517, 516, 518, 519, 520, 510, 509, 0, + 693, 869, 381, 1457, 733, 0, 0, 706, 0, 693, + 0, 1570, 598, 565, 470, 563, 1567, 474, 488, 0, + 580, 573, 576, 0, 577, 0, 581, 0, 0, 0, + 598, 1509, 1075, 0, 0, 796, 1185, 1146, 0, 0, + 1175, 1179, 1180, 0, 0, 0, 0, 1228, 772, 773, + 767, 769, 0, 780, 784, 643, 0, 0, 647, 638, + 0, 3194, 693, 370, 0, 2007, 0, 0, 2084, 2083, + 0, 2123, 1814, 0, 0, 1808, 0, 0, 1838, 0, + 0, 0, 1775, 1793, 0, 1771, 1769, 0, 1782, 0, + 1784, 2335, 2594, 2501, 0, 1723, 1725, 1728, 1730, 1729, + 1731, 1727, 2107, 2109, 0, 0, 0, 0, 1657, 0, + 1588, 1816, 0, 1585, 0, 1057, 0, 1058, 1082, 584, + 0, 1093, 1096, 534, 584, 0, 796, 1286, 0, 612, + 0, 328, 0, 297, 1282, 0, 0, 874, 874, 0, + 0, 0, 0, 0, 0, 399, 0, 0, 1501, 0, + 1502, 1503, 1506, 407, 420, 0, 447, 0, 445, 444, + 446, 0, 435, 0, 0, 0, 0, 0, 0, 410, + 1219, 1223, 1222, 0, 497, 0, 499, 0, 540, 541, + 542, 0, 501, 550, 551, 0, 804, 0, 809, 0, + 695, 0, 0, 693, 562, 717, 0, 0, 0, 1451, + 0, 0, 587, 727, 1457, 598, 3159, 573, 0, 565, + 482, 0, 582, 576, 580, 578, 579, 0, 1454, 0, + 600, 0, 1084, 794, 0, 1176, 1187, 1182, 1177, 1413, + 0, 0, 770, 775, 774, 1499, 779, 0, 0, 0, + 646, 645, 3197, 3199, 3198, 0, 721, 1006, 2198, 2087, + 2073, 2085, 2118, 0, 0, 0, 0, 1807, 1810, 0, + 1841, 0, 0, 0, 0, 1827, 0, 1773, 0, 0, + 1783, 0, 0, 0, 1732, 0, 0, 0, 0, 0, + 0, 1577, 1587, 1077, 0, 0, 549, 0, 1096, 1078, + 543, 796, 538, 525, 1607, 322, 373, 0, 0, 0, + 870, 873, 861, 862, 881, 880, 737, 1607, 0, 395, + 394, 0, 398, 0, 443, 452, 0, 450, 425, 430, + 0, 434, 432, 431, 426, 429, 531, 0, 0, 0, + 0, 0, 552, 0, 553, 583, 0, 808, 0, 0, + 0, 719, 868, 0, 0, 468, 693, 1452, 3609, 576, + 565, 573, 0, 0, 567, 1088, 1088, 455, 580, 582, + 1455, 1456, 0, 0, 381, 0, 1098, 1412, 1411, 1668, + 0, 0, 0, 781, 782, 777, 0, 0, 3195, 2582, + 0, 2555, 0, 2135, 2124, 2135, 2135, 2115, 0, 0, + 1839, 1840, 1825, 0, 0, 1829, 1780, 1805, 0, 0, + 0, 1726, 2110, 2111, 0, 0, 0, 1816, 370, 0, + 796, 547, 1079, 554, 527, 290, 1607, 864, 0, 285, + 0, 400, 1504, 448, 0, 433, 611, 500, 559, 0, + 558, 0, 556, 555, 805, 810, 0, 693, 858, 1457, + 707, 1568, 580, 573, 576, 0, 566, 0, 1090, 1090, + 582, 453, 0, 0, 582, 0, 1395, 1668, 1394, 1396, + 1404, 1401, 1403, 1402, 1400, 1231, 1232, 771, 776, 0, + 0, 0, 2128, 2127, 2126, 2130, 2129, 0, 2122, 2120, + 2121, 1811, 0, 1828, 1831, 0, 0, 1837, 1830, 1832, + 0, 0, 1792, 0, 1803, 1734, 0, 1733, 0, 0, + 0, 1584, 1059, 0, 529, 796, 298, 871, 0, 451, + 557, 561, 560, 693, 718, 1453, 582, 576, 580, 1088, + 568, 1089, 570, 569, 457, 1084, 1085, 0, 1816, 784, + 0, 1405, 1399, 1644, 1631, 0, 0, 783, 0, 0, + 0, 2132, 0, 2133, 0, 1835, 1836, 1833, 1834, 1779, + 0, 1735, 0, 0, 0, 0, 0, 530, 0, 720, + 456, 580, 582, 1090, 381, 1083, 0, 1066, 0, 1397, + 1668, 0, 0, 789, 2125, 2131, 2134, 0, 0, 1662, + 1661, 0, 0, 1665, 548, 396, 582, 454, 571, 582, + 1086, 0, 1398, 0, 0, 0, 787, 790, 793, 791, + 792, 0, 1804, 0, 0, 458, 1816, 0, 0, 0, + 755, 0, 1826, 1691, 0, 1067, 0, 0, 0, 788, + 0, 0, 789, 1229, 1230, 0, 1664, 0, 756 +}; + + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -5912, -5912, 4484, -922, -5912, -5912, -1263, 385, 2749, -2753, + -5912, -5912, -5912, 1271, -5912, -5912, -5912, -5912, 3569, -5912, + 1432, -3283, -5912, -5912, -8, 3534, -1782, -3, 3079, 1078, + -5912, -1347, -5912, -5912, -954, -70, -5912, 3558, 177, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -1238, 1551, -5912, + 1630, 895, -877, -3372, -5912, -5912, -1944, -4139, -5912, 162, + -5912, 191, -5142, -1408, -5912, -5912, -5912, 1530, -5912, -5912, + -5912, 1477, 690, -828, -5912, -5912, -5912, -5912, -5912, -5912, + -1243, -5912, -5912, -1511, -67, -950, -3351, -4661, -5912, -5912, + 24, -865, -1922, -5912, 214, -5912, -4972, -5912, -461, -2569, + -5912, -5912, -5912, -838, -1883, 988, -5912, -1050, -1440, 1319, + -3152, -1364, -5912, -715, -5912, -1482, -1255, -1251, -1397, -4694, + -5210, -5912, -5912, -1513, -4149, -5496, -5695, -5206, -4962, 995, + -5912, -489, 29, -5912, -4011, -4704, -66, 5, -5912, -60, + -58, -5912, 22, -1183, -1312, -2022, -5912, -1195, -5912, -5912, + -5912, -3824, -5912, -5912, -5912, 56, -5912, -5912, -5912, -5912, + 67, -5912, -5912, -5912, -5912, -5912, -5912, -3529, 1505, 1507, + -5912, -4504, -5912, -1277, -5912, 228, -3870, 929, -5912, -5912, + 692, 3598, 61, -5912, -5912, -5912, -5912, -5912, -5912, -2112, + -5912, -5912, -5912, -5912, -459, -800, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -56, -5912, 656, 0, -5912, -5912, -1080, + -5912, -5912, -5912, -5912, -5912, -5912, -1556, -5498, -1648, -1636, + -5912, -3872, -5912, -5912, -5912, -775, -5912, -5912, -5912, -5912, + -5912, -1331, -5912, 750, -4482, -5912, -5912, 35, -5912, -5912, + -5912, -5912, -5912, -1363, -719, 2759, -5912, -942, -1156, -5912, + -5912, -5912, -717, -5912, -5912, -5912, -5912, -5912, -776, -1657, + 4811, 4024, -1496, 9866, -1235, -872, -5912, -5912, -5912, -3154, + -5912, -5912, -4656, -5912, 4789, 70, -720, -54, -5912, -169, + -33, 3356, -1570, -3544, -20, -900, -5912, -5912, -5912, -3489, + -5912, -5912, -5912, -5912, -4444, -52, -5912, -1055, -5912, -4721, + -5503, -4923, -4479, -1528, -5912, -4588, -5911, -5398, -4430, -5912, + 1540, -5912, -5912, -850, -887, 2737, -5912, -1891, 1876, -1867, + -5912, -3001, 59, 1093, 2747, -3624, -795, 2729, -3391, -5912, + -1045, 684, -5912, -799, -4159, -5912, -5912, -5912, -3198, -1025, + -5912, -5912, 1314, 523, -5912, -5912, -5912, -5912, -949, 2678, + -876, -5912, -5912, 3972, -5912, -4613, -5912, 3944, -5912, -5912, + -5912, -5912, 2579, 2580, -5912, -5912, -1886, 862, -5912, -1175, + -5912, -5912, 1649, 279, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, -5912, -5912, -5912, -1344, -1544, -5912, + -5912, -5197, -5912, -5912, -5912, -5912, -5912, 2001, -1295, -1090, + 3841, 805, -50, -5600, -5912, -5912, -1484, -5912, 3085, -5912, + -5912, -5912, -5912, -5912, 74, 73, -5912, -5912, -5912, -5912, + -4514, -5912, -5912, -5229, -5912, -5912, 1650, -5912, -5912, 953, + -69, 2881, -5912, -5912, -5912, -187, -5912, -5912, -1362, 2036, + -5912, -2746, -5912, -884, -5912, -5912, -2292, -49, -4693, -64, + -5912, -5912, -567, -5912, -120, -5912, -5912, -4336, -62, -5912, + -5912, -5912, -5912, -5361, -5912, -61, -1222, 436, -3666, -5912, + -47, -5, 3474, 1478, -68, 1105, -245, -193, -179, -65, + -27, 3231, -5912, -5912, -5912, -5912, 3281, -5912, -182, -1154, + -5912, -5912, -1197, -335, -5912, 1232, -938, 2008, 3210, 3216, + -5912, 1226, 2045, -2780, -2774, -5912, 506, -1319, -1196, -5912, + -5912, -5912, -5912, -81, -936, 2024, -5912, 3223, -5912, -5912, + -5912, -2711, -3713, -4342, 529, -4339, -4248, -5912, -42, -48, + -1969, -782, -189, -1121, 3224, -5912, -5912, 536, -981, -5912, + -5912, -978, -3679, 468, -5912, -5308, -3181, 542, -1478, -1293, + -5912, -1387, -5912, -1160, 5525, -2106, -1461, -5912, -5912, -1419, + 16114, -5912, -5912, -5912, 19946, 20540, -5912, -5912, 23434, 24282, + -5912, -1231, 29187, 14776, -1439, -1403, -1696, 30888, -2075, 2518, + 7, -5912, -3067, -3300, -5912, -5912, -5912, -737, 598, 330, + -5912, -5337, -4760, -5912, -5912, -506, -5912, -1170, -5912, -1169, + -5912, -5912, -5912, -3149, -5865, -3272, 2165, -5912, -5912, -5912, + -808, -5912, 31834, -3593, -5912, -1056, -1372, -2002, 2633, -3211, + -2296, -5912, -5912, -5912, -3474, -5912, -5912, -5912, -907, 1343, + -5912, -5912, 1442, -5912, -5912, -5912, -1326, 1711, -1123, -3483, + 1350, -5912, -1126, 2173, -1133, 10288, -1001, 28982, -1734, -5912, + 7293, -4373, 4463, -141, -766, 6034, -955, -943, -5912, 8443, + 7981, 6914, -4018, -5912, -5912, -5912, -45, -5912, -5912, -5912, + -5912, 4407, 785, -5912, 3634, -5912, 1607, 2854, -5912, -5912, + 2038, -967, -55, -5912, -1115, -5912, -99, -5912, -5912, -5912, + -5912, 328, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, + -5912, 3265, -5912, -5912, -1641, -5912, -5912, -5912, -5912, -5912, + 4720, -346, -5912, 4046, -344, -5912, -5912, -5912, -5912, -5912, + -5912, -5912, -5912, -5912, 3284, 2070, -5912, 3829, -5912, -5912, + -5912, 28, 3549, -5912, -5912, -5912, -637, -898, 3863, 3866, + 2027, -5912, -5912, -5912, -5912, -5912, -5912, -5912, -5912, 2039, + -5912, -5912, 1324, -2813, 2042, -5912, -5912, 505, -5912, -5912, + -14, -5912, 516, -5912, 3364, -5912, -5912, -5912, 559, -5912, + -5912, -5912, -513, 21612, -57, 98, 64, 1857, -5912, 17226, + 10851, -100, 3296, -43, 12000, 25354, -6, -5912, 4714, 2050, + 1559, -1142, -5912, 464, 2764, 30755, -5912, -1130, 55, -2, + -1127, 2113, -707, -1320, 3576, -778, -2272, -5912, 5144, -5912, + -4052, -5483, -1171, -456, 4055, -1325 +}; + + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + 0, 1, 248, 249, 250, 251, 2047, 3427, 3282, 4231, + 4232, 252, 253, 2043, 254, 255, 256, 257, 1961, 258, + 1440, 2214, 3442, 259, 3128, 1182, 1183, 1184, 2970, 2971, + 3372, 2972, 2959, 1787, 2160, 1983, 1147, 1148, 1942, 1984, + 261, 262, 1781, 2951, 263, 264, 265, 2014, 2103, 2015, + 2016, 1955, 2266, 5330, 6111, 4025, 3246, 4282, 4026, 4027, + 4690, 4691, 4771, 6125, 6126, 266, 2119, 2120, 267, 268, + 3409, 4197, 4824, 5715, 5716, 5944, 964, 5353, 5354, 5931, + 5932, 6139, 6296, 6297, 3443, 995, 4277, 4907, 4222, 5425, + 4223, 5426, 4224, 5427, 4680, 4681, 4208, 4855, 4856, 5366, + 4857, 4225, 5385, 5977, 4226, 3147, 6154, 3477, 2387, 2385, + 5632, 5956, 5190, 5191, 6390, 6162, 6163, 6164, 6412, 5387, + 5431, 5432, 6333, 6334, 4280, 4913, 5438, 5774, 5730, 3923, + 270, 4251, 4252, 271, 2236, 4399, 1077, 3480, 996, 1078, + 3444, 275, 3470, 6156, 3471, 2073, 3296, 4837, 4379, 276, + 1467, 4655, 5799, 6038, 6039, 1062, 277, 2222, 278, 279, + 3422, 4215, 280, 3164, 3940, 281, 282, 3959, 3960, 3961, + 283, 4865, 5735, 2017, 4014, 4015, 4016, 4017, 4711, 284, + 2217, 3451, 3452, 285, 286, 287, 3612, 3613, 288, 3358, + 289, 290, 291, 292, 4746, 5292, 5401, 4055, 4238, 4881, + 5399, 293, 4201, 3445, 3498, 4315, 4316, 5797, 6030, 6031, + 6032, 6215, 6447, 6034, 6217, 6355, 6219, 5376, 6575, 6576, + 6015, 4644, 5204, 295, 5377, 5378, 6169, 296, 3162, 297, + 298, 2191, 3415, 3416, 4838, 3487, 4289, 4290, 4893, 4894, + 299, 4139, 300, 5268, 5269, 997, 6177, 6117, 6282, 301, + 302, 5272, 5273, 303, 304, 305, 306, 307, 1063, 1404, + 1405, 1065, 1568, 1569, 3895, 1513, 308, 2982, 309, 4177, + 310, 1662, 5500, 311, 1101, 1595, 1596, 3446, 313, 1112, + 3631, 1114, 2402, 4381, 4382, 4995, 314, 315, 3609, 3634, + 316, 1948, 3138, 3139, 5185, 3447, 998, 1647, 3484, 3918, + 5871, 5626, 5872, 6344, 6507, 5627, 5885, 3817, 4584, 318, + 999, 1989, 3203, 1536, 1537, 3491, 4295, 3107, 3108, 2143, + 4934, 3110, 4297, 3111, 1922, 3112, 1485, 1486, 4303, 4304, + 4305, 4306, 4930, 4940, 4941, 5791, 6023, 4937, 3436, 5785, + 5786, 319, 1986, 3200, 320, 321, 322, 2026, 1328, 1546, + 1547, 323, 1024, 1025, 324, 5949, 325, 1488, 326, 5795, + 327, 328, 1136, 1137, 329, 330, 3217, 4693, 331, 1987, + 332, 333, 4049, 4050, 5284, 334, 335, 336, 2209, 2210, + 337, 338, 339, 340, 341, 6438, 6510, 6511, 6512, 4948, + 6349, 342, 1638, 343, 344, 345, 346, 943, 1370, 1371, + 1372, 1289, 3448, 5776, 348, 349, 1943, 1944, 1945, 1946, + 3133, 350, 351, 352, 4327, 4328, 353, 354, 355, 356, + 2194, 357, 358, 5922, 359, 360, 2164, 361, 362, 1378, + 1379, 1380, 1381, 2162, 3805, 958, 1202, 1814, 1820, 1824, + 1825, 1826, 364, 1080, 365, 1642, 1409, 1081, 1588, 1082, + 3041, 3847, 4599, 4600, 4601, 4604, 5610, 5158, 1083, 3843, + 369, 2409, 3618, 3621, 3839, 1084, 3852, 3853, 3854, 4607, + 1085, 1103, 1477, 3505, 1086, 1735, 374, 375, 376, 1211, + 1205, 1206, 3810, 5865, 6088, 378, 2928, 3779, 1121, 1830, + 1166, 1167, 1219, 3382, 3007, 3008, 3032, 3033, 1839, 1840, + 3020, 3024, 3025, 3829, 3823, 3013, 5140, 6075, 6076, 6077, + 6078, 6079, 6080, 5589, 3028, 3029, 1842, 1843, 1844, 3037, + 379, 3783, 4539, 4540, 4541, 5117, 5118, 6472, 5132, 5128, + 5574, 5848, 4542, 1632, 1850, 5582, 6474, 4543, 5837, 5838, + 6055, 5136, 4548, 4595, 4265, 4266, 4267, 4544, 6244, 6245, + 6468, 6469, 6057, 6058, 3113, 2296, 1515, 1736, 1516, 2304, + 1737, 2280, 1518, 1738, 1739, 1740, 1521, 1741, 1742, 1743, + 1524, 2272, 1744, 1745, 2290, 1251, 1252, 1815, 6059, 1747, + 1748, 1749, 4545, 1750, 5072, 5540, 5526, 3706, 3707, 2967, + 5068, 4483, 5062, 2923, 3769, 5860, 6082, 6083, 4523, 5096, + 5554, 5835, 6236, 6363, 6364, 6458, 1751, 1752, 1753, 3766, + 2916, 1331, 1754, 4840, 2918, 3700, 3678, 2146, 3679, 2415, + 2435, 3650, 3665, 3666, 3743, 3680, 3688, 3693, 3701, 3730, + 1755, 3652, 3653, 4424, 2437, 1756, 1376, 2149, 1377, 2936, + 3725, 1771, 1757, 1758, 2403, 1193, 5844, 788, 2151, 1118, + 1759, 1760, 1761, 1872, 731, 1539, 1540, 733, 2919, 772, + 773, 946, 884, 2920, 2, 70, 1087, 4274, 5759, 383, + 384, 1001, 1002, 1003, 1469, 1470, 2251, 2254, 1877, 3075, + 737, 738, 789, 5467, 5800, 6041, 1071, 385, 386, 387, + 388, 389, 1873, 3071, 1253, 71, 79, 72, 1254, 426, + 427, 3052, 390, 901, 391, 1853, 1233, 4613, 392, 393, + 394, 395, 396, 1068, 397, 1235, 398, 1236, 399, 400, + 401, 402, 1243, 403, 1855, 1856, 5172, 1857, 404, 405, + 775, 776, 1586, 406, 407, 1270, 2354, 1272, 1615, 1883, + 1897, 1898, 1899, 408, 745, 409, 410, 411, 1889, 1890, + 412, 2944, 2945, 3080, 2946, 413, 3868, 3869, 414, 4566, + 4567, 5595, 4568, 415, 2940, 416, 417, 1196, 4618, 418, + 897, 419, 1284, 777, 778, 779, 948, 887, 1152, 780, + 950, 4018, 889, 890, 781, 782, 783, 2379, 73, 3876, + 2380, 1763, 790, 1764, 2934, 1765, 1766, 1767, 1768, 1769, + 1770, 785, 1260, 1578, 1579, 3877, 1581, 77, 1582, 423, + 4344, 2355, 1616, 3566, 2365, 2366 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_int16 yytable[] = +{ + 75, 2145, 1210, 260, 363, 372, 269, 272, 377, 367, + 888, 368, 370, 273, 1382, 274, 420, 294, 1804, 312, + 1105, 317, 420, 347, 366, 1845, 371, 1302, 382, 1434, + 421, 1192, 2072, 774, 2159, 1335, 421, 1158, 1340, 1782, + 1220, 1772, 1105, 1329, 1195, 2312, 1230, 2286, 1231, 1012, + 3309, 2153, 1017, 420, 3109, 1871, 888, 74, 1928, 1623, + 1624, 1625, 1831, 1571, 1833, 1629, 3146, 3241, 2077, 1479, + 774, 1809, 2292, 3212, 1810, 4221, 2137, 2276, 2277, 3563, + 1480, 741, 1648, 2219, 1268, 787, 2426, 2285, 4404, 1796, + 1079, 1552, 1004, 1011, 377, 792, 1016, 3204, 2124, 420, + 1127, 4307, 1011, 2204, 892, 1565, 2071, 3888, 3890, 4550, + 1290, 1330, 3213, 4682, 3224, 2102, 2019, 3465, 2228, 4892, + 4385, 3109, 1589, 2302, 3624, 2129, 4104, 1900, 888, 4593, + 3789, 955, 1113, 1382, 4661, 2018, 4918, 3649, 3376, 1902, + 944, 4706, 1905, 4708, 1011, 1005, 1014, 1816, 4943, 1306, + 892, 1026, 5149, 941, 4255, 1271, 4244, 2192, 1338, 5192, + 2036, 2197, 3338, 3339, 4136, 2053, 2201, 3059, 3061, 3062, + 1330, 420, 1360, 1159, 886, 2211, 1214, 5227, 940, 1119, + 3519, 2384, 1990, 1403, 1222, 4606, 2161, 1562, 2231, 4841, + 5187, 1591, 1382, 3119, 1550, 5114, 3195, 1554, 1223, 1154, + 5445, 5424, 1146, 1614, 5131, 1181, 5384, 1154, 885, 1154, + 1429, 5423, 1189, 5441, 3334, 5434, 1438, 3053, 3053, 1208, + 886, 1789, 892, 4582, 5771, 3553, 3788, 2270, 1451, 4491, + 5841, 1102, 1480, 1330, 5252, 5960, 5778, 4180, 3803, 4183, + 4184, 3365, 5739, 3832, 4188, 4189, 4190, 5433, 4192, 4193, + 4194, 3835, 3195, 1102, 885, 5650, 3811, 1985, 1382, 2350, + 4622, 4902, 1809, 2273, 2274, 4507, 2276, 2277, 5164, 3195, + 1382, 5628, 1263, 6000, 2284, 5853, 2292, 5855, 6013, 2371, + 5996, 1838, 1892, 1841, 4617, 2942, 2285, 5893, 4966, 1580, + 1985, 5770, 886, 2303, 5129, 1985, 5134, 1879, 1880, 962, + 1473, 5531, -3463, -2251, 3175, 6192, 4448, -1898, 2227, 39, + 429, -3463, -3463, 260, 363, 372, 269, 272, 377, 367, + -1865, 368, 370, 273, 1892, 274, 885, 294, 5914, 312, + -1878, 317, -3464, 347, 366, 420, 371, 2263, 382, 429, + 2377, -3464, -3464, -3461, 38, 39, 2980, 1664, 1665, 421, + 40, -1903, -3461, -3461, 5502, 5503, 5504, 39, 5506, 5507, + 5508, 5509, 5510, -1906, 2184, 1957, 3345, 3350, 1882, 1885, + 420, 1601, 4611, 1259, -1893, 1606, 1607, 1608, -1906, -3460, + 3685, -2635, 39, 6179, 421, 1619, 1285, 4254, -3460, -3460, + -2635, -2635, 39, 5394, 5415, 3723, 2481, 429, 1288, -2250, + 2263, 3723, 39, 2241, 5625, 39, 1640, 425, 429, 1657, + 4402, 3215, 3433, 38, 39, 3215, 6116, 2356, 4161, 40, + 2407, 1786, 4928, 2263, 4211, 3934, 35, 2987, 2926, 2189, + 37, 4662, 6408, 35, 429, -3191, 1366, 37, 1480, 38, + 39, 429, 5448, 2273, 2274, 40, 38, 39, 429, 1664, + 1665, -2145, 40, 38, 3763, 3407, 3130, 5767, -2145, 40, + 2989, 3764, 1775, 5793, 1217, 3004, 3140, 5924, 5925, 2284, + -2164, 1612, 1916, 5608, 4199, -2431, 2263, -2164, 429, 1958, + 3495, 6347, 4255, 2153, 2134, 2206, -153, 6102, 5395, 40, + 3425, -153, 3326, 4872, 6451, 3215, -1720, -153, 5923, 6339, + 3462, 2137, 6151, 3496, 5374, 2171, 6194, 3782, 5200, 2176, + 3770, 2177, 1957, 5892, 2481, 3430, 4067, 6502, 6503, 2175, + 4448, 5270, 1460, 3262, 2263, 3276, 5732, 3011, 4830, 4074, + 2263, 2353, 2263, 3190, 4212, 2263, 1367, 3215, 4393, 6113, + 1627, 5150, 4255, 1164, 3142, 2987, 6069, 739, 3332, 2949, + 4889, 3921, 2957, 2933, 6144, 1287, 2055, 1231, 4551, 6145, + 6001, 4552, 4553, 6353, 3143, 1584, 429, 35, 429, 429, + 4068, 37, 4554, 4555, 4556, 5396, 4557, 4558, 2989, 40, + 40, 4559, 4560, 4561, 6327, 1368, 2929, 1330, 1200, 2418, + 3215, 2166, 5201, 2320, 2056, 6354, 2981, 3293, 3152, 2960, + 2929, 4765, 429, 5151, 2973, 2973, 3215, 5988, 4074, 6146, + 3215, 3922, 2476, 4448, 5920, 5636, 3215, 3633, 4394, 2264, + 2950, 2190, 898, 3012, 899, 1106, 1958, 1628, 3191, 4069, + 2976, 2977, 6568, 5271, 3431, 6409, 2294, 5921, 3633, 2932, + 1004, 2310, 1369, 6430, 5733, 1266, 1267, 1106, 1165, 1503, + 5375, -441, 3771, 5202, 6554, 6152, -3191, 5203, 2343, 2308, + 2135, 3263, 4873, 6348, 2153, 3497, 2190, -1720, 4422, 2319, + 1917, 2958, 2404, 2322, 3380, 4200, 5952, 2325, 2475, 2327, + 3463, 4938, 2264, 3426, 6309, 2335, 5609, 4662, 2417, 1011, + 1011, 2341, 1613, 1005, 2344, 1949, 3408, 6338, 4841, 1130, + 1612, 1614, 2427, 6268, 5794, 2264, 1614, 2430, 3418, 2360, + 3277, 3144, 2927, 1959, 6410, 1300, -2431, 4858, 1480, 5763, + -3191, 4213, 1893, 5286, 2408, 2481, 3180, 6496, 1018, 1612, + 5397, 1641, 4562, 4070, 3351, 3935, 1259, 1628, 1628, 5393, + 4822, 4823, 6411, 963, 1353, 3364, 2025, 2271, 3225, 3963, + 3614, 3724, 1888, 2408, 2190, 1257, 2987, 4512, 2264, 1264, + 3327, 4162, 3346, 3352, 1893, 5954, 3374, 3375, 2190, 5197, + 5131, 3182, 5824, 1914, 3645, 2265, 1960, 1659, 5571, 5442, + 2378, 3189, 5575, 6187, 3255, 3434, 4463, 1131, 2943, 2989, + -2431, 4929, 1374, -3463, -2251, 3046, 1375, 1276, -1898, 2349, + 5398, 3314, -2431, 6542, 3304, -2145, 2264, 3307, 3765, 1950, + 4214, 2275, 2264, 1265, 2264, 2287, 2136, 2264, 3000, 6495, + 3526, 2279, 1374, -3464, -2164, 3145, 1375, 1894, 1895, 4038, + 2287, 1210, 5613, 6422, -3461, 4608, 2288, 2955, 2293, 6432, + 420, 3373, -1903, 3555, 420, 6421, 6566, 3256, 1480, 5812, + 1465, 2288, 3464, 2190, 2289, 4071, 1480, 1480, 421, 6450, + 5562, 2307, 5564, 4072, 3294, -1893, 4073, 3297, 3298, 2291, + -3460, 3333, -2635, 2478, 2361, 4563, 2915, 2363, 4890, 3615, + 2367, 942, 2369, 2930, 3531, 2372, 4624, 1846, 4625, 2376, + -2250, 892, 1593, 3794, 3594, 1413, 6583, 5593, 377, 1410, + 6293, 1411, 1412, 4760, 4761, 3606, 4841, 3038, 4762, 3039, + 1475, 3076, 1201, 6395, 2318, 5007, 5474, 5475, 5476, 5477, + 5478, 3153, 1869, 1870, 4766, 900, 6399, 6106, 6498, 1894, + 1895, 6368, 1631, 4564, 5637, 4890, 1869, 1870, 2310, 1244, + 4803, 3199, 2045, 3584, 5214, 3859, 1132, 1594, 3381, 1600, + 5257, 1605, 1259, 1798, 1011, 6098, 5356, 1609, 1407, 4994, + 4883, 886, 2340, 5352, 5026, 2046, 1099, 1100, 2343, -1632, + 2310, 1951, 4902, 4994, -153, -153, 4939, 3395, 4570, 6331, + 3651, 1600, 1605, 1653, 5953, 3875, 6337, 1133, 1134, 3879, + 3199, 2912, 2913, 2914, 2915, 885, 6310, 4460, 4461, 4462, + 4463, 6541, 5177, 5355, 2298, 1301, 1631, 3199, 1019, 1952, + 377, 2263, 35, 2927, 1245, 1585, 37, 4859, 1222, 1011, + 35, 1481, 1026, 4311, 37, 1425, 6190, 39, 2350, 6319, + 39, 4817, 1223, 2058, 39, 6486, 1224, 1849, 4030, 3574, + 3954, 3832, 1093, 1953, 4565, 3577, 6330, 1533, 4587, 3, + -1632, 3516, 3517, 6453, 1666, 2059, 1273, 4448, 3226, 4576, + 6252, -3465, -3465, -3465, 1459, 75, 1094, 1020, 1590, 3837, + 3954, -1719, 3227, 6587, 3228, 1246, 3715, 3748, 1247, 1245, + 3264, 4843, 743, 3616, 1135, 1599, -2376, 1604, 4458, 4459, + 4460, 4461, 4462, 4463, 1217, 2108, 39, 1618, 4389, 5993, + 6036, 1860, 1932, 3617, 2223, 1021, 2060, 1022, 5950, 1130, + 4312, 1954, 1964, 3967, 1259, 3954, 774, 1634, 1636, 5162, + 6423, 3955, 74, 1225, 1639, 6524, 3625, 1460, 4846, 5465, + 1620, 4391, 35, 6431, 3659, 3229, 37, 6266, 2109, 420, + 1246, 4609, 6271, 2299, 5192, 3056, 3065, 2224, 5285, 3066, + 2153, 3955, 6440, 1811, 3595, 1933, -1632, 5692, 1658, 428, + 1598, 5913, 1603, 39, 1881, 1785, 1215, 1154, 1776, 1793, + 39, 1154, 1788, 1481, 1790, 3838, 5409, 1817, 373, 902, + 1884, 5693, 5898, 3565, 2446, 3174, 4848, 4657, 3478, 1248, + 791, 5001, 1633, 1635, 1799, 2061, 3955, 1131, 6454, 1779, + 2910, 2911, 2912, 2913, 2914, 2915, 4839, 1666, 3968, 3660, + 4448, 1461, 1382, 2310, 4449, 4450, 4451, 3749, -1632, 3513, + 3057, 1330, 3750, 903, 6504, 1941, 6213, 1612, 6508, 5842, + 5845, 3956, 1216, 3140, 4255, 5849, 6048, 4255, 5851, -2247, + 6440, 3887, -1719, 2062, 959, 4031, 2063, -1865, 1023, 5987, + 1093, 6465, 3141, 1934, 1248, 123, 124, 3154, 1116, 3751, + 3067, 3308, 741, 741, 373, 3603, 3604, 1904, 1800, 3957, + 3661, 6172, 6214, 3662, 1094, 2152, 6037, -1635, 5757, 5723, + 1653, 3058, 5769, 4444, 4851, 5313, 5382, 3982, 6186, 2310, + 6540, 6201, 3964, 2264, -2412, 2065, 5788, 3958, 6185, 4935, + 1249, 6189, 3312, 6171, 4164, 1874, 6200, -2376, 1217, 1621, + 2110, 3142, 3892, 3129, 1274, 1426, 5620, 4944, 420, 2225, + 1072, 4313, 4390, 1250, 1903, 4021, 4852, 3958, -1632, -1865, + 4454, 3143, 744, 6188, 6150, 4314, 6567, 1534, 4255, 2067, + 1073, 3557, 4853, 1154, 1154, 5002, 1146, 2094, 1226, 3474, + 2476, 893, 1209, 6440, 3534, 4392, 1132, 1462, -1635, 1861, + 6585, 894, 2068, 6586, 4176, 2300, 1874, 4039, 3546, 892, + -1632, -2376, 3958, -1632, 3475, 1074, 3646, 3648, 4171, 1481, + 4022, 3552, 2070, 3655, 3663, 1613, 3899, -691, 3593, 3669, + 3670, 3671, 3598, 4452, 1463, 1248, 3602, 1133, 1134, 3605, + 3690, 1613, 6466, 3752, 4945, 3702, 35, 6467, 3155, 3515, + 37, 3861, 3596, 3861, 2111, 4453, 3195, 1938, 1666, 1939, + 3533, 4448, 6141, 2226, 6143, 4449, 4450, 4451, 6147, 6148, + 2298, 4750, 6096, 4684, 4588, 3537, 1874, 1072, 5499, 886, + 4854, 5694, 3543, 3544, 4658, 6243, 6049, 1218, 1269, 3309, + 1374, 2037, 6158, 1464, 1375, 1465, 3532, 1073, 5314, 1466, + 1666, 1237, 3551, 4448, -1635, 895, 1614, 4449, 4450, 4451, + 3508, 3545, 1614, 885, 3547, 3571, 6175, 4023, 3144, 5383, + 1238, 6328, 1221, 4454, 5077, 6183, 2481, 6112, 373, 1210, + 1239, 3917, 1074, 4547, 6406, 3664, 1932, 1093, 3156, 5420, + 5612, -1865, 5367, 3440, 3676, 1245, 5492, 5528, 6065, 1330, + 1330, 5736, 2282, 2283, 2480, -2412, 5496, 2481, 3921, 2113, + 3893, 1094, 3894, 2249, 5421, 2114, -1635, 2329, 377, -3465, + -3465, -3465, 4458, 4459, 4460, 4461, 4462, 4463, 6226, 4951, + 4608, -2433, 3597, 5455, 4952, 3600, 3601, 4685, 2987, 1933, + 2989, -1075, 1106, 5265, 1106, -3465, 1106, 202, 3784, 4946, + 5152, 3091, 1106, 1231, 6386, 2038, 1246, 3476, 6520, 2299, + 2330, 5193, 5369, 5368, 75, 75, 1093, 75, 4640, -2412, + 3057, 2989, 6159, 6233, 3441, 1585, 1106, 1106, 212, 4255, + 4255, 2362, 3145, 2364, 1240, 39, 2368, 3242, 2370, 4296, + 1094, 2373, 2374, 2375, 4731, 4589, 2153, 4445, 4446, 896, + 3787, 3158, 4465, 6263, 2382, 2310, 6491, 3474, 5529, 3109, + -2470, 3159, 6002, 3109, 220, 3148, 4453, 2985, 2410, 4947, + 2411, 74, 74, 2115, 74, 2412, -1635, 3005, 3006, 5420, + 3010, 3058, 3475, 2286, 4024, 1330, 4841, 1934, 6521, 4495, + 4496, 1223, 1223, 3149, 1223, 3644, 5373, 6160, 1849, 1481, + 6532, 975, 5346, 1241, 5421, 5266, 231, 5350, 4453, 6321, + 1075, 4120, 6269, 3844, 202, 3242, 6003, 4121, -1635, 234, + 1248, -1635, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, + 4463, 6004, 3586, 5411, 4454, -3465, 4575, 2007, -1865, 4597, + -3465, 6352, 246, 3014, 6007, 212, -1865, 1935, 2275, -1865, + 1927, -1865, 6008, 3306, 1106, 4839, 5414, 5422, 4732, 3567, + 1076, 977, 774, 774, 1828, 6234, 5370, 2039, 739, 739, + -603, 5153, 6522, 1901, 2477, 4598, 4454, -3465, 1242, 1366, + 5283, 220, 2331, 2479, 6093, 1936, 3015, 6428, 6429, 205, + 3814, 4686, 4687, 3134, 3353, 1248, 6235, 2931, 3243, 902, + 1666, 3610, -2433, 4448, 3135, 2040, 1408, 4449, 4450, 4451, + 5267, 5967, 6492, 1366, 6533, 1106, 5037, 1120, 5038, 1937, + 3160, 4688, 3136, 231, 5078, 4122, 3907, 3244, 3586, 1481, + 2994, 2300, 2962, 2964, 3060, 2116, 234, 1481, 1481, 2041, + 420, 420, 420, 903, 3150, 2947, 2948, 3797, 1452, 1646, + 1834, 1938, 3245, 1939, 2301, 421, 421, 2256, 3161, 246, + 4255, 774, 6420, 4254, 4255, 5968, -2433, 2152, 5969, 1829, + 5179, 2257, 3059, 2117, 5970, 5751, 3243, 247, 6392, 1367, + 3815, -2470, 1834, 6178, 1453, 1106, 2332, 3611, 1835, 1874, + 420, 3240, 6193, 3845, 1874, 1874, 3017, 6325, 420, -1102, + 1834, 2042, 5971, 1940, 421, 3244, 6005, 2118, 4149, 1128, + 420, 1575, 3095, 1367, 2114, 3864, 741, 6523, 6009, 1454, + 4733, -3465, 4053, 1836, 1349, 1799, 4772, 2258, 1368, 988, + 3245, 989, 3354, 4455, 4456, 4457, 4458, 4459, 4460, 4461, + 4462, 4463, 3586, 3836, 3073, -2470, 1129, 3329, 1248, 6094, + 1773, 6543, 5039, 6494, 1350, 1836, 3018, 993, 4734, 5972, + 212, 892, 1368, 4839, 3068, 3069, 3909, 1455, 1970, 3240, + 1837, 1154, 5973, 1836, 3137, 4455, 4456, 4457, 4458, 4459, + 4460, 4461, 4462, 4463, 5974, 1369, 975, 4123, 1900, 3087, + 3089, 4674, 4735, 5811, 6506, 885, 220, 4054, 3299, 1800, + 1902, 4687, 1837, 1905, -1644, 6085, 1660, 4126, 4453, -1069, + 3980, 1653, 1154, 1941, 6035, 4763, 2007, -1644, 1941, 1369, + 4086, -3465, 2115, -1644, 1774, 4124, 5255, 2259, 2074, 6539, + 5243, 886, 2910, 2911, 2912, 2913, 2914, 2915, 231, 5633, + 1795, 4134, 2256, -2272, 2027, 4127, 977, -176, 38, 5180, + 4129, 234, 3910, 1069, 40, 5181, 2257, 3109, 1163, 4125, + 6279, 1874, 5182, 960, 4675, 885, 2075, 3109, 1154, 1592, + -1644, 1874, 5738, 212, 246, 6086, 4454, -176, 6329, 4128, + 4348, 1160, 3242, 2260, 956, 1154, 6346, 3232, 4764, 956, + -1644, 1941, 3846, 1666, 4085, 1941, 4448, 5183, 979, 5256, + 4449, 4450, 4451, 5200, 3309, 1093, 3149, 6570, 373, 220, + 5634, 5762, 3570, 5875, 3313, 5877, 2028, 5546, 5740, 5184, + -1690, 3233, 3321, 5719, 4673, 1197, -1690, 1190, 1645, 1094, + 3417, 4110, 6280, 6170, 957, 3300, 3608, -1644, 3301, 1213, + 4769, 4087, 5122, 5230, 4241, 3801, -1644, 4255, 3109, 4090, + 6345, 231, 4093, 6024, 1874, 76, 5720, 1874, 1874, 5749, + 3014, 2045, 904, 902, 5019, 4155, 5741, 4259, 4260, 4261, + 4262, 5975, 4264, 420, 5976, 5123, 2076, 5231, 975, 2261, + 2310, 902, 961, 6204, 2046, 2083, 3999, 5201, 5364, 4770, + 5577, 4060, 4061, -1690, 1812, 4064, 1066, 4292, 3335, 2104, + 5125, 6562, 4171, 3015, 2190, 247, 1823, 903, 4812, 4135, + 4130, 3588, 2259, 5727, 988, 5365, 989, 4165, 4166, 4167, + 373, 1209, 6424, 1918, 892, 903, 422, -1102, 4001, 1203, + 1480, 5710, 422, 5711, 5712, 5713, 742, 2105, 977, 992, + -1690, 2106, 2205, 3243, 4131, 6434, 3367, 4000, 5202, 1161, + 2084, 6594, 5203, 6221, 3450, 3215, 1212, 5232, 3455, 3619, + 3280, 1919, 4767, 422, 3016, 3283, 3216, 1874, 2260, 2287, + 1234, 2107, 3244, 1929, 6273, 4455, 4456, 4457, 4458, 4459, + 4460, 4461, 4462, 4463, 3368, -1644, 953, 4325, 4981, 4002, + 2288, 3977, 2085, 3318, 886, 1920, 3630, 3245, 1106, 2086, + 1006, 4453, 2087, 1106, 1106, 4255, 6149, 4804, 2289, 422, + 2481, 1930, 4255, 3017, 6497, 6182, 1227, 4255, 5127, 3215, + 4255, 3944, 3319, 3948, 3949, 2045, 5147, 1215, 885, 5897, + 3223, -466, 1269, 3947, 377, 2965, 3240, 3242, 3356, 3242, + -1691, 2987, 3362, 3435, 2229, 1931, -1691, 3242, 2046, 4255, + 3242, 1374, 2045, 4240, 1821, 1375, 1221, 3589, 1155, 4101, + 5121, 4102, 6043, 4255, 2261, 4106, 1155, 2230, 1155, 4454, + 3242, 5594, 5928, 3018, 2989, 2046, 1666, 4914, 2966, 4448, + 4254, 422, 739, 4449, 4450, 4451, 75, 2343, 1413, 75, + 3590, 377, 1410, 1216, 1411, 1412, 3572, -1480, 3573, 3299, + 5547, 1330, 3575, 3591, 3576, -3256, 988, 3578, 989, 2287, + 3941, 3579, 6028, -1691, 5033, 5034, 5035, 5036, 3873, 2045, + 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, + 2288, 3629, 4573, 4132, 2205, 5122, 6029, 8, 3592, 6394, + 1313, 3721, 2046, 74, 4378, 6569, 74, 1314, 1315, 1316, + -466, 1923, 6262, 3366, 2080, 3965, 4843, 3232, 5920, 1275, + -1691, 2088, 4844, 4040, -1481, 4993, 4758, 4133, 5123, 1217, + 1106, 4285, 3242, 6534, 5889, 4845, 115, 5087, 5088, 3976, + 1106, 5921, 3667, 5124, 420, 1924, 4768, 205, 5934, 1925, + 2337, 3233, 2081, 5125, 119, 2089, 4329, 6535, 3243, 2090, + 3243, 3369, 2343, 4846, 1296, 4847, 1277, 1278, 3243, 4994, + 5879, 3243, 3242, 2338, 3370, 4728, 3531, 3279, 5887, 5126, + 4716, 4255, 4643, 1926, 1791, 1279, 2082, 3244, 1280, 3244, + 4245, 3243, 4717, 2091, 5935, 892, 3300, 3244, 5839, 3301, + 3244, 1666, 1288, 3371, 4448, 422, 5846, 2953, 4449, 4450, + 4451, 5449, 3245, 4729, 3245, 4066, 4952, 2058, 6484, 5936, + 3244, 4848, 3245, 1106, 1286, 3245, 1106, 1106, 4455, 4456, + 4457, 4458, 4459, 4460, 4461, 4462, 4463, 5937, 2287, 2059, + 422, 5938, 5193, 212, 4453, 3245, 3808, 4730, 4805, 4849, + 4255, 3240, 3220, 3240, 3221, 5930, 5193, 1311, 3270, 2288, + 5315, 3240, 5332, 5939, 3240, 886, 5940, 1298, 1218, 3809, + 3526, 5127, 4400, 4401, 5920, 3287, 4621, 2291, 1281, 220, + -390, 5941, 1312, 5316, 3240, 5333, 2480, 4549, 5216, 2481, + 2060, 3526, 1355, 3243, 4152, 4377, 3437, 5921, 4612, 885, + 6549, 2973, 1374, 6550, -2251, 3731, 1375, 3732, 1364, -390, + 2048, 1282, 4454, 6537, 4850, 3222, 3467, 189, 4628, 4851, + 2987, 231, 3244, 2275, 1365, 3120, 6205, -3465, 4447, 2121, + 4323, 3733, 2125, 3243, 234, 1373, 1106, 3802, 4332, 1231, + 4475, 4968, 4969, 4970, 4971, 4972, 3242, 3245, 1415, 2035, + 4623, 5472, 1283, 2989, 2052, 4347, 5236, 246, 1417, 5847, + 5652, 4852, 3244, 4839, 1422, 4353, 5242, 5657, 4354, 5942, + 4355, 4356, 4498, 1435, 4358, 247, 4580, 4853, 4361, 2061, + 4362, 6099, 1448, 4364, 4663, 5176, 3240, 3245, 4255, 6104, + 2275, 6115, 3120, 2045, 1458, 2058, 6119, 6120, 373, -602, + 1374, 35, 2351, 4571, 1375, 37, 2352, 1456, 6481, 4453, + 4692, 212, 3049, 3050, 5193, 4525, 2046, 2059, 2154, 5943, + 2155, 6388, 4497, 1427, 4666, 1428, 3240, 2062, 2938, 1452, + 2063, 1468, 2939, 3734, 3735, 3736, 3737, -390, -390, 1457, + 3738, 3739, 5233, 4679, 5240, 3308, 3740, 220, 3734, 3735, + 3736, 3737, 4410, 4255, 4412, 4413, 5224, 4406, 1471, 3109, + 2351, 1430, 5259, 1431, 3562, 1453, 4418, -3465, 2060, 5235, + 2998, 5363, -3465, 2434, 429, 4854, 3154, 4454, 5215, 2065, + 2359, 4419, 2155, 6016, 4500, 4420, 4501, 5416, 4474, 231, + 4476, 4477, 4255, 2443, 1821, 3708, 4510, -1632, 3711, 4723, + 4884, -3200, 234, 4970, 4971, 4972, -3201, 3243, 1006, -3465, + 4502, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, + 2275, 1478, 1927, 2067, 2460, 246, 2419, 1532, 2155, 6547, + 4900, 3378, 3379, 5006, 5236, 5258, 3244, 1483, 2433, 2473, + 247, 4407, 1487, 247, -1406, 1541, 2068, -1406, 1455, 2984, + 2997, 2155, 2998, 1480, 123, 124, 3002, 2061, 2155, 3049, + 3857, 3245, 2994, 3503, 1542, 3504, 2070, 5121, 2275, 4526, + 3120, 4527, 1548, 4831, 4367, 1319, 1320, 1321, 1322, 1323, + 1324, 1325, 1326, 1327, 3564, 1559, 2998, 4887, 4528, 1566, + 4529, 4255, 3741, 5519, 3585, 5520, 3586, 4963, 4964, 5614, + 3240, 1067, 3587, 3742, 3586, 2062, 956, 6595, 2063, 3833, + 3834, 4632, 3734, 3735, 3736, 3737, 3804, 1626, 3622, 4503, + 3623, 40, 3807, 3308, 2343, 4504, 420, 5237, 3856, 3974, + 2998, 3975, -1714, -1714, 2058, 1221, 1221, 1330, 1221, 4045, + 421, 4046, 5122, 4205, 4330, 4206, 2998, 4860, 4369, 4417, + 3586, 2998, 1587, -3465, 4629, 4630, 2059, 2065, 4426, 3795, + 2998, 4968, 4969, 4970, 4971, 4972, 3911, 5435, 3914, 4973, + 4911, 1622, 4912, 3848, 5762, 5123, 4455, 4456, 4457, 4458, + 4459, 4460, 4461, 4462, 4463, 4650, 5839, 4432, 3962, 2998, + 5124, 4433, 3908, 2998, 1630, 420, 1480, 420, -1717, -1717, + 5125, 2067, 4434, 4467, 2998, 2998, 1637, 2060, 4581, 421, + 422, 421, 1643, 4480, 422, 2998, 1644, 4485, 953, 4486, + 2152, -1718, -1718, 5428, 2068, 5193, 5126, 953, 742, 4709, + 1259, 4710, 4714, 1646, 4715, 953, 4296, 742, 953, 4739, + 1650, 4740, 4255, 4801, 2070, 4740, 5238, 1651, 4646, 5239, + 4922, 742, 4923, -3465, 4926, 4959, 4927, 4960, 4773, 4961, + 3109, 2998, 1652, 420, 2910, 2911, 2912, 2913, 2914, 2915, + 742, 4505, 741, 5058, 5357, 5059, 5358, 3831, 3831, 5069, + 1656, 5070, 4506, 1631, 1631, 6365, 6366, 1631, 1904, 742, + 1653, 75, 75, 6459, 6460, 742, 2061, 1654, 5080, 4744, + 2998, 1661, 5160, 1666, 5161, 1655, 4448, 742, 6436, 189, + 4449, 4450, 4451, 5165, 892, 5166, 1663, 4753, 5127, 4696, + 5175, 4698, 3894, 1794, 6335, 1874, 1476, 4255, 5199, 1801, + 3586, 1481, 5417, 4255, 3586, 5493, 742, 2408, 1797, 1802, + 4028, 953, 1803, 1808, 2062, 1903, 1531, 2063, 74, 74, + 953, 742, 5516, 1813, 2998, 3240, 5576, 953, 5579, 742, + 953, 2480, 3308, 4051, 2481, 3787, 1819, 1818, -3465, -3465, + -3465, 35, 1531, 742, 5605, 37, 1821, 1822, 4100, 420, + 76, 1832, 1847, 420, 886, 5556, 4878, 2998, 1848, 742, + 1790, 5616, 1154, 3894, 1851, 2987, 2065, 4227, 1854, 5195, + 5196, 1852, 2988, 212, 3531, 5622, 420, 5623, 5629, 5630, + 3586, 3586, 5764, 5803, 5765, 4960, 5013, 5821, 885, 5822, + 5823, 5242, 2998, 5962, 5982, 5963, 3586, 6017, 2989, 6018, + 892, 6052, 1862, 6053, 892, 6062, 6068, 2343, 4897, 220, + 2067, 212, 6070, 1858, 4897, 1631, 4255, 6091, 742, 6092, + 6134, 6174, 6135, 2952, 4051, 1867, 4891, 892, 4861, 4791, + 4863, 4067, 6202, 2068, 6092, 4798, 4997, 1790, 6229, 1480, + 4486, 1480, 4871, 1154, 4874, 5193, 2137, 220, 1859, 953, + 953, 231, 1863, 2070, 1790, 3787, 1155, 6230, 742, 2998, + 1155, 6241, 1864, 6242, 234, 1876, 6247, 420, 2343, 1865, + 886, 5649, 1866, 6250, 886, 4897, 6272, 1868, 3586, 422, + 6278, -3465, 3623, 1875, 742, 4068, 953, 246, 1878, 231, + 4209, 6284, 6285, 3623, 3623, 1906, 742, 886, 6288, 6289, + 2998, 2998, 234, 1907, 885, 6437, 1908, 6290, 885, 6291, + 1927, 6317, 2990, 6318, 6372, 4932, 6373, 2991, 892, 1921, + 4146, 1874, 6376, 1962, 2343, 246, 1480, 1988, -3462, 1874, + 6335, 885, 1874, 420, 1991, 6377, 5193, 2998, 4228, 6403, + 6426, 6404, 6427, 247, 4069, 4990, 1993, 742, 742, 4454, + 6461, 6475, 4897, 2998, 2993, 1994, 2029, 4178, 5030, 4178, + 2030, 4178, 4178, 6477, 2031, 2998, 4178, 4178, 4178, 4581, + 4178, 4178, 4178, 6505, 6531, 6092, 6255, 6545, 1947, 6546, + 6565, 6590, 2998, 6591, 892, 6592, 2025, 6373, 886, 2042, + 2054, 5211, 5057, 5137, 5234, 6608, 2044, 6591, 2057, 2079, + 2095, 2096, 2112, 2122, 2123, 2126, 2131, 2994, 2132, 1210, + 2133, 2163, 2165, 5815, 2172, 2167, 2178, 5005, 2183, 2186, + 2188, 2193, 885, 2196, 2198, 4258, 2190, 2207, 2208, 2212, + 2213, 4253, 1155, 1155, 373, -196, 2215, 2216, 5099, 2218, + 2220, 4974, 2232, 4976, 2221, 4978, 2239, 2243, 4070, 5193, + 4286, 2247, 921, 1210, 886, 2253, 953, 953, 422, 2262, + 2267, 2269, 2268, 2271, 742, 2275, 2279, 2278, 2281, 953, + 2295, 2305, 2297, 2306, 1531, 953, 2309, 2310, 2317, 953, + 5462, 953, 2321, 2323, 2324, 1531, 2326, 2328, 885, 2333, + 2334, 373, 4229, 2336, 4343, 5338, 1259, 2339, 2996, 2342, + 1531, 2346, 2345, 2357, 1106, 2383, 2416, 2422, 739, 2424, + 2425, 2431, 2432, -1869, -1876, 2438, 5282, 2439, 2441, 2440, + 2442, 247, 2444, 2445, 1901, 2446, -1867, 2447, 2448, 2449, + 2450, 5351, 2452, 2453, 2454, 2455, -1870, 2456, -1868, 2457, + 2458, 4230, 953, 2459, 953, 953, 2461, 2462, 4455, 4456, + 4457, 4458, 4459, 4460, 4461, 4462, 4463, 5784, 2463, 2464, + 2922, 2465, 2466, 2924, 4531, 4532, 4533, 1106, 2467, 2468, + 4071, 1210, 2926, 4481, 2927, 2952, 2956, 2968, 4072, 4488, + 1612, 4073, 5541, 2983, 3001, 5343, 2978, 3003, 1835, 3034, + 1837, 1531, 3036, 3045, 3048, 1248, 3070, 3055, 2906, 3063, + 3072, 3074, 3083, 3085, 3093, 3082, -3465, -3465, -3465, 2910, + 2911, 2912, 2913, 2914, 2915, -3404, 420, 3090, 3096, -3409, + 3094, 3097, 420, 3098, 1874, 3099, 3115, 3116, 3117, 3118, + 3120, 742, 3121, 3122, 3124, 3123, 3125, 3126, 3151, 3132, + 3157, 3163, 3177, 3181, 3183, 3184, 3185, 2480, 3187, 3188, + 2481, 3201, 3205, 3219, 2482, 2483, 2484, 3207, 3206, 76, + 76, 3218, 76, 3236, 3237, 3230, 3234, 892, 3238, 3239, + 953, 2986, 3240, 892, 3247, 3249, 3250, 3248, 3251, 3252, + 3257, 2987, 3261, 3271, 3258, 3267, 3268, 3272, 2988, 3273, + 3274, 3275, 3278, 3288, 3281, 3305, 3284, 3295, 3285, 3302, + 3290, 2007, 3291, 3320, 3303, 3310, 3311, 3316, 3317, 3322, + 742, 6045, 3323, 3324, 2989, 3325, 3328, 3336, 3330, 3331, + 2480, 3347, 3729, 2481, 1531, 3348, 742, 2482, 2483, 2484, + 1106, 3337, 3349, 3384, 3355, 3377, 3389, 886, 1106, 3360, + 742, 1106, 3391, 886, 742, 3392, 3393, 3394, 3405, 3398, + 3410, 3399, 3400, 1106, 2987, 953, 3402, 3411, 3403, 4253, + 3404, 2988, 3412, 3406, 1481, 3413, 5489, 3421, 3420, 3424, + 970, 885, 3429, 3435, 3438, 3449, 2076, 885, 3453, 3454, + 3466, 2153, 3469, 3457, 3472, 953, 3473, 2989, 3493, 3499, + 3482, 3506, 3518, 3486, 3490, 3525, 3536, 3500, 3511, 3538, + 3512, 3540, 3520, 3521, 3539, 3541, 3787, 3528, 3529, 3526, + 3554, 3581, 3607, 953, 953, 953, 3582, 953, 3620, 4253, + 3703, 1874, 3599, 3632, 3651, 3709, 2481, 3768, 2990, 2921, + 3722, 3747, 3713, 2991, 3767, 3656, 3728, 953, 3745, 3782, + 3793, 1216, 3791, 3798, 3799, 4586, 4586, 3800, 3825, 3827, + 3826, 3849, 5428, 3790, 3842, 2992, 2668, 3866, 3796, 2942, + 3813, 3828, 3883, 3884, 3863, 3912, 3917, 3919, 3865, 3886, + 2993, 3915, 3920, 3926, 742, 3931, 3936, 2963, 4581, 3937, + 3939, 3950, 742, 742, 3966, 1791, 3942, 5389, 5390, 3971, + 1795, 3973, 4009, 3983, 3990, 4003, 4008, 4034, 4035, 4041, + 4036, 2990, 4044, 4581, 4052, 4138, 2991, 1481, 4080, 2718, + 6101, 4159, 4160, 4059, 4079, 953, 4163, 4151, 4096, 953, + 953, 1217, 5745, 2994, 420, 420, 420, 4179, 2992, 2668, + 4172, 4185, 4191, 4196, 953, 4207, 4218, 4233, 4186, 4187, + 422, 422, 422, 2993, 4237, 4219, 4235, 4248, 4263, 4257, + 4268, 6240, 4269, 4270, 5484, 5485, 5486, 5487, 5488, 4271, + 4239, 742, 4272, 4273, 4276, 4283, 4281, 4284, 4287, 4293, + 4288, 4308, 4279, 5527, 4309, 892, 892, 892, 4319, 4310, + 4320, 4321, 2718, 4322, 4324, 4712, 4326, 4333, 4331, 4336, + 422, 4337, 4334, 4335, 3066, 4357, 2994, 4360, 422, 4365, + 4363, 5603, 4345, 4346, 1531, 4359, 4371, 4384, 4372, 5656, + 422, 4373, 2343, 4374, 2996, 4375, 4376, 4386, 3633, 2340, + 1155, 2307, 4388, 1947, 4387, 4395, 4405, 1947, 4398, 4403, + 4411, 4431, -2137, 1106, 4482, 4499, 1628, 4508, 4751, 4428, + 4547, 4522, 4577, 4590, 4592, 886, 886, 886, 4517, 4494, + 4429, 4430, 4435, 4436, 4626, 4583, 4594, 4440, 4442, 4443, + 5717, 1155, 4164, 2998, 4603, 4444, 3729, 4642, 4631, 4921, + 4610, 1531, 5481, 4466, 4471, 5483, 3417, 4472, 4615, 885, + 885, 885, 2351, 4479, 4493, 4518, 4581, 2996, 4520, 4521, + 4524, 4578, 4596, 4616, 4619, 4620, 4614, 4638, 4645, 4639, + 5498, 4647, 4659, 4660, 4634, 4670, 4671, 4794, 1531, 4633, + 4672, 4676, 4677, 4678, 2906, 4679, 373, 1155, 4694, 420, + 4683, 5784, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, + 2915, 4695, 4697, 4705, 1155, 4713, 4703, 4718, 4727, 4704, + 4743, 1531, 4745, 4741, 4904, 4747, 4748, 2408, 4749, 4755, + 4752, 4754, 4756, 4178, 4757, 5093, 4759, 4774, 4776, 4777, + 4775, 4778, 4781, 4784, 4790, 4825, 4825, 4786, 1631, 5600, + 892, 4779, 4780, 4782, 4783, 4842, 4905, 4785, 4787, 4789, + 1481, 4797, 1481, 4788, 3345, 4793, 4917, 2906, 1011, 4799, + 4800, 4809, 4806, 4956, 4816, 2907, 2908, 2909, 2910, 2911, + 2912, 2913, 2914, 2915, 4810, 742, 4795, 4811, 4813, 4821, + 4827, 4864, 4876, 4880, 4882, 4886, 4829, 4869, 4899, 4896, + 4870, 953, 953, 953, 4955, 4906, 4897, 4915, 4916, 4909, + 1106, 4895, 1874, 4920, 4919, 5647, 4936, 1011, 742, 4953, + 886, 4950, 4924, 1210, 4975, 4983, 4984, 4985, 4986, 4965, + 1531, 4987, 4988, 4996, 4958, 3309, 4998, 4989, 4999, 4967, + 4977, 1531, 1210, 4991, 5000, 5009, 4931, 1481, 5010, 5022, + 5011, 5012, 5014, 422, 885, 1947, 5015, 1531, 5016, 5017, + 5018, 5695, 5696, 2433, 5698, 4448, 5031, 5082, -2136, 5054, + 5055, 5083, 5728, 5056, 5071, 5063, 742, 5112, 5638, 5085, + 5094, 5111, 5139, 5157, 742, 5154, 5159, 5135, 4343, 5163, + 1330, 5186, 742, 5207, 5101, 5102, 5103, 5104, 5688, 5178, + 5144, 5208, 5209, 5141, 5171, 3027, 5100, 5120, 5148, 5143, + 1531, 5217, 5210, 5145, 5218, 5220, 5221, 5223, 5228, 5662, + 5663, 5229, 5245, 5261, 5248, 953, 5260, 5262, 953, 5263, + 5274, 1531, 5275, 5264, 5064, 5277, 5276, 5288, 953, 5278, + 6525, 5291, 5303, 5279, 1531, 6528, 1965, 5290, 5304, 5309, + 5312, 5328, 5329, 5331, 5235, 5334, 1531, 5344, 5345, 5347, + 5348, 5349, 5386, 5360, 5400, 5406, 5371, 5407, 5381, 953, + 953, 5419, 742, 742, 5430, 5437, 6128, 420, 6130, 5392, + 5413, 1966, 3565, 5857, 953, 5436, 742, 953, 5412, 5453, + 5454, 5456, 5458, 5460, 5466, 5747, 1531, 1531, 6105, 742, + 742, 5457, 5468, 2480, 5461, 5471, 2481, 5490, 5705, 5706, + 5495, 76, 5482, 5497, 76, 69, 1874, 5505, 5512, 5513, + 5518, 5530, 5524, -2138, 5533, 5572, 5535, 5552, 892, 5534, + 5565, 5539, 5573, 5568, 5580, 5570, 5585, 2987, 5587, 5581, + 5586, 5075, 1967, 5588, -3465, 5599, 5615, 5601, 5602, 5619, + 5611, 5624, 5617, 5625, 5653, 953, 5631, 5635, 953, 953, + 1413, 5654, 5655, 377, 1410, 5658, 1411, 1412, 5664, 5665, + 2989, 5685, 5666, 5687, 5690, 5691, 5699, 5700, 1968, 5678, + 5709, 5708, 5681, 5714, 5707, 5718, 5721, 5725, 5726, 5729, + 5734, 4253, 5743, 5737, 4253, 953, 953, 5742, 886, 5746, + 5744, 953, 953, 5750, 5752, 5756, 5758, 3668, 953, 953, + 953, 5761, 5766, 953, 1969, 953, 5768, 953, 953, 953, + 953, 953, 953, 5772, 953, 5773, 953, 953, 5777, 5775, + 953, 1995, 885, 5779, 5780, 5790, 6138, 1996, 5796, 4509, + 5808, 5802, 2356, 5781, 1531, 953, 953, 953, 3586, 5798, + 1970, 5804, 5805, 5806, 1971, 5809, 5826, 5294, 5816, 5979, + 5827, 5820, 953, 5828, 422, 4028, 5840, 5253, 5302, 5810, + 5834, 5473, 5829, 1231, 1104, 5843, 5850, 5854, 5864, 5866, + 5859, 5873, 1998, 5870, -3465, 1972, 1973, 5876, 6051, -3465, + 4051, 5888, 5886, 5891, 5890, 4253, 1104, 6260, 5894, 5895, + 5901, 5896, 5926, 420, 5907, 5908, 5948, 5912, 420, 5917, + 420, 5370, 5918, 5919, 5957, 5955, 5958, 5961, 5966, 5985, + 5965, 1106, 5986, 1974, 5990, 5882, -3465, 205, 5995, 5998, + 6019, 6014, 1975, 420, 6025, 6027, 6033, 6026, 1999, 6040, + 6050, 1976, 6054, 6060, 6087, 2000, 6108, 6064, 2001, 1977, + 6067, 6089, 6100, 6109, 892, 6301, 6303, 1978, 6110, 892, + 5899, 892, 6116, 6153, 4842, 6122, 6161, 6165, 6155, 1979, + 6166, 6168, 6176, 6191, 6195, 2002, 6196, 5904, 1980, 2994, + 6181, 6197, 1981, 6198, 892, 6199, 6208, 6209, 6140, 5287, + 6216, 6210, 6211, 6225, 6239, 6251, 6218, 5295, 6257, 6253, + 5296, 6258, 5297, 6255, 6259, 953, 6220, 6265, 6256, 2003, + 6231, 6277, 6264, 6300, 6281, 6306, 6047, 6311, 6313, 6316, + 6320, 1874, 6323, 6324, 886, 6340, 6343, 6342, 6341, 886, + 6350, 886, 6351, 6357, 6356, 6379, 1982, 6367, 5903, 2473, + 6295, 6389, 5095, 6400, 6391, 953, 1874, 6369, 5337, 6384, + 5905, 6385, 6398, 6309, 886, 6415, 6407, 6310, 885, 6416, + 6435, 6452, 6457, 885, 4178, 885, 1330, 6414, 6464, 4178, + -3465, 6433, 2099, 6471, 6490, 6473, 2005, 6483, 6488, 6509, + 6519, 6552, 5947, 2473, 6526, 6551, 2006, 6515, 885, 6516, + 6530, 6556, 6061, 6307, 6553, 2007, 953, 5439, 6555, 6557, + 6571, 6573, 6574, 6061, 6588, 3729, 4581, 2008, 6584, 6589, + 6405, 6123, 6124, 6597, 6598, 6601, 6602, 1229, 1330, 6021, + 4242, 4519, 6605, 3361, 4574, 1106, 1992, 5251, 4033, 2975, + 4111, 5244, 4689, 6401, 2093, 4150, 4198, 4538, 4826, 5945, + 3068, 3069, 6294, 6489, 5388, 2127, 4253, 4253, 2010, 2011, + 5997, 5724, 5241, 5978, 4636, 4370, 6393, 2092, 5880, 6314, + 420, 6485, 6312, 6413, 6500, 4641, 4955, 5443, 5754, 5410, + -3465, 5440, 4842, 5418, 421, 6132, 6275, 5380, 4216, 2128, + 4217, 2910, 2911, 2912, 2913, 2914, 2915, 2480, 5249, 4885, + 2481, 4707, 5748, 2078, 6478, 6479, 5405, 4538, 5984, 4925, + 6212, 1209, 5464, 6548, 6607, 6599, 4832, 5959, 5446, 5906, + 6418, 3428, 6283, 6118, 5909, 1064, 4343, 4343, 4343, 4343, + 4343, 2987, 1124, 3686, 5491, 6095, 6127, 6544, -3465, 1874, + 4246, 3704, 3492, 1406, 2405, 3889, 5450, 4627, 4942, 3488, + 1480, 3507, 6022, 6206, 6232, 3542, 1482, 2013, 3627, 3628, + 6097, 1560, 4796, 4148, 2989, 6439, 6572, 5501, 5501, 5501, + 5501, 6249, 5501, 5501, 5501, 5501, 5501, 5618, 2475, 5280, + 953, 953, 953, 953, 953, 953, 953, 953, 953, 3131, + 953, 1805, 5469, 5470, 2480, 4175, 3386, 2481, 5869, 3812, + 953, 5607, 6387, 953, 5167, 4579, 1874, 3841, 4366, 2999, + 3031, 6133, 2937, 6270, 4591, 3030, 5142, 6295, 3822, 6381, + 6476, 5591, 3840, 6248, 2358, 3035, 5115, 5563, 2987, 6066, + 5109, 3040, 6238, 5086, 6237, -3465, 5110, 5168, 5578, 6581, + 6463, 6527, 6370, 6046, 5065, 5861, 6382, 5651, 6383, 3772, + 3692, 5604, 5606, 4515, 4423, 4174, 422, 5659, 4513, 953, + 3781, 2989, 1262, 953, 4954, 2255, 953, 4318, 953, 3502, + 6358, 953, 3867, 1232, 4569, 1583, 1915, 3874, -3465, 3858, + 5173, 3871, 1995, -3465, 3054, 3872, 953, 4253, 1996, 5592, + 1886, 4253, 5174, 1887, 5146, 953, 953, 3047, 2941, 5590, + 1255, 4368, 5597, 5598, 3878, 3583, 78, 5868, 0, 0, + 0, 6267, 2348, 3051, 0, 0, 1617, 2356, 0, 0, + -3465, 0, 0, 0, 0, 422, 6227, 422, 0, 75, + 5089, 0, 0, 1998, 0, 0, 0, 0, 0, 0, + 1106, 0, 0, 0, 0, 0, 0, 742, 0, 2413, + 0, 0, 0, 0, 1480, 6378, 0, 6380, 0, 5596, + 0, 0, 0, 0, 0, 1106, 76, 76, 0, 0, + 742, 6593, 1106, 2994, 0, -3465, 0, 1531, 0, 0, + -3465, 1531, 1531, 1106, 0, 0, 74, 0, 742, 1999, + 0, 0, 0, 422, 742, 0, 2000, 0, 742, 2001, + 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -3465, 0, 0, + 0, 0, 0, 0, 742, 0, 2002, 953, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 953, 0, + 1531, 953, 0, 953, 953, 0, 1531, 0, 0, 1874, + 0, 0, 1330, 0, 0, 0, 0, 0, 742, 0, + 2003, 0, 0, 0, -3465, 0, 0, 0, 0, 0, + 2994, 1155, 0, 0, 0, 0, 0, 0, 742, 742, + 0, 0, 0, 0, 420, 0, 0, 1531, 0, 0, + 5702, 5703, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4178, 0, 4178, 4178, 4178, 6127, 422, + 742, 1995, 0, 422, 0, 0, 0, 1996, 0, 0, + 0, 0, 0, 2099, 0, 0, 0, 2005, 0, 0, + 0, 0, 2097, 0, 742, 892, 422, 2006, 0, 373, + 742, 0, 0, 0, 0, 0, 2007, 742, 1106, 373, + 0, 6397, 1155, 0, 742, 4075, 6600, 742, 2008, 0, + 0, -3465, 1998, 742, -3465, 0, 0, 0, 0, 2480, + 0, 5755, 2481, 0, 4253, 2910, 2911, 2912, 2913, 2914, + 2915, 0, 0, 742, 0, 0, 0, 373, 0, 742, + 0, 0, 6538, 0, 0, 0, 742, 0, 0, 2010, + 2011, 0, 0, 2987, 0, 886, 0, 0, 0, 742, + -3465, 5783, 0, 0, 0, 1106, 2098, 0, 1999, 0, + 0, 1480, 742, 6445, 6446, 2000, 0, 422, 2001, 0, + 2012, 0, 0, 742, 4075, 0, 2989, 0, 0, 885, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 953, 953, 953, 0, 2002, 0, 953, 0, 0, + 0, -3465, 0, 5501, 0, 0, 0, 0, 0, 0, + 0, 6482, 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, + 0, 0, 0, 0, 953, 1531, 0, 0, 0, 2003, + 69, 3824, 0, 422, 0, 0, 0, 0, 2013, 0, + 4075, 0, 0, 0, 0, 5090, 0, 0, 0, 0, + 4075, 1104, 0, 1104, 0, 1104, 0, 0, 0, 0, + 0, 1104, 1610, 1611, 0, 0, 0, 953, 0, 0, + 0, 0, 4253, 0, 0, 0, 0, 0, 0, 4253, + 4075, 0, 0, 0, 4253, 1104, 1104, 4253, 0, 0, + -3465, 6012, 2099, 0, 0, -3465, 2005, 5867, 0, 4291, + 0, 0, 0, 1531, 0, 0, 2006, 0, 0, 0, + 0, 0, 0, 0, 5933, 2007, 4253, 0, 0, 0, + 0, 0, 0, 2473, 0, 953, 0, 2008, 0, 0, + 4253, 0, -3465, 0, 0, 0, 0, 0, 0, 5108, + 0, 0, 5113, 0, 0, 0, 0, 0, 5863, 0, + 0, 0, 0, 0, 0, 0, 0, 420, 0, 5991, + 0, 0, 4842, 0, 0, 2100, 0, 0, 2010, 2011, + 0, 0, 0, 0, 0, 0, 0, 0, 5983, 0, + 0, 0, 0, 373, 0, 2994, 0, 0, 0, 0, + 0, 5992, 1106, 0, 0, 0, 0, 0, 1106, 2101, + 0, 0, 1106, 1011, 0, 0, 0, 4178, 892, 6010, + 6603, 6604, 0, 1104, 0, 0, 5946, 0, 0, 1874, + 742, 260, 363, 372, 269, 272, 377, 367, 0, 368, + 370, 273, 1896, 274, 0, 294, 1531, 312, 742, 317, + 0, 347, 366, 0, 371, 742, 382, 0, 0, 953, + 0, 1531, 953, 0, 953, 953, 1531, 0, 0, 0, + 0, 0, 0, 0, 953, 0, 0, 2013, 0, 953, + 0, 0, 0, 0, 1104, 0, -3465, 0, 886, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4253, 0, + 0, 0, 0, 0, 0, 953, 953, 953, 0, 0, + 953, 0, 0, 0, 0, 0, 0, 0, 953, 953, + 953, 953, 885, 0, 0, 2480, 422, 3723, 2481, 0, + 0, 953, 422, 0, 953, 0, 953, 0, 0, 1210, + 0, 0, 0, 0, 0, 0, 0, 953, 953, 0, + 0, 953, 0, 0, 1104, 0, 0, 0, 0, 2987, + 0, 0, 0, 0, 0, 0, -3465, 4253, 0, 0, + 953, 0, 953, 0, 953, 0, 0, 0, 0, 0, + 0, 0, -2757, 0, 0, 0, -3465, 0, 0, 0, + 0, 0, 2989, 0, 953, 0, 0, 2910, 2911, 2912, + 2913, 2914, 2915, 0, 0, 953, 0, 0, 0, 1995, + 0, 0, 0, 0, 2480, 1996, 420, 2481, 0, 742, + 0, 2482, 2483, 2484, 0, 0, 0, 0, 0, 0, + 2097, 0, 6184, -2757, 0, 0, 953, 0, 2986, 0, + 0, 1481, 0, 0, 0, 6142, -2757, 0, 2987, 0, + 0, 953, -2757, 0, 0, 2988, 0, -2757, 0, 0, + 1998, 5550, 0, -2757, 0, 953, -2757, 892, 0, 0, + -2757, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2989, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1874, -2757, + 0, -2757, 0, 0, 4538, 4253, -3465, 1531, 0, 0, + 1531, -3465, 1531, 0, 2098, 0, 1999, 1531, 0, -2757, + 0, 0, 0, 2000, 0, 0, 2001, 0, 0, 0, + 373, 6261, 742, 742, 0, 0, 0, 886, 953, 0, + 0, 0, 0, 0, 0, 5933, 0, 0, -3465, 69, + 69, 0, 69, 2002, 0, 0, 0, 0, 0, 742, + 0, 0, 742, 0, 0, 1531, -2757, 0, 0, -2757, + 4253, 885, 0, 1531, 0, -2757, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2003, 420, 0, + 0, 0, 0, 0, 0, 2990, 0, 0, 1531, 373, + 2991, 2994, 0, 0, 0, 0, 0, 0, 0, 4253, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2992, 2668, 0, 0, 0, 732, 0, 0, + 0, -2757, 0, 0, 422, 422, 422, 2993, 1106, 892, + 0, 0, 0, 0, 0, 1481, 0, 0, 0, 6298, + 2099, 6299, 0, 6371, 2005, 6304, 6305, 0, 742, 0, + 0, 0, 0, 0, 2006, 0, 0, 1531, 0, 1531, + 0, 0, 0, 2007, 0, 0, 2718, 742, 0, 0, + 0, 0, 0, 3724, 0, 2008, 0, 0, 0, 0, + 2994, 0, -3465, 2995, 0, 742, 420, 0, 0, 0, + 0, 0, 6514, 0, 0, 0, 0, 0, 4253, 886, + 3686, 3686, 0, 0, -2757, 3686, 0, 0, 0, 0, + 0, 0, 0, 4108, 0, 0, 2010, 2011, 0, 0, + 0, 0, 0, 0, 0, 4538, 0, 0, -2757, 4538, + -2757, -2757, 0, 885, 0, 0, 0, 892, 0, 0, + 0, 0, 3686, 3686, 0, 0, 0, 4109, 0, 0, + 1531, 0, 0, 0, 0, 0, 6419, 1104, 0, 0, + 0, 0, 1104, 1104, 373, 373, 0, 0, 0, 0, + 0, 2996, 742, -2757, 0, -2757, -2757, 953, 0, 0, + 0, 6444, -3465, 953, 377, 6441, 0, 6442, 6443, 0, + 0, 0, 1531, 2910, 2911, 2912, 2913, 2914, 2915, 0, + 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, + 0, 0, 0, 0, 0, 2013, 0, 0, 0, 422, + 1531, 0, 0, 0, 0, 742, 0, 742, 0, 0, + 3064, 0, 1610, 1611, 0, 0, 0, 0, 0, 0, + 742, 885, 742, 0, 0, 0, 0, 0, 0, 4253, + 4879, 3079, 0, 0, 0, 0, 0, 3086, 3088, 0, + 0, 0, 0, 953, 0, 0, 0, 0, 0, 6444, + 0, 2906, 377, 6441, 0, 6442, 6443, 0, 0, 2907, + 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, + 0, 1531, 4437, 0, 4438, 0, 0, 1106, 0, 0, + 0, 0, 1481, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 742, 1531, 0, 0, 0, 0, 0, 0, + 0, 0, 4298, 0, 0, 0, 0, 0, 0, 1104, + 0, 0, 0, 0, 4253, 0, 0, 1531, 0, 1104, + 4253, 0, 0, 0, 0, 0, 1965, 0, 0, 0, + 0, 0, 0, 6578, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, + 0, 1966, 6444, 0, 1965, 377, 6441, 0, 6442, 6443, + 0, 6578, 0, 742, 0, 0, 420, 0, 0, 0, + 0, 0, 6578, 0, 6223, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 742, 0, 0, 742, 1966, + 0, 0, 1104, 0, 0, 1104, 1104, 0, 0, 0, + 0, 0, 0, 0, 420, 953, 0, 0, 1531, 0, + 0, 0, 1967, 0, 953, 420, 0, 892, 0, 0, + 0, 6580, 953, 4253, 953, 0, 0, 953, 1514, 2931, + 0, 1531, 953, 953, 953, 953, 0, 0, 953, 953, + 953, 953, 953, 953, 953, 953, 953, 953, 1968, 0, + 1967, 953, 953, 953, 1514, 892, 1531, 0, 0, 6580, + 0, 953, 0, 0, 0, 953, 892, 422, 0, 953, + 6580, 0, 0, 5590, 0, 4298, 0, 953, 6579, 4299, + 953, 0, 953, 0, 1969, 0, 1968, 886, 0, 0, + 0, 0, 953, 0, 0, 953, 953, 0, 0, 1965, + 953, 953, 0, 0, 0, 1104, 0, 953, 0, 0, + 0, 0, 0, 0, 0, 0, 6579, 953, 0, 0, + 953, 885, 1969, 0, 1971, 886, 0, 6579, 0, 0, + 953, 0, 0, 0, 1966, 0, 886, 0, 0, 0, + 0, 2480, 0, 0, 2481, 0, 0, 4538, 2482, 2483, + 2484, 0, 4538, 0, 0, 4538, 1973, 0, 0, 885, + 0, 0, 1971, 0, 0, 2986, 0, 0, 0, 0, + 885, 0, 0, 0, 0, 2987, 0, 953, 0, 0, + 0, 0, 2988, 0, 0, 0, 3501, 0, 0, 0, + 0, 0, 0, 953, 1973, 1967, 0, 205, 0, 0, + 0, 0, 4300, 0, 0, 0, 0, 0, 2989, 1531, + 0, 1976, 3514, 0, 0, 0, 0, 0, 0, 1977, + 0, 953, 3522, 0, 3523, 0, 0, 3198, 0, 0, + 3527, 1968, 0, 0, 3530, 205, 0, 3197, 0, 1979, + 1975, 0, 742, 0, 0, 0, 0, 0, 1980, 1976, + 0, 0, 1981, 0, 0, 0, 0, 1977, 0, 0, + 0, 0, 4299, 0, 0, 3198, 0, 1969, 0, 0, + 0, 4301, 0, 0, 0, 0, 0, 1979, 0, 0, + 0, 69, 0, 0, 69, 0, 1980, 0, 0, 0, + 1981, 0, 0, 422, 0, 0, 0, 0, 422, 1531, + 422, 0, 0, 0, 0, 0, 1982, 1971, 0, 0, + 4302, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 373, 2990, 422, 1531, 0, 0, 2991, 0, 0, + 0, 0, 0, 0, 373, 0, 0, 0, 0, 1973, + 0, 0, 0, 0, 1982, 0, 0, 0, 0, 2992, + 2668, 0, 373, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 742, 0, 2993, 742, 373, 0, 0, 0, + 1995, 0, 0, 0, 3657, 3658, 1996, 0, 0, 0, + 205, 3672, 3673, 0, 0, 1975, 2170, 0, 0, 0, + 0, 1997, 0, 0, 1976, 0, 0, 2179, 0, 0, + 0, 0, 1977, 2718, 0, 0, 0, 0, 0, 0, + 3198, 3714, 2187, 0, 0, 0, 0, 2994, 0, 1307, + 2995, 1998, 1979, 0, 0, 4538, 0, 0, 1339, 953, + 0, 1980, 0, 0, 0, 1981, 0, 3686, 3686, 3686, + 3686, 0, 1361, 3686, 3686, 3686, 3686, 3686, 3686, 3686, + 3686, 3686, 3686, 0, 4301, 742, 742, 381, 0, 1531, + 0, 0, 0, 381, 0, 742, 0, 736, 0, 0, + 5061, 0, 953, 953, 0, 0, 0, 1999, 0, 0, + 732, 0, 742, 0, 2000, 0, 732, 2001, 0, 1982, + 0, 0, 0, 4302, 381, 0, 0, 0, 732, 0, + 3686, 3686, 0, 0, 0, 0, 5447, 1531, 2996, 0, + 1531, 953, 953, 0, 2002, 0, 0, 0, 2480, 0, + 0, 2481, 953, 0, 0, 2482, 2483, 2484, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 381, 0, 2986, 0, 0, 0, 0, 0, 2003, 0, + 422, 0, 2987, 0, 0, 0, 0, 0, 0, 2988, + 0, 0, 0, 4538, 0, 373, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, + 0, 0, 0, 0, 0, 2989, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 953, 0, 0, 0, 0, 2906, 0, + 0, 2004, 381, 0, 953, 2005, 2907, 2908, 2909, 2910, + 2911, 2912, 2913, 2914, 2915, 2006, 0, 0, 0, 0, + 0, 4439, 0, 0, 2007, 0, 2414, 0, 0, 0, + 0, 0, 953, 0, 0, 953, 2008, 0, 0, 2473, + 0, 0, 0, 953, 953, 0, 1531, 0, 0, 0, + 953, 953, 0, 0, 373, 953, 0, 0, 0, 953, + 0, 0, 953, 953, 0, 0, 0, 953, 0, 0, + 0, 0, 0, 953, 2009, 0, 0, 2010, 2011, 0, + 0, 0, 0, 0, 0, 953, 0, 0, 0, 2990, + 0, 0, 0, 953, 2991, 0, 0, 953, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2012, 0, + 0, 0, 0, 0, 0, 0, 2992, 2668, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 953, 2993, 0, 0, 0, 1027, 0, 0, 0, 0, + 3165, 0, 0, 0, 76, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 732, 732, + 0, 0, 953, 0, 0, 0, 381, 0, 0, 0, + 2718, 0, 0, 0, 0, 0, 2013, 0, 3166, 0, + 1531, 0, 0, 0, 2994, 0, 0, 2995, 0, 0, + 0, 1030, 0, 742, 0, 0, 0, 0, 0, 0, + 0, 381, 0, 0, 0, 0, 0, 1031, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1531, 0, + 0, 0, 0, 0, 3686, 1390, 0, 1027, 0, 0, + 0, 0, 3636, 0, 0, 742, 0, 0, 0, 0, + 1531, 0, 0, 0, 0, 0, 0, 742, 0, 3167, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1034, 0, 0, 953, 0, 0, 3079, 0, 0, 1035, + 0, 0, 0, 0, 0, 2996, 742, 0, 0, 0, + 0, 0, 1036, 1030, 3637, 0, 945, 3168, 0, 373, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1031, + 0, 0, 0, 0, 0, 0, 0, 1531, 0, 0, + 0, 0, 0, 1393, 373, 0, 0, 1390, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 953, 0, 0, 0, 0, 0, 0, + 0, 3638, 0, 0, 0, 3830, 3830, 0, 0, 953, + 0, 0, 1034, 0, 422, 0, 0, 0, 0, 1040, + 0, 1035, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 742, 1036, 2906, 0, 0, 0, 3639, + 953, 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, + 2914, 2915, 0, 1104, 0, 0, 0, 0, 4489, 3169, + 0, 0, 6513, 0, 0, 1393, 0, 0, 0, 0, + 3260, 0, 0, 1896, 0, 0, 69, 69, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1531, 0, 1531, + 3640, 0, 921, 3170, 0, 0, 1045, 0, 0, 0, + 5532, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1040, 0, 0, 0, 0, 1104, 0, 0, 0, + 0, 1995, 0, 1397, 0, 0, 3171, 1996, 0, 0, + 742, 0, 1049, 0, 0, 0, 0, 2480, 0, 1050, + 2481, 0, 1051, 0, 2482, 2483, 2484, 0, 953, 0, + 5567, 953, 0, 0, 953, 953, 953, 0, 0, 0, + 0, 1052, 0, 0, 0, 0, 0, 0, 1399, 0, + 0, 2987, 1998, 0, 1054, 373, 0, 1400, 2988, 953, + 953, 1056, 0, 953, 921, 3641, 0, 0, 1045, 3172, + 0, 0, 0, 0, 0, 0, 3173, 0, 953, 0, + 3986, 0, 0, 0, 2989, 953, 0, 0, 0, 0, + 953, 0, 3390, 953, 953, 1397, 0, 0, 3642, 0, + 0, 953, 1061, 3401, 1049, 0, 0, 0, 1999, 0, + 0, 1050, 0, 0, 1051, 2000, 1965, 0, 2001, 3419, + 0, 0, 953, 0, 953, 0, 0, 0, 0, 0, + 742, 0, 742, 1052, 0, 0, 953, 0, 0, 0, + 1399, 0, 0, 0, 0, 2002, 1054, 0, 0, 1400, + 0, 1966, 0, 1056, 0, 0, 0, 0, 0, 1104, + 0, 0, 0, 0, 0, 0, 0, 1104, 3643, 0, + 1104, 0, 3494, 0, 0, 0, 0, 1531, 742, 2003, + 0, 0, 1104, 0, 0, 0, 0, 0, 953, 0, + 0, 0, 0, 3509, 1061, 0, 0, 0, 2990, 0, + 0, 0, 0, 2991, 0, 0, 1514, 0, 0, 0, + 0, 381, 1967, 0, 0, 381, 0, 0, 3524, 0, + 0, 0, 0, 0, 0, -3465, -3465, 422, 1304, 736, + 0, 0, 953, 0, 0, 0, 1304, 0, 736, 1304, + 2993, 0, 2099, 0, 0, 0, 2005, 0, 1968, 0, + 0, 0, 736, 0, 0, 0, 2006, 0, 3550, 1514, + 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, + 0, 736, 0, 0, 0, 0, 0, 2008, 0, -3465, + 0, 0, 0, 0, 1969, 0, 0, 0, 0, 0, + 736, 0, 0, 2994, 953, 0, 736, 1531, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, + 0, 0, 732, 0, 0, 3178, 0, 0, 2010, 2011, + 1970, 0, 0, 0, 1971, 0, 1995, 0, 0, 953, + 0, 0, 1996, 953, 0, 953, 0, 736, 2480, 0, + 0, 2481, 0, 0, 0, 2482, 2483, 2484, 0, 3179, + 0, 1304, 736, 953, 0, 2032, 1973, 0, 1304, 953, + 736, 1304, 2986, 953, 0, 0, 0, 0, 0, 1531, + 953, 0, 2987, 0, 736, 0, 0, 1998, 0, 2988, + 0, 0, 0, 0, 2996, 0, 0, 0, 4338, 4341, + 736, 0, 0, 2033, 0, 0, 0, 205, 0, 0, + 0, 0, 1975, 0, 0, 2989, 3716, 0, 0, 0, + 0, 1976, 0, 0, 0, 1531, 0, 2013, 0, 1977, + 1531, 1531, 0, 0, 0, 953, 0, 2034, 0, 0, + 953, 953, 742, 1999, 0, 0, 3686, 0, 0, 1979, + 2000, 0, 0, 2001, 0, 0, 742, 0, 1980, 736, + 0, 0, 1981, 0, 380, 0, 0, 0, 0, 0, + 380, 0, 1104, 0, 735, 0, 953, 0, 0, 0, + 2002, 0, 0, 953, 0, 0, 422, 0, 0, 0, + 0, 0, 0, 0, 2906, 0, 0, 0, 0, 736, + 0, 380, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, + 2915, 953, 0, 0, 2003, 0, 1982, 0, 0, 0, + 381, 0, 0, 0, 0, 736, 0, 0, 0, 2990, + 0, 0, 1995, 0, 2991, 0, 0, 736, 1996, 0, + 0, 1531, 1531, 0, 0, 0, 0, 380, 0, 0, + 0, 0, 0, 0, 0, 0, 2992, 2668, 0, 0, + 0, 0, 0, 6224, 0, 0, 3359, 953, 0, 0, + 0, 2993, 0, 953, 0, 0, 953, 2004, 0, 953, + 0, 2005, 0, 1998, 0, 0, 0, 0, 736, 736, + 953, 2006, 0, 0, 0, 0, 1150, 953, 0, 0, + 2007, 0, 0, 0, 1150, 0, 1150, 0, 1291, 0, + 2718, 0, 2008, 0, 0, 953, 0, 1303, 0, 380, + 0, 0, 0, 0, 2994, 1303, 0, 2995, 1303, 0, + 0, 0, 0, 953, 0, 0, 0, 0, 0, 1999, + 0, 0, 0, 0, 0, 0, 2000, 0, 0, 2001, + 3253, 0, 0, 2010, 2011, 0, 0, 3439, 422, 0, + 742, 0, 0, 0, 3079, 3456, 0, 4572, 0, 1104, + 0, 0, 0, 3359, 0, 0, 2002, 0, 2480, 0, + 0, 2481, 0, 0, 3254, 2482, 2483, 2484, 0, 0, + 0, 0, 0, 4585, 4585, 0, 0, 0, 0, 381, + 0, 0, 2986, 0, 0, 736, 0, 0, 0, 0, + 2003, 0, 2987, 0, 953, 2996, 1304, 0, 0, 2988, + 1304, 0, 1304, 0, 0, 0, 0, 0, 0, 0, + 0, 1291, 0, 0, 0, 0, 0, 0, 0, 0, + 1303, 0, 0, 0, 3686, 2989, 0, 1303, 0, 0, + 1303, 0, 2013, 0, 3535, 0, 953, 953, 953, 0, + 0, 0, 0, 0, 0, 953, 422, 0, 3686, 1531, + 0, 0, 0, 2099, 953, 0, 953, 2005, 953, 0, + 0, 3359, 0, 380, 0, 0, 0, 2006, 742, 0, + 0, 0, 0, 0, 0, 0, 2007, 0, 0, 0, + 0, 953, 0, 0, 0, 0, 0, 0, 2008, 0, + 0, 0, 0, 0, 742, 2906, 0, 0, 380, 0, + 0, 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, + 2914, 2915, 0, 0, 0, 0, 3712, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3979, 0, 0, 2010, + 2011, 0, 0, 0, 0, 953, 0, 0, 0, 2990, + 0, 0, 0, 0, 2991, 953, 0, 0, 0, 0, + 0, 0, 736, 953, 953, 0, 0, 0, 0, 953, + 2012, 0, 953, 0, 0, 0, 2992, 2668, 0, 0, + 0, 0, 953, 0, 0, 0, 0, 0, 6470, 0, + 0, 2993, 953, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, + 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, + 2718, 0, 0, 0, 0, 0, 0, 0, 2013, 0, + 953, 736, 0, 0, 2994, 0, 953, 2995, 0, 0, + 0, 0, 0, 883, 0, 0, 0, 736, 0, 0, + 0, 0, 0, 953, 0, 0, 0, 0, 0, 0, + 0, 736, 0, 0, 3686, 736, 0, 0, 953, 0, + 0, 6470, 0, 953, 0, 0, 0, 0, 0, 0, + 0, 1965, 0, 0, 0, 0, 953, 0, 0, 883, + 0, 953, 0, 0, 0, 2480, 0, 0, 2481, 0, + 0, 0, 2482, 2483, 2484, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1966, 0, 0, 2986, + 0, 0, 953, 0, 0, 2996, 0, 0, 0, 2987, + 0, 0, 0, 953, 0, 0, 2988, 953, 1149, 0, + 0, 0, 0, 0, 0, 0, 1149, 0, 1149, 953, + 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, + 1104, 883, 2989, 0, 0, 0, 1995, 0, 0, 1291, + 0, 0, 1996, 0, 0, 1303, 0, 1967, 0, 1303, + 0, 1303, 3943, 4875, 0, 0, 953, 953, 3951, 0, + 953, 0, 0, 0, 422, 736, 0, 0, 0, 0, + 953, 953, 0, 736, 736, 422, 0, 0, 0, 0, + 0, 0, 0, 1968, 0, 0, 0, 1998, 0, 0, + 0, 0, 0, 0, 0, 2906, 0, 0, 0, 3984, + 0, 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, + 2914, 2915, 2242, 0, 2244, 2245, 4828, 0, 0, 1969, + 3686, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 381, 381, 381, -2542, 0, 0, 0, 0, 0, + 0, 0, 0, 1999, 0, 0, 2990, 0, 0, 0, + 2000, 2991, 736, 2001, 0, 1970, 4962, 0, 2480, 1971, + 0, 2481, 0, 4341, 0, 2482, 2483, 2484, 0, 0, + 0, 0, 0, 2992, 2668, 0, 0, 0, 0, 0, + 2002, 381, 2986, 0, 0, -2542, 0, 0, 2993, 381, + 2049, 1973, 2987, 0, 0, 0, 0, 0, -2542, 2988, + 0, 381, 0, 0, -2542, 0, 0, 0, 0, -2542, + 0, 0, 0, 0, 2003, -2542, 0, 0, -2542, 0, + 0, 0, -2542, 0, 0, 2989, 0, 2718, 2050, 0, + 0, 0, 205, 0, 1104, 0, 0, 1975, 380, 0, + 0, 2994, 380, 0, 2995, 0, 1976, 6462, 0, 0, + 0, -2542, 0, 0, 1977, 0, 735, 0, 0, 0, + 0, 0, 2051, 0, 0, 735, 0, 0, 0, 0, + 0, -2542, 0, 0, 1979, 0, 0, 2099, 0, 735, + 0, 2005, 0, 1980, 0, 0, 0, 1981, 0, 0, + 0, 2006, 0, 0, 0, 0, 0, 4203, 735, 0, + 2007, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2008, 0, 0, 0, 0, 735, -2542, 0, + 0, -2542, 0, 735, 0, 0, 0, -2542, 0, 0, + 0, 0, 2996, 0, 0, 735, 0, 0, 0, 2990, + 0, 1982, 0, 3686, 2991, 0, 0, 0, 3686, 0, + 4153, 0, 0, 2010, 2011, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 735, 0, 2992, 2668, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, + 0, 2993, 0, -2542, 4154, 0, 0, 735, 0, 0, + 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, + 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, + 2718, 0, 0, 0, 0, 0, 0, 0, 0, 736, + 0, 0, 2906, 0, 2994, 5170, 0, 2995, 1120, 0, + 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, + 0, 0, 2013, 5024, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 381, 0, -2542, 0, 732, 0, + 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, + -2542, 3880, -2542, -2542, 0, 736, 0, 0, 0, 0, + 0, 0, 0, 736, 0, 0, 0, 0, 4396, 3896, + 0, 0, 0, 0, 1150, 3900, 735, 0, 1150, 3903, + 0, 0, 0, 4409, 0, 2996, 0, 0, 4414, 0, + 0, 0, -2542, 0, 0, -2542, -2542, 380, -2542, 1104, + 0, 0, 735, 0, 0, 3927, 0, 0, 0, 0, + 0, 0, 0, 2480, 735, 0, 2481, 0, 0, 0, + 2482, 2483, 2484, 0, 1104, 0, 0, 0, 0, 0, + 0, 1104, 0, 0, 0, 0, 0, 2986, 0, 3969, + 1304, 1304, 1104, 736, 736, 0, 0, 2987, 0, 0, + 0, 0, 0, 0, 2988, 1304, 0, 736, 1304, 732, + 0, 0, 0, 0, 0, 735, 735, 0, 0, 0, + 736, 736, 0, 0, 0, 0, 0, 0, 0, 0, + 2989, 0, 0, 0, 0, 2906, 0, 0, 0, 0, + 0, 4019, 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, + 2914, 2915, 0, 0, 0, 0, 5074, 0, 0, 0, + 0, 0, 0, 0, 0, 4047, 0, 0, 1610, 1611, + 0, 4056, 0, 0, 0, 0, 1304, 0, 4062, 1304, + 1304, 0, 0, 0, 0, 732, 0, 0, 4076, 2480, + 0, 0, 2481, 0, 4081, 0, 2482, 2483, 2484, 1995, + 1150, 1150, 0, 0, 0, 1996, 0, 0, 0, 0, + 883, 0, 0, 2986, 4094, 0, 0, 0, 0, 0, + 4097, 0, 0, 2987, 0, 0, 380, 4103, 734, 0, + 2988, 0, 735, 0, 0, 0, 0, 734, 0, 0, + 4118, 0, 0, 0, 2990, 0, 0, 0, 0, 2991, + 1998, 734, 0, 4143, 0, 0, 2989, 1104, 0, 0, + 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, + 734, 2992, 2668, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 381, 2993, 0, 0, 734, + 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, + 0, 4341, 4341, 4341, 4341, 4341, 1999, 734, 0, 0, + 0, 0, 0, 2000, 2480, 0, 2001, 2481, 0, 0, + 0, 2482, 2483, 2484, 1104, 2718, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 734, 4651, 2986, 2994, + 0, 0, 2995, 2002, 0, 4654, 0, 0, 2987, 0, + 0, 734, 0, 0, 0, 2988, 0, 0, 0, 734, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2990, 0, 0, 734, 0, 2991, 0, 2003, 0, 0, + 0, 2989, 0, 0, 0, 0, 0, 0, 0, 734, + 0, 0, 0, 0, 0, 0, 0, 2992, 2668, 735, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2993, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1291, 0, 0, 1291, 0, + 2996, 0, 0, 0, 0, 0, 0, 0, 0, 4736, + 2099, 4738, 0, 0, 2005, 0, 0, 0, 734, 0, + 0, 2718, 0, 0, 2006, 0, 1995, 0, 0, 0, + 0, 0, 1996, 2007, 0, 2994, 0, 0, 2995, 1303, + 1303, 0, 0, 0, 0, 2008, 0, 3079, 735, 0, + 0, 0, 0, 0, 1303, 0, 1149, 1303, 734, 0, + 1149, 0, 0, 0, 735, 2990, 0, 0, 0, 0, + 2991, 0, 0, 0, 69, 0, 0, 1998, 735, 0, + 0, 4383, 735, 4664, 734, 0, 2010, 2011, 0, 0, + 0, 0, 2992, 2668, 0, 0, 734, 0, 0, 4397, + 2906, 0, 4792, 0, 0, 0, 4383, 2993, 2907, 2908, + 2909, 2910, 2911, 2912, 2913, 2914, 2915, 4665, 0, 0, + 0, 5188, 0, 0, 0, 1303, 2996, 0, 1303, 1303, + 0, 1104, 0, 1999, 0, 0, 0, 1104, 0, 0, + 2000, 1104, 0, 2001, 4814, 0, 2718, 734, 734, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2994, 0, 0, 2995, 0, 0, 0, 0, 5675, 5676, + 2002, 0, 0, 5679, 5680, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2013, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2003, 0, 0, 0, 0, 0, + 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, + 735, 735, 0, 0, 0, 0, 2906, 0, 0, 0, + 0, 0, 1149, 1149, 2907, 2908, 2909, 2910, 2911, 2912, + 2913, 2914, 2915, 3984, 0, 0, 0, 5408, 0, 0, + 0, 2996, 0, 0, 0, 0, 0, 0, 883, 0, + 0, 0, 0, 0, 734, 0, 0, 2099, 0, 0, + 0, 2005, 0, 0, 0, 0, 0, 0, 380, 380, + 380, 2006, 0, 0, 0, 0, 0, 0, 0, 4957, + 2007, 0, 0, 0, 0, 0, 0, 0, 0, 735, + 0, 0, 2008, 0, 0, 0, 0, 0, 2480, 0, + 0, 2481, 0, 0, 0, 2482, 2483, 2484, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, + 0, 0, 2986, 0, 0, 0, 380, 381, 0, 0, + 4721, 0, 2987, 2010, 2011, 0, 0, 0, 380, 2988, + 0, 2906, 0, 0, 0, 0, 0, 0, 1150, 2907, + 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, + 2480, 0, 5514, 2481, 4722, 2989, 0, 2482, 2483, 2484, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5023, 0, 0, 0, 2986, 0, 0, 0, 0, 1150, + 0, 0, 0, 0, 2987, 0, 381, 0, 381, 0, + 4648, 2988, 0, 5032, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, + 0, 734, 0, 0, 0, 0, 0, 2989, 5053, 0, + 0, 0, 2013, 0, 0, 0, 0, 0, 0, 0, + 0, 736, 0, 0, 0, 1150, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, + 0, 0, 1150, 0, 381, 736, 0, 0, 0, 736, + 0, 0, 0, 0, 0, 0, 0, 736, 0, 2990, + 0, 0, 0, 0, 2991, 0, 5862, 0, 0, 0, + 0, 0, 0, 0, 0, 736, 0, 0, 0, 4719, + 734, 0, 0, 0, 0, 0, 2992, 2668, 0, 0, + 0, 0, 1304, 0, 1304, 1304, 734, 0, 0, 0, + 0, 2993, 0, 0, 0, 0, 0, 0, 0, 736, + 734, 0, 0, 735, 734, 0, 0, 0, 0, 0, + 0, 2990, 0, 0, 0, 0, 2991, 0, 0, 736, + 736, 0, 0, 0, 0, 0, 0, 1104, 0, 0, + 2718, 0, 0, 0, 0, 0, 735, 0, 2992, 2668, + 0, 0, 0, 0, 2994, 0, 0, 2995, 0, 0, + 381, 736, 0, 2993, 381, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 380, 0, 0, 0, 736, 0, 381, 0, 0, + 0, 736, 0, 0, 0, 0, 0, 0, 736, 0, + 0, 0, 2718, 4807, 735, 736, 0, 0, 736, 0, + 0, 0, 735, 0, 736, 0, 2994, 0, 0, 2995, + 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, + 736, 0, 0, 0, 734, 2996, 0, 736, 0, 0, + 0, 0, 734, 734, 0, 0, 2480, 0, 0, 2481, + 736, 0, 0, 2482, 2483, 2484, 0, 0, 0, 0, + 0, 0, 0, 736, 0, 0, 0, 0, 381, 0, + 2986, 0, 0, 0, 736, 0, 0, 0, 0, 0, + 2987, 0, 0, 0, 0, 0, 0, 2988, 0, 0, + 735, 735, 0, 0, 0, 0, 0, 2996, 0, 0, + 883, 0, 0, 0, 735, 0, 0, 0, 0, 0, + 1027, 0, 0, 2989, 0, 1386, 0, 735, 735, 0, + 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 381, 2906, 0, 0, 0, 0, + 0, 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, + 2914, 2915, 0, 1387, 0, 0, 5551, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1030, 1388, 0, 0, + 883, 0, 0, 0, 0, 0, 0, 0, 1389, 0, + 1149, 0, 1031, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3359, 0, 1104, 2906, 0, 0, + 1390, 5391, 0, 0, 0, 2907, 2908, 2909, 2910, 2911, + 2912, 2913, 2914, 2915, 4992, 0, 0, 0, 5814, 0, + 0, 1149, 0, 0, 1391, 0, 0, 2990, 0, 0, + 0, 0, 2991, 0, 0, 1034, 0, 0, 0, 5008, + 0, 0, -2544, 0, 1035, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2992, 2668, 0, 1036, 1291, 0, + 0, 1303, 1392, 1303, 1303, 0, 0, 0, 0, 2993, + 0, 0, 0, 0, 0, 0, 0, 1149, 0, 0, + 0, 0, 380, 0, 0, 0, 0, 0, 1393, 0, + 0, 0, 0, -2544, 1149, 0, 0, 0, 0, 0, + 0, 0, 0, 6222, 0, 0, -2544, 0, 2718, 0, + 0, 0, -2544, 1394, 0, 0, 0, -2544, 0, 0, + 0, 736, 2994, -2544, 0, 2995, -2544, 0, 0, 0, + -2544, 0, 0, 0, 1040, 0, 0, 0, 0, 736, + 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, + 0, 0, 0, 1304, 0, 1304, 1304, 0, 0, -2544, + 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, + 0, 0, 0, 0, 1395, 0, 0, 0, 0, -2544, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6292, 0, 0, 0, 0, 0, 0, 1043, 734, 0, + 0, 0, 0, 0, 0, 0, 0, 921, 1396, 0, + 0, 1045, 0, 2996, 0, 0, 0, 381, 0, 0, + 0, 0, 0, 381, 0, 0, -2544, 0, 0, -2544, + 0, 0, 0, 883, 0, -2544, 0, 0, 1397, 0, + 0, 1398, 0, 0, 0, 1048, 0, 1049, 0, 0, + 0, 0, 0, 0, 1050, 0, 734, 1051, 0, 0, + 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, + 0, 0, 734, 0, 0, 0, 1052, 0, 0, 0, + 0, 0, 0, 1399, 0, 0, 0, 0, 0, 1054, + 0, -2544, 1400, 5212, 0, 0, 1056, 0, 0, 0, + 0, 0, 0, 0, 1401, 0, 1058, 0, 0, 0, + 736, 1402, 0, 2906, 0, 0, 0, 0, 0, 0, + 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, + 0, 0, 5639, 0, 5825, 0, 0, 1061, 0, 0, + 0, 0, 0, 0, 0, 0, 1120, 945, 0, 0, + 0, 0, 734, 734, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, + 5661, 0, 1292, 1294, -2544, 0, 1297, 0, 0, 734, + 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5677, 0, 0, 0, 1347, 0, -2544, 0, + -2544, -2544, 0, 1357, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5317, 0, 0, 5320, 0, 0, 0, + 0, 0, 0, 736, 736, 0, 0, 0, 0, 0, + 0, 0, 1416, 4, 1419, 0, 0, 1421, 0, 0, + -2544, 0, 0, -2544, -2544, 0, -2544, 0, 0, 0, + 736, 1445, 5, 736, 0, 0, 0, 1449, 0, 5704, + 0, 0, 6, 7, 0, 0, 0, 0, 0, 9, + 10, 0, 0, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 0, 0, + 0, 37, 0, 38, 39, 0, 0, 0, 0, 40, + 0, 0, 0, 0, 0, 0, 5402, 0, 0, 0, + 0, 0, 0, 0, -2560, 381, 381, 381, 0, 1291, + 0, 0, 1303, 3359, 1303, 1303, 0, 0, 0, 0, + 0, 0, 0, 0, 883, 0, 0, 0, 0, 736, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 380, 0, 41, 0, 736, 0, + 0, 0, 0, 0, 0, -2560, 0, 0, 0, 0, + 0, 5789, 0, 0, 0, 0, 736, 0, -2560, 0, + 0, 0, 0, 0, -2560, 0, 0, 0, 0, -2560, + 0, 0, 0, 0, 0, -2560, 0, 0, -2560, 0, + 0, 0, -2560, 0, 0, 0, 6577, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4383, 0, + 0, 0, 0, 380, 0, 380, 0, 0, 0, 0, + 0, -2560, 0, 42, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6577, 735, 0, 0, 0, 0, + 0, -2560, 0, 43, 0, 6577, 0, 0, 0, 0, + 0, 0, 0, 736, 0, 945, 0, 0, 735, 0, + 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, + 0, 380, 735, 0, 0, 0, 735, 0, -2560, 0, + 45, -2560, 0, 0, 735, 0, 0, -2560, 0, 0, + 381, 0, 0, 0, 0, 0, 736, 0, 736, 0, + 0, 0, 735, 0, 0, 945, 0, 0, 0, 0, + 0, 736, 0, 736, 0, 0, 0, 46, 0, 0, + 47, 0, 0, 1027, 0, 0, 0, 0, 1028, 0, + 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, + 0, 0, 48, -2560, 0, 0, 0, 0, 0, 1150, + 0, 0, 0, 2023, 2024, 0, 735, 735, 0, 0, + 0, 0, 0, 0, 0, 0, 1029, 0, 0, 0, + 0, 0, 0, 0, 1310, 0, 0, 0, 0, 1030, + 0, 0, 0, 736, 0, 0, 1344, 380, 735, 0, + 0, 380, 0, 0, 0, 1031, 0, 1363, 1120, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 735, 1032, 380, 0, 1383, 0, 735, 0, + 0, 0, 1414, 0, 2168, 735, -2560, 0, 0, 0, + 1150, 49, 735, 0, 0, 735, 0, 1033, 0, 2180, + 0, 735, 0, 0, 736, 0, 0, 0, 1034, 0, + -2560, 0, -2560, -2560, 0, 0, 0, 1035, 0, 0, + 0, 735, 0, 0, 736, 0, 5672, 735, 2202, 2203, + 1036, 0, 0, 0, 735, 1037, 0, 0, 5682, 0, + 0, 50, 1038, 0, 0, 0, 736, 735, 0, 736, + 0, 0, -2560, 2240, 0, -2560, -2560, 51, -2560, 0, + 735, 1039, 0, 0, 0, 380, 0, 0, 0, 0, + 0, 735, 52, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 0, 0, 0, 0, 1040, 0, 0, + 0, 4792, 0, 0, 0, 54, 55, 56, 57, 58, + 59, 0, 0, 60, 61, 1576, 2347, 0, 381, 0, + 66, 380, 0, 0, 0, 0, 0, 0, 0, 2314, + 2316, 0, 0, 0, 0, 0, 0, 1041, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2414, 0, 0, + 1042, 0, 2414, 2414, 0, 0, 0, 0, 0, 0, + 1043, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 921, 1044, 0, 0, 1045, 0, 0, 0, 0, 0, + 1783, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1807, + 0, 1046, 0, 0, 1047, 0, 0, 0, 1048, 0, + 1049, 0, 0, 0, 0, 0, 0, 1050, 0, 0, + 1051, 0, 1827, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 734, 0, 1052, + 0, 0, 0, 0, 0, 0, 1053, 0, 0, 0, + 0, 4383, 1054, 0, 0, 1055, 0, 0, 0, 1056, + 734, 0, 0, 0, 6207, 0, 0, 1057, 0, 1058, + 0, 0, 0, 0, 1059, 0, 0, 0, 734, 0, + 0, 0, 0, 883, 734, 0, 0, 1060, 734, 0, + 0, 0, 0, 736, 0, 0, 734, 0, 0, 0, + 1061, 0, 0, 0, 0, 0, 0, 0, 735, 0, + 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, + 2022, 0, 0, 0, 0, 0, 735, 0, 0, 0, + 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 381, 0, 0, 0, 734, 381, + 0, 381, 0, 0, 0, 0, 2480, 0, 0, 2481, + 0, 1149, 0, 2482, 2483, 2484, 0, 0, 734, 734, + 0, 4383, 0, 4383, 381, 0, 0, 0, 0, 0, + 2986, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2987, 0, 0, 0, 0, 0, 0, 2988, 0, 883, + 734, 0, 0, 883, 380, 0, 0, 0, 0, 0, + 380, 0, 0, 736, 0, 0, 736, 0, 0, 0, + 0, 0, 0, 2989, 734, 0, 883, 0, 0, 0, + 734, 0, 0, 0, 2200, 0, 0, 734, 0, 0, + 0, 0, 1149, 0, 734, 0, 0, 734, 0, 0, + 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, + 0, 2234, 2237, 2238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 734, 0, 0, 0, 0, 0, 734, + 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, + 0, 6375, 0, 0, 0, 0, 0, 735, 0, 734, + 0, 0, 2480, 0, 0, 2481, 736, 736, 0, 2482, + 2483, 2484, 734, 0, 0, 0, 736, 883, 0, 0, + 0, 0, 0, 734, 0, 0, 2986, 0, 0, 0, + 0, 0, 0, 736, 0, 0, 2987, 2990, 0, 0, + 0, 0, 2991, 2988, 0, 0, 0, 945, 0, 0, + 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2992, 2668, 0, 3196, 0, 2989, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2993, + 0, 0, 0, 883, 0, 0, 0, 0, 0, 0, + 0, 0, 3235, 0, 0, 0, 0, 0, 0, 0, + 0, 381, 0, 0, 1528, 0, 0, 0, 0, 0, + 735, 735, 0, 0, 0, 0, 0, 0, 2718, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, + 1528, 0, 2994, 0, 1783, 2995, 0, 735, 0, 0, + 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 945, 0, 0, 0, 2420, 0, 0, 0, 0, + 0, 0, 0, 0, 1783, 3315, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2990, 0, 0, 0, 0, 2991, 0, + 0, 0, 0, 0, 3340, 3341, 3342, 3343, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2992, 2668, 380, 380, 380, 0, 0, 0, 0, 0, + 0, 0, 0, 2996, 0, 2993, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 735, 0, 0, 0, 3396, + 3397, 0, 0, 0, 2718, 0, 0, 0, 0, 0, + 734, 0, 0, 735, 0, 3414, 0, 0, 2994, 0, + 0, 2995, 0, 0, 0, 0, 0, 0, 734, 0, + 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3458, + 3459, 3460, 3461, 0, 2979, 0, 0, 0, 0, 0, + 0, 0, 0, 2906, 0, 0, 0, 0, 0, 0, + 891, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, + 0, 0, 0, 0, 5833, 0, 0, 0, 0, 0, + 0, 0, 0, 951, 736, 0, 3042, 0, 0, 0, + 735, 0, 0, 0, 0, 0, 883, 0, 0, 2996, + 0, 0, 883, 0, 0, 0, 891, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, + 0, 0, 945, 945, 0, 0, 0, 380, 736, 0, + 0, 0, 0, 735, 0, 735, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1153, 3556, 0, 735, 0, + 735, 0, 3560, 1153, 0, 1153, 0, 736, 0, 0, + 0, 0, 0, 0, 2147, 0, 0, 0, 891, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, + 0, 0, 1528, 0, 0, 0, 0, 0, 0, 2906, + 0, 0, 0, 1528, 0, 0, 0, 2907, 2908, 2909, + 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, 1528, 0, + 5836, 0, 0, 0, 0, 0, 2480, 0, 0, 2481, + 735, 0, 3208, 2482, 2483, 2484, 0, 0, 0, 0, + 0, 3231, 0, 0, 0, 381, 0, 0, 0, 4383, + 2986, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2987, 0, 0, 0, 736, 0, 0, 2988, 0, 3266, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 735, 3289, 2989, 0, 3292, 0, 0, 0, 0, + 0, 0, 734, 734, 0, 0, 0, 0, 0, 1528, + 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, + 0, 0, 734, 735, 0, 0, 735, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3344, 0, 0, 0, 0, 3726, 0, 0, 0, 0, + 0, 736, 0, 945, 3363, 0, 0, 945, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3385, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3388, 883, 883, 883, 2990, 0, 0, + 0, 0, 2991, 0, 0, 380, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, + 0, 0, 0, 0, 2992, 2668, 0, 0, 0, 0, + 0, 0, 1528, 0, 0, 3432, 0, 734, 0, 2993, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, + 3468, 0, 0, 0, 0, 0, 0, 3481, 0, 0, + 0, 736, 0, 736, 0, 0, 0, 0, 2718, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2994, 0, 0, 2995, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1304, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2480, 0, 0, 2481, 0, 0, 0, + 2482, 2483, 2484, 0, 0, 0, 0, 0, 381, 0, + 0, 0, 0, 1304, 0, 0, 0, 2986, 0, 0, + 735, 0, 0, 2996, 0, 3569, 0, 2987, 0, 883, + 0, 0, 0, 0, 2988, 734, 0, 734, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5731, + 734, 0, 734, 0, 0, 0, 0, 0, 0, 0, + 2989, 0, 0, 0, 0, 0, 1783, 1783, 0, 0, + 0, 380, 0, 0, 0, 0, 380, 0, 380, 0, + 945, 0, 0, 0, 0, 0, 3626, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 734, 2906, 0, 0, 0, 0, 0, 0, + 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, + 735, 0, 0, 735, 5878, 0, 0, 0, 0, 0, + 0, 0, 3114, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2990, 0, 0, 0, 0, 2991, + 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2992, 2668, 734, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 736, 0, 0, 2993, 0, 0, 3114, + 0, 0, 0, 0, 0, 734, 0, 736, 734, 0, + 0, 0, 0, 735, 735, 3726, 0, 0, 945, 0, + 0, 0, 0, 735, 0, 945, 0, 0, 0, 0, + 945, 0, 0, 945, 5852, 2718, 1528, 381, 0, 0, + 735, 0, 0, 0, 0, 0, 0, 0, 0, 2994, + 0, 0, 2995, 0, 0, 0, 0, 891, 0, 0, + 0, 0, 945, 0, 0, 951, 0, 0, 0, 1528, + 0, 0, 0, 0, 951, 0, 945, 0, 0, 0, + 0, 0, 951, 0, 0, 951, 0, 883, 0, 0, + 0, 0, 2480, 0, 0, 2481, 0, 0, 0, 2482, + 2483, 2484, 0, 0, 0, 0, 0, 0, 380, 0, + 0, 0, 0, 0, 0, 0, 2986, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2987, 0, 1303, 0, + 0, 0, 0, 2988, 0, 735, 0, 0, 0, 0, + 2996, 0, 0, 0, 0, 0, 0, 0, 0, 2147, + 2147, 2147, 0, 0, 0, 0, 0, 0, 0, 2989, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1303, 0, 0, 0, 0, 0, 1528, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 951, 1528, + 0, 0, 0, 1529, 0, 0, 0, 951, 0, 0, + 3952, 0, 0, 0, 951, 1528, 0, 951, 0, 381, + 0, 736, 0, 0, 0, 0, 0, 0, 0, 1529, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 945, 0, 0, 0, 0, 0, + 2906, 0, 0, 0, 0, 0, 0, 0, 2907, 2908, + 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, 1528, 0, + 0, 5911, 734, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2990, 0, 0, 0, 0, 2991, 1528, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1528, 0, 0, 0, 0, 0, 0, 0, + 2992, 2668, 0, 945, 1528, 0, 0, 0, 0, 0, + 0, 0, 0, 883, 0, 2993, 0, 381, 883, 0, + 883, 0, 0, 0, 0, 0, 951, 951, 4088, 0, + 0, 4091, 0, 1153, 0, 0, 0, 1153, 0, 736, + 0, 0, 0, 883, 1528, 1528, 0, 0, 0, 0, + 0, 0, 1304, 0, 2718, 0, 0, 0, 0, 0, + 0, 735, 0, 951, 0, 736, 0, 0, 2994, 0, + 0, 2995, 0, 0, 3780, 0, 0, 0, 0, 0, + 0, 0, 734, 0, 0, 734, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3792, 0, 0, 735, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6167, 0, 735, 0, 0, 4182, 0, + 0, 0, 0, 0, 1304, 1304, 0, 0, 0, 0, + 0, 4195, 1827, 0, 0, 0, 0, 0, 0, 4204, + 0, 945, 0, 0, 735, 0, 0, 0, 0, 0, + 1827, 1827, 0, 0, 0, 0, 0, 0, 0, 2996, + 0, 0, 0, 0, 0, 2147, 0, 0, 2147, 0, + 0, 0, 0, 0, 0, 734, 734, 0, 736, 4249, + 0, 0, 0, 0, 1783, 734, 0, 0, 0, 0, + 0, 0, 1528, 0, 0, 0, 0, 0, 0, 0, + 4275, 0, 734, 0, 0, 0, 945, 0, 0, 1153, + 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 951, 951, 891, 0, 0, 0, 0, + 0, 735, 0, 0, 0, 945, 951, 0, 0, 0, + 0, 1529, 951, 0, 0, 0, 951, 0, 951, 2906, + 0, 0, 1529, 0, 4349, 0, 4351, 2907, 2908, 2909, + 2910, 2911, 2912, 2913, 2914, 2915, 0, 1529, 0, 0, + 5951, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 951, + 0, 951, 951, 0, 0, 0, 0, 381, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, + 0, 0, 0, 0, 945, 0, 0, 0, 0, 2480, + 0, 0, 2481, 0, 0, 0, 2482, 2483, 2484, 0, + 0, 0, 0, 4408, 0, 381, 3988, 0, 1529, 0, + 4415, 1304, 1304, 2986, 0, 0, 381, 0, 0, 0, + 0, 4010, 0, 2987, 0, 0, 0, 0, 0, 2480, + 2988, 0, 2481, 0, 0, 0, 2482, 2483, 2484, 0, + 4037, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2986, 0, 0, 2989, 0, 0, 0, + 0, 0, 0, 2987, 0, 0, 0, 0, 0, 0, + 2988, 1303, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, + 0, 0, 0, 0, 0, 0, 2989, 0, 735, 0, + 735, 0, 0, 0, 0, 0, 2480, 0, 0, 2481, + 0, 0, 0, 2482, 2483, 2484, 0, 0, 4112, 4113, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2986, 0, 0, 0, 0, 945, 0, 0, 0, 0, + 2987, 1529, 0, 1303, 1303, 0, 735, 2988, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, + 2990, 0, 951, 2989, 0, 2991, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 380, 0, 2992, 2668, 0, + 0, 0, 951, 0, 0, 734, 0, 0, 0, 0, + 2990, 0, 2993, 0, 0, 2991, 0, 734, 0, 4236, + 945, 0, 0, 0, 0, 0, 945, 0, 0, 0, + 951, 951, 951, 0, 951, 0, 0, 2992, 2668, 0, + 0, 0, 0, 6518, 0, 0, 734, 0, 0, 0, + 0, 2718, 2993, 0, 951, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2994, 0, 0, 2995, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2147, 0, 0, 0, 0, 0, 2990, 0, 0, + 0, 2718, 2991, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2994, 0, 0, 2995, 0, + 0, 4652, 4653, 0, 2992, 2668, 0, 0, 0, 0, + 0, 0, 0, 0, 883, 0, 0, 6561, 0, 2993, + 0, 0, 951, 0, 0, 0, 951, 951, 0, 945, + 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, + 0, 951, 0, 0, 0, 0, 2996, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2718, 0, + 0, 0, 0, 0, 0, 0, 0, 6561, 0, 0, + 6596, 0, 2994, 0, 0, 2995, 0, 0, 0, 0, + 1303, 1303, 0, 0, 0, 0, 2996, 0, 0, 0, + 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, + 0, 1529, 0, 0, 0, 0, 0, 891, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1153, 0, 0, + 734, 0, 0, 0, 380, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3885, 2906, 0, 0, 3114, + 3891, 0, 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, + 2913, 2914, 2915, 2996, 0, 0, 0, 6286, 1153, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1529, 0, + 0, 0, 0, 0, 0, 0, 2906, 0, 0, 0, + 0, 0, 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, + 2913, 2914, 2915, 0, 0, 0, 0, 6308, 1528, 0, + 0, 0, 0, 0, 1528, 1529, 0, 0, 0, 0, + 0, 0, 0, 0, 1153, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4815, 0, 0, + 0, 1153, 0, 0, 0, 0, 0, 0, 1529, 0, + 734, 0, 734, 4530, 0, 1528, 0, 0, 2480, 0, + 0, 2481, 0, 2906, 0, 2482, 2483, 2484, 0, 0, + 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, + 0, 0, 2986, 1827, 6499, 0, 0, 0, 0, 0, + 0, 0, 2987, 0, 0, 0, 0, 0, 734, 2988, + 0, 0, 0, 0, 0, 0, 380, 0, 735, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2989, 0, 0, 951, 951, + 951, 0, 2480, 0, 0, 2481, 0, 0, 0, 2482, + 2483, 2484, 0, 0, 0, 0, 0, 883, 0, 0, + 0, 0, 0, 0, 0, 0, 2986, 1529, 0, 0, + 0, 0, 0, 0, 0, 0, 2987, 0, 1529, 0, + 0, 0, 0, 2988, 0, 0, 0, 0, 0, 0, + 891, 0, 0, 0, 1529, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2989, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 380, 0, 0, 0, 0, 4982, + 0, 2147, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 735, 1529, 0, 2990, + 0, 0, 0, 0, 2991, 0, 0, 0, 0, 0, + 0, 0, 951, 1528, 0, 951, 0, 0, 1529, 0, + 0, 0, 735, 0, 0, 951, 2992, 2668, 0, 2480, + 0, 1529, 2481, 0, 0, 0, 2482, 2483, 2484, 0, + 0, 2993, 0, 1529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2986, 0, 0, 951, 951, 0, 0, + 0, 0, 0, 2987, 0, 0, 0, 0, 0, 0, + 2988, 951, 0, 2990, 951, 0, 0, 0, 2991, 0, + 2718, 0, 0, 1529, 1529, 0, 0, 3114, 0, 0, + 4742, 3114, 0, 0, 2994, 0, 2989, 2995, 0, 0, + 2992, 2668, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 734, 0, 0, 2993, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, + 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, + 0, 0, 951, 0, 0, 951, 951, 0, 0, 0, + 0, 0, 0, 0, 2718, 0, 883, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2994, 0, + 0, 2995, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 951, 951, 0, 2996, 0, 0, 951, 951, + 0, 0, 0, 0, 0, 951, 951, 951, 0, 0, + 951, 0, 951, 0, 951, 951, 951, 951, 951, 951, + 2990, 951, 0, 951, 951, 2991, 0, 951, 0, 0, + 0, 0, 0, 0, 1528, 0, 0, 0, 0, 0, + 0, 1529, 951, 951, 951, 0, 0, 2992, 2668, 1528, + 0, 0, 0, 0, 1528, 0, 0, 0, 0, 951, + 0, 891, 2993, 0, 0, 0, 4866, 4867, 4868, 2996, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4877, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 380, 2906, 0, 0, 0, 0, + 0, 2718, 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, + 2914, 2915, 0, 0, 0, 2994, 6517, 0, 2995, 4901, + 4903, 0, 0, 0, 4908, 0, 0, 0, 0, 0, + 0, 0, 380, 0, 0, 0, 0, 0, 883, 0, + 734, 0, 0, 380, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2906, + 0, 0, 0, 0, 0, 0, 0, 2907, 2908, 2909, + 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, 0, 0, + 6564, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 951, 0, 0, 0, 2996, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 951, 0, 0, 0, 883, 0, 5003, 0, + 0, 1783, 0, 0, 0, 0, 5359, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, + 5361, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 951, 734, 3114, 0, 0, 3891, 0, + 3891, 0, 0, 0, 0, 3114, 2906, 0, 0, 0, + 0, 0, 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, + 2913, 2914, 2915, 0, 0, 0, 0, 6582, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1528, 0, 0, 0, 0, 0, 0, + 0, 1528, 0, 0, 0, 0, 0, 0, 0, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5105, + 5106, 5107, 0, 0, 0, 0, 3114, 0, 5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, + 0, 0, 0, 0, 0, 9, 10, 734, 0, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 0, 0, 0, 37, 0, 38, + 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1528, 0, 1528, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 951, 951, 951, + 951, 951, 951, 951, 951, 951, 0, 951, 0, 0, + 0, 0, 0, 5, 0, 0, 0, 951, 0, 0, + 951, 0, 0, 6, 7, 0, 0, 0, 8, 0, + 9, 10, 41, 0, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, + 36, 0, 37, 0, 38, 39, 0, 0, 0, 0, + 40, 0, 0, 0, 0, 0, 951, 0, 1528, 0, + 951, 0, 0, 951, 0, 951, 883, 0, 951, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 951, 0, 2147, 0, 0, 0, 42, + 0, 2147, 951, 951, 0, 1995, 0, 0, 0, 0, + 1528, 1996, 0, 0, 883, 0, 0, 41, 2058, 43, + 0, 0, 0, 0, 0, 883, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3891, 0, + 2059, 0, 44, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1998, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1529, 0, 0, 0, 1529, 1529, + 0, 2060, 0, 0, 42, 0, 0, 0, 0, 0, + 891, 0, 0, 46, 0, 0, 47, 0, 0, 1528, + 0, 0, 1999, 0, 43, 0, 0, 0, 0, 2000, + 0, 5372, 2001, 0, 0, 0, 0, 0, 48, 0, + 0, 3891, 0, 0, 951, 0, 0, 44, 0, 0, + 0, 0, 0, 0, 0, 951, 0, 1529, 951, 2002, + 951, 951, 5404, 1529, 0, 1528, 0, 0, 0, 0, + 5697, 45, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5701, 0, 0, 1153, 0, + 2061, 0, 0, 2003, 3481, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1529, 0, 0, 0, 46, 0, + 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 891, 49, 0, 5463, + 891, 0, 0, 48, 0, 0, 0, 0, 2062, 0, + 0, 2063, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 891, 0, 0, 2064, 0, 0, 0, + 2005, 3569, 0, 0, 0, 0, 1528, 0, 0, 1153, + 2006, 0, 0, 0, 0, 0, 5760, 50, 0, 2007, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1528, + 2065, 2008, 0, 51, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, + 0, 0, 0, 0, 1528, 0, 0, 0, 0, 0, + 0, 0, 49, 0, 0, 0, 0, 0, 0, 2066, + 0, 0, 2010, 2011, 2067, 0, 0, 0, 53, 0, + 0, 0, 0, 0, 891, 0, 0, 0, 0, 0, + 0, 54, 55, 56, 57, 58, 59, 2068, 0, 60, + 61, 1576, 0, 2069, 0, 0, 66, 1577, 951, 951, + 951, 0, 50, 0, 951, 0, 0, 2070, 0, 5558, + 5559, 5560, 5561, 0, 0, 0, 0, 0, 51, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 951, 1529, 52, 0, 0, 0, 0, 0, 0, + 891, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2013, 0, 53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 951, 0, 54, 55, 56, 57, + 58, 59, 0, 0, 60, 61, 62, 63, 0, 64, + 65, 66, 67, 68, 0, 0, 0, 3114, 0, 0, + 0, 0, 0, 0, 0, 0, 1529, 0, 0, 0, + 1529, 5883, 0, 5884, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 951, 0, 0, 0, 0, 0, 0, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, + 7, 0, 0, 0, 0, 0, 9, 10, 0, 0, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 0, 0, 3891, 37, 0, + 38, 39, 0, 0, 0, 0, 40, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3891, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 0, 951, 0, 1529, 951, + 0, 951, 951, 1529, 0, 6011, 0, 0, 0, 0, + 0, 951, 0, 0, 0, 0, 951, 0, 0, 0, + 0, 0, 0, 0, 0, 2480, 0, 0, 2481, 0, + 0, 0, 2482, 2483, 2484, 0, 0, 0, 0, 0, + 0, 0, 951, 951, 951, 0, 0, 951, 0, 2986, + 0, 0, 0, 0, 0, 951, 951, 951, 951, 2987, + 0, 0, 0, 891, 0, 0, 2988, 0, 951, 891, + 42, 951, 0, 951, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 951, 951, 0, 1528, 951, 0, + 43, 0, 2989, 0, 0, 0, 0, 5782, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 951, 5792, 951, + 0, 951, 0, 44, 0, 0, 0, 0, 0, 2480, + 0, 0, 2481, 0, 0, 0, 2482, 2483, 2484, 0, + 0, 951, 0, 0, 0, 3891, 0, 45, 3114, 0, + 0, 0, 951, 2986, 0, 0, 0, 3814, 0, 6129, + 0, 6131, 0, 2987, 0, 0, 0, 0, 0, 0, + 2988, 0, 0, 0, 0, 0, 0, 0, 0, 1526, + 0, 0, 0, 951, 46, 0, 0, 47, 0, 0, + 0, 0, 0, 0, 0, 0, 2989, 0, 951, 0, + 0, 0, 0, 0, 0, 1526, 0, 0, 0, 48, + 0, 0, 951, 0, 0, 0, 2990, 0, 0, 0, + 0, 2991, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2992, 2668, 0, 0, 3815, 0, 0, + 0, 0, 0, 0, 1529, 0, 0, 1529, 2993, 1529, + 0, 0, 0, 0, 1529, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2480, 0, 951, 2481, 0, 0, 0, + 2482, 2483, 2484, 0, 1528, 0, 0, 2718, 49, 0, + 0, 0, 0, 0, 0, 0, 0, 2986, 0, 0, + 2990, 2994, 1529, 0, 2995, 2991, 0, 2987, 0, 0, + 1529, 0, 0, 0, 2988, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2992, 2668, 0, + 0, 0, 0, 0, 0, 1529, 0, 0, 50, 0, + 2989, 0, 2993, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, + 0, 891, 891, 891, 0, 0, 0, 0, 0, 0, + 0, 2718, 0, 0, 0, 5964, 0, 0, 0, 0, + 1783, 0, 2996, 0, 0, 2994, 0, 0, 2995, 53, + 0, 0, 6322, 0, 1529, 0, 1529, 0, 0, 5994, + 0, 0, 54, 55, 56, 57, 58, 59, 1528, 0, + 60, 61, 1576, 3561, 0, 0, 0, 66, 0, 0, + 4468, 0, 0, 0, 0, 4469, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2990, 0, 1528, 0, 0, 2991, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1528, 0, + 0, 2992, 2668, 0, 0, 0, 2996, 0, 0, 0, + 0, 0, 2906, 0, 0, 0, 2993, 1529, 0, 0, + 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, + 0, 3383, 0, 0, 0, 0, 0, 0, 0, 6402, + 0, 0, 0, 0, 951, 0, 0, 1526, 0, 0, + 951, 0, 0, 0, 6103, 2718, 0, 0, 1526, 1529, + 0, 0, 0, 0, 0, 1528, 3816, 0, 0, 2994, + 0, 0, 2995, 1526, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 891, 1529, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2906, 0, 0, 0, + 0, 0, 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, + 2913, 2914, 2915, 0, 0, 0, 0, 0, 0, 0, + 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6487, 0, 0, 0, 0, 0, + 0, 0, 0, 6180, 0, 0, 0, 0, 1529, 0, + 4470, 0, 0, 0, 1526, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6501, 6501, 0, 4, 0, 0, + 1529, 0, 6203, 0, 0, 5787, 0, 1528, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 1529, 0, 6, 7, 0, 0, + 0, 0, 0, 9, 10, 0, 0, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 0, 0, 0, 37, 0, 38, 39, 0, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, + 2906, 0, 0, 0, 0, 0, 0, 0, 2907, 2908, + 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, 0, + 0, 0, 0, 0, 2480, 0, 0, 2481, 0, 6501, + 0, 2482, 2483, 2484, 0, 0, 0, 1526, 0, 0, + 0, 0, 951, 0, 0, 1529, 0, 0, 2986, 0, + 41, 951, 0, 0, 0, 0, 0, 0, 2987, 951, + 0, 951, 0, 0, 951, 2988, 0, 0, 1529, 951, + 951, 951, 951, 0, 0, 951, 951, 951, 951, 951, + 951, 951, 951, 951, 951, 0, 0, 0, 951, 951, + 951, 2989, 0, 1529, 0, 0, 0, 0, 951, 0, + 0, 0, 951, 0, 891, 0, 951, 0, 0, 0, + 0, 0, 0, 0, 951, 0, 0, 951, 0, 951, + 0, 0, 0, 0, 0, 0, 0, 42, 0, 951, + 0, 0, 951, 951, 0, 3891, 0, 951, 951, 0, + 0, 0, 0, 0, 951, 0, 0, 43, 0, 0, + 0, 0, 0, 0, 951, 0, 0, 951, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, + 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6455, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2961, 0, 0, 0, 45, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2990, 0, 0, 0, 0, + 2991, 0, 0, 0, 951, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 951, 46, 2992, 2668, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1529, 2993, 0, 0, + 0, 0, 0, 0, 0, 3891, 48, 0, 951, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2480, 0, 0, 2481, 0, 0, + 0, 2482, 2483, 2484, 0, 0, 2718, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2986, 0, + 2994, 0, 0, 2995, 0, 0, 0, 0, 2987, 0, + 0, 0, 0, 0, 0, 2988, 0, 1526, 0, 0, + 0, 0, 0, 0, 0, 6456, 0, 1528, 0, 0, + 891, 0, 0, 0, 0, 891, 1529, 891, 0, 0, + 0, 2989, 0, 0, 0, 49, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2480, 0, 0, 2481, + 891, 1529, 0, 2482, 2483, 2484, 0, 0, 0, 0, + 0, 0, 0, 1528, 0, 0, 0, 0, 1528, 1528, + 2986, 0, 0, 4425, 1526, 0, 0, 0, 0, 0, + 2987, 2996, 0, 0, 0, 50, 0, 2988, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1526, 0, 2989, 0, 0, 52, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1526, 2990, 53, 0, 0, 0, + 2991, 0, 0, 0, 0, 0, 951, 0, 0, 54, + 55, 56, 57, 58, 59, 0, 0, 60, 61, 1576, + 0, 0, 2992, 2668, 66, 0, 0, 0, 0, 5787, + 1528, 2906, 0, 0, 0, 0, 1529, 2993, 0, 2907, + 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, 951, + 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2718, 2990, 0, 0, + 0, 0, 2991, 0, 1529, 0, 0, 1529, 951, 951, + 2994, 0, 0, 2995, 0, 0, 0, 0, 0, 951, + 0, 0, 0, 1526, 2992, 2668, 0, 0, 0, 0, + 0, 0, 0, 0, 1526, 0, 0, 5066, 0, 2993, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1526, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2480, 0, 0, 2481, 0, + 0, 0, 2482, 2483, 2484, 0, 0, 0, 2718, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2986, + 0, 0, 2994, 0, 0, 2995, 0, 0, 0, 2987, + 951, 2996, 0, 1526, 0, 0, 2988, 0, 0, 0, + 0, 951, 0, 0, 0, 0, 0, 0, 5067, 0, + 0, 0, 0, 0, 1526, 0, 0, 0, 0, 0, + 0, 0, 2989, 0, 0, 0, 0, 1526, 0, 951, + 0, 0, 951, 0, 0, 0, 0, 0, 0, 1526, + 951, 951, 0, 1529, 0, 0, 0, 951, 951, 0, + 0, 0, 951, 0, 0, 0, 951, 0, 0, 951, + 951, 0, 0, 0, 951, 0, 0, 1528, 0, 0, + 951, 0, 0, 2996, 0, 0, 0, 0, 0, 1526, + 1526, 0, 951, 0, 0, 0, 0, 0, 0, 0, + 951, 2906, 0, 0, 951, 0, 0, 0, 0, 2907, + 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1517, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, + 0, 2480, 0, 0, 2481, 0, 2990, 0, 2482, 2483, + 2484, 2991, 0, 1517, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2986, 0, 0, 4473, 951, + 0, 0, 0, 2992, 2668, 2987, 0, 0, 0, 0, + 0, 0, 2988, 2906, 0, 0, 0, 1529, 2993, 0, + 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, + 0, 0, 0, 0, 0, 0, 0, 0, 2989, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1529, 0, 2718, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1526, 0, 0, + 0, 2994, 2480, 0, 2995, 2481, 0, 1529, 0, 2482, + 2483, 2484, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4441, 0, 0, 0, 2986, 0, 0, 0, + 951, 2480, 0, 0, 2481, 0, 2987, 0, 2482, 2483, + 2484, 0, 0, 2988, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2986, 0, 0, 4484, 0, + 0, 0, 0, 0, 0, 2987, 0, 0, 0, 2989, + 0, 0, 2988, 0, 1529, 0, 0, 0, 0, 0, + 0, 0, 2990, 0, 0, 0, 0, 2991, 0, 0, + 0, 0, 2996, 0, 0, 0, 0, 0, 2989, 949, + 951, 0, 0, 0, 0, 0, 0, 0, 0, 2992, + 2668, 0, 0, 0, 0, 0, 951, 0, 0, 0, + 0, 891, 0, 0, 2993, 0, 0, 0, 0, 0, + 0, 1115, 2480, 0, 0, 2481, 0, 0, 0, 2482, + 2483, 2484, 0, 0, 0, 0, 1117, 951, 0, 0, + 0, 0, 0, 0, 0, 1125, 2986, 0, 0, 0, + 0, 0, 0, 2718, 4478, 0, 2987, 0, 0, 0, + 1139, 0, 1115, 2988, 2147, 0, 1162, 2994, 0, 0, + 2995, 0, 0, 2990, 0, 0, 1194, 0, 2991, 0, + 0, 0, 2906, 0, 1529, 1199, 1529, 0, 0, 2989, + 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, + 2992, 2668, 2990, 0, 0, 0, 0, 2991, 0, 0, + 0, 0, 0, 0, 0, 2993, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2992, + 2668, 0, 0, 0, 0, 1517, 0, 0, 0, 0, + 0, 0, 0, 0, 2993, 951, 1517, 0, 951, 0, + 0, 951, 951, 951, 2718, 0, 0, 2480, 2996, 0, + 2481, 1517, 0, 0, 2482, 2483, 2484, 0, 2994, 0, + 0, 2995, 0, 0, 0, 0, 951, 951, 0, 0, + 951, 2986, 0, 2718, 5073, 0, 0, 0, 0, 0, + 0, 2987, 0, 0, 0, 951, 0, 2994, 2988, 0, + 2995, 0, 951, 2990, 0, 0, 0, 951, 2991, 0, + 951, 951, 0, 0, 0, 0, 0, 0, 951, 0, + 0, 0, 0, 0, 2989, 0, 0, 0, 0, 0, + 2992, 2668, 0, 0, 0, 0, 0, 0, 0, 951, + 0, 951, 0, 0, 0, 2993, 0, 0, 0, 0, + 0, 0, 1517, 951, 0, 0, 0, 0, 2906, 2996, + 0, 0, 0, 0, 0, 0, 2907, 2908, 2909, 2910, + 2911, 2912, 2913, 2914, 2915, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2718, 0, 0, 0, 2996, 0, + 0, 0, 0, 0, 1529, 0, 0, 0, 2994, 0, + 0, 2995, 0, 0, 0, 951, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2990, 0, + 0, 0, 0, 2991, 891, 0, 0, 0, 0, 951, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2906, + 0, 0, 0, 0, 0, 2992, 2668, 2907, 2908, 2909, + 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, 0, 0, + 2993, 0, 0, 0, 0, 1517, 0, 0, 2906, 2996, + 0, 0, 0, 0, 0, 0, 2907, 2908, 2909, 2910, + 2911, 2912, 2913, 2914, 2915, 0, 0, 0, 0, 0, + 0, 951, 0, 0, 1529, 0, 0, 0, 0, 2718, + 0, 5020, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1995, 2994, 0, 0, 2995, 0, 1996, 0, + 0, 0, 0, 0, 0, 2058, 951, 0, 0, 0, + 951, 0, 951, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2059, 0, 0, + 951, 0, 0, 0, 0, 0, 951, 0, 0, 0, + 951, 0, 0, 1998, 0, 0, 1529, 951, 0, 2906, + 0, 0, 0, 0, 0, 0, 0, 2907, 2908, 2909, + 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, 0, 0, + 1526, 0, 0, 0, 1526, 1526, 0, 0, 2060, 0, + 0, 0, 0, 0, 2996, 0, 0, 0, 0, 0, + 0, 0, 1529, 0, 0, 0, 0, 1529, 1529, 1999, + 0, 0, 951, 0, 0, 0, 2000, 951, 951, 2001, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1526, 0, 0, 2002, 0, 0, 1526, + 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, + 951, 0, 0, 891, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2061, 0, 0, + 2003, 0, 0, 0, 0, 0, 0, 0, 951, 0, + 1526, 0, 0, 0, 2906, 0, 0, 0, 0, 0, + 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, + 2915, 0, 0, 0, 2480, 0, 0, 2481, 1529, 1529, + 0, 2482, 2483, 2484, 0, 2062, 0, 0, 2063, 0, + 0, 0, 0, 0, 0, 1517, 0, 0, 2986, 0, + 0, 0, 0, 2064, 951, 0, 0, 2005, 2987, 0, + 951, 0, 0, 951, 0, 2988, 951, 2006, 0, 0, + 0, 0, 0, 0, 0, 0, 2007, 951, 0, 0, + 0, 0, 0, 0, 951, 0, 0, 2065, 2008, 0, + 0, 2989, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 951, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1517, 0, 0, 0, 0, 0, 0, 0, + 951, 0, 0, 0, 0, 0, 4083, 0, 0, 2010, + 2011, 2067, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 949, 1293, 1293, 0, 891, 1293, 0, 0, 1517, + 1305, 0, 1194, 0, 2068, 1332, 0, 0, 1305, 0, + 4084, 1305, 0, 0, 1194, 0, 1293, 0, 0, 1194, + 0, 0, 0, 1293, 2070, 1194, 0, 0, 0, 0, + 0, 0, 1517, 0, 0, 0, 5515, 0, 0, 0, + 0, 0, 0, 0, 1385, 0, 0, 0, 1526, 0, + 1194, 951, 1293, 0, 1293, 2990, 0, 1293, 0, 0, + 2991, 0, 0, 0, 1332, 0, 0, 0, 0, 1441, + 0, 1293, 0, 0, 0, 0, 0, 1293, 2013, 0, + 0, 0, 2992, 2668, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 951, 951, 951, 0, 2993, 0, 0, + 0, 0, 951, 891, 0, 0, 1529, 0, 0, 0, + 0, 951, 0, 951, 949, 951, 0, 0, 0, 0, + 0, 0, 1526, 1305, 0, 0, 1526, 1332, 0, 0, + 1305, 0, 0, 1305, 0, 0, 2718, 0, 951, 0, + 0, 1517, 0, 0, 0, 0, 0, 0, 0, 1293, + 2994, 0, 1517, 2995, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1517, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 951, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 951, 0, 0, 0, 0, 1194, 0, 0, + 951, 951, 0, 0, 0, 0, 951, 0, 0, 951, + 0, 1517, 0, 0, 1649, 0, 0, 0, 0, 951, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 951, + 0, 2996, 1517, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1762, 1762, 0, 1517, 0, 0, 1194, 1526, + 0, 0, 0, 0, 0, 0, 0, 1517, 0, 0, + 0, 0, 0, 0, 1526, 0, 0, 1194, 0, 1526, + 0, 1194, 0, 0, 0, 0, 0, 951, 0, 1762, + 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, + 1194, 0, 0, 0, 0, 0, 0, 1517, 1517, 0, + 951, 0, 1194, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 951, 0, 0, 0, 0, + 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2906, 0, 951, 0, 0, 0, 0, 951, 2907, + 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 951, + 0, 0, 0, 0, 0, 0, 0, 1194, 0, 0, + 951, 0, 0, 0, 951, 0, 0, 0, 1194, 0, + 0, 0, 0, 1293, 1293, 0, 951, 0, 2480, 0, + 0, 2481, 0, 891, 0, 2482, 2483, 2484, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2986, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2987, 951, 951, 0, 0, 951, 0, 2988, + 0, 891, 0, 0, 0, 1517, 0, 951, 951, 1762, + 1762, 0, 891, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 949, 0, 1293, 2989, 0, 0, 1305, 0, + 0, 1332, 1305, 0, 1305, 0, 0, 0, 0, 1293, + 2480, 0, 0, 2481, 0, 0, 0, 2482, 2483, 2484, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1194, 0, 2986, 0, 0, 0, 1293, 1293, + 1526, 0, 0, 1526, 2987, 1526, 0, 0, 0, 0, + 1526, 2988, 0, 0, 0, 0, 0, 0, 0, 1194, + 1194, 1194, 0, 1293, 0, 949, 0, 949, 949, 0, + 0, 0, 0, 0, 2252, 0, 0, 2989, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5521, 0, 0, 2480, 0, 0, 2481, 0, 1526, 0, + 2482, 2483, 2484, 0, 0, 0, 1526, 0, 0, 2990, + 0, 0, 0, 0, 2991, 0, 0, 2986, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2987, 0, 0, + 0, 1526, 0, 0, 2988, 0, 2992, 2668, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1293, 0, 1293, + 1293, 2993, 0, 0, 0, 0, 0, 0, 0, 0, + 2989, 0, 0, 0, 0, 0, 0, 5522, 0, 0, + 0, 2480, 0, 0, 2481, 0, 0, 0, 2482, 2483, + 2484, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2718, 2990, 0, 1762, 0, 2986, 2991, 0, 0, 0, + 1526, 0, 1526, 0, 2994, 2987, 0, 2995, 0, 0, + 0, 0, 2988, 0, 0, 0, 0, 0, 2992, 2668, + 0, 0, 0, 0, 0, 0, 0, 2386, 2386, 5523, + 0, 0, 1194, 2993, 1115, 0, 0, 0, 2989, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1194, 0, 0, 0, 0, 0, 2423, + 0, 0, 1194, 0, 0, 2429, 0, 0, 0, 0, + 0, 0, 2718, 0, 2990, 0, 0, 0, 1762, 2991, + 0, 0, 0, 0, 0, 0, 2994, 0, 0, 2995, + 0, 0, 0, 1526, 0, 2996, 0, 0, 0, 0, + 0, 2992, 2668, 0, 0, 0, 0, 0, 1762, 0, + 0, 0, 0, 0, 0, 0, 2993, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6044, 0, + 0, 0, 0, 0, 0, 1526, 1762, 1762, 1762, 0, + 1762, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2990, 0, 0, 2718, 0, 2991, 0, 0, + 1762, 0, 0, 1526, 0, 0, 0, 0, 0, 2994, + 0, 0, 2995, 0, 0, 0, 0, 2996, 0, 2992, + 2668, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2993, 2906, 0, 0, 0, 0, + 0, 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, + 2914, 2915, 1194, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2718, 1526, 0, 0, 0, 1762, 0, + 0, 0, 1762, 1762, 0, 0, 0, 2994, 0, 0, + 2995, 0, 0, 1194, 1194, 3044, 1526, 1762, 0, 0, + 2996, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2906, 0, 0, + 1526, 0, 0, 0, 0, 2907, 2908, 2909, 2910, 2911, + 2912, 2913, 2914, 2915, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2996, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2906, 0, 0, 0, 0, 0, 0, 0, 2907, 2908, + 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, 3186, + 0, 1526, 0, 0, 0, 0, 0, 1293, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1517, 0, + 1194, 3214, 1517, 1517, 1526, 0, 0, 0, 0, 1194, + 0, 0, 1293, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1526, + 0, 0, 0, 0, 0, 1332, 0, 1194, 2906, 0, + 0, 0, 0, 0, 0, 0, 2907, 2908, 2909, 2910, + 2911, 2912, 2913, 2914, 2915, 0, 0, 0, 0, 0, + 1194, 1517, 0, 1194, 0, 0, 0, 1517, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1293, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1194, 0, 0, 0, 0, 0, 1517, 0, + 0, 0, 0, 0, 1293, 1293, 1293, 1293, 1194, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1194, 2480, 0, 0, 2481, 0, 0, 0, + 2482, 2483, 2484, 0, 1762, 1762, 1762, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2986, 0, 0, + 1194, 0, 0, 0, 0, 0, 0, 2987, 0, 0, + 0, 1194, 0, 0, 2988, 0, 0, 0, 0, 1293, + 1293, 0, 1526, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1293, 0, 0, 0, 0, + 2989, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1194, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1293, + 1293, 1293, 1293, 0, 0, 0, 0, 0, 1194, 0, + 0, 0, 0, 0, 0, 1194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, + 0, 949, 1526, 0, 0, 0, 0, 0, 0, 0, + 0, 1762, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1526, 0, 0, + 0, 0, 0, 0, 0, 0, 1517, 0, 0, 0, + 0, 0, 1305, 1305, 2990, 0, 0, 0, 0, 2991, + 0, 0, 0, 1332, 1332, 0, 0, 1305, 0, 0, + 1305, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2992, 2668, 0, 0, 1293, 1293, 0, 0, 0, + 0, 0, 1293, 0, 0, 0, 2993, 0, 0, 0, + 0, 0, 0, 1194, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1517, 0, 0, 0, 1517, 0, 0, 0, 0, 2386, + 0, 0, 0, 0, 0, 2718, 1293, 0, 1305, 0, + 0, 1305, 1305, 0, 1194, 1194, 0, 1293, 0, 2994, + 0, 0, 2995, 0, 1194, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1194, 0, 0, 0, 0, 965, + 1115, 1115, 1526, 0, 3635, 0, 0, 0, 1762, 1762, + 0, 0, 0, 0, 1762, 1762, 0, 966, 0, 0, + 0, 1762, 1762, 1762, 0, 0, 1762, 0, 1762, 1332, + 1762, 1762, 1762, 1762, 1762, 1762, 0, 1762, 0, 1762, + 1762, 0, 967, 1762, 0, 0, 0, 0, 0, 0, + 1526, 0, 0, 1526, 0, 968, 0, 0, 1762, 1762, + 1762, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2996, -867, 0, 0, 0, 1762, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1517, 0, 969, + 0, 0, 0, 0, 0, 970, 0, 0, 0, 0, + 0, 0, 1517, 0, 0, 0, 0, 1517, 0, 0, + 0, 0, 0, 971, 0, 1293, 0, 0, 0, 0, + 0, 0, 0, 0, 972, 0, 0, 0, 0, 0, + 0, 0, 0, 973, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 974, 0, 0, 0, + 0, 0, 0, 0, 975, 0, 0, 0, 976, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2906, 0, 0, 0, 0, 0, 0, -1069, 2907, 2908, + 2909, 2910, 2911, 2912, 2913, 2914, 2915, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1526, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 977, 0, 0, 0, 1762, 0, + 0, 0, 0, -603, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 905, 0, 0, 0, 1762, 0, + 0, 0, 0, 978, 0, 0, 979, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 980, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 981, 0, 0, 0, 0, 906, 0, -466, 0, 1762, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 907, 0, 0, 0, 0, 0, 982, 0, 0, + 0, 0, 0, 1526, 0, 0, 983, 0, 0, 908, + 0, 0, 0, -466, 0, 909, 984, 0, 1517, 0, + 0, 1517, 0, 1517, 0, 0, 0, 0, 1517, 0, + 0, 0, 0, 910, 0, 985, 0, 0, 0, 0, + 0, 1526, 986, 0, 911, 0, 0, 0, -466, 0, + 0, 987, 988, 912, 989, 990, 0, 0, 0, 0, + 0, 0, 0, 1526, 0, 0, 913, 0, 0, 0, + 991, 914, 0, 0, 0, 0, 1517, 992, 915, 0, + 993, 0, 0, 994, 1517, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -466, 916, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1517, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 917, 0, 0, 0, 0, 0, 0, 0, + 1526, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 918, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1762, 1762, 1762, 1762, 1762, 1762, 1762, + 1762, 1762, 0, 1762, 0, 0, 0, 0, 0, 0, + 0, 0, 1194, 1762, 0, 0, 1762, 0, 1517, 0, + 1517, 0, 0, 919, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, + 0, 0, 0, 0, 0, 0, 920, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 921, 922, 0, 0, + 923, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1194, 0, 1762, 0, 0, 1293, 1762, 0, 0, 1762, + 0, 1762, 0, 0, 1762, 0, 0, 924, 1194, 1194, + 925, 0, 1526, 0, 926, 0, 927, 0, 0, 1762, + 0, 0, 0, 928, 0, 0, 929, 0, 1762, 1762, + 0, 1517, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1194, 0, 0, 930, 0, 0, 0, 3850, + 0, 3855, 931, 0, 0, 0, 0, 932, 933, 0, + 0, 934, 0, 0, 0, 935, 0, 0, 0, 0, + 0, 0, 0, 1517, 0, 936, 0, 0, 0, 0, + 937, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 938, 0, 0, 0, 0, 0, 0, + 0, 1517, 0, 0, 0, 0, 939, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1115, 0, 1115, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1762, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 949, 1517, 0, 1305, 1332, 1305, 1305, 0, 0, + 1293, 0, 0, 1194, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1517, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3214, 0, 0, 1517, 0, + 1526, 0, 0, 3987, 1194, 0, 0, 0, 0, 0, + 3998, 0, 0, 0, 0, 0, 0, 0, 0, 1194, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1194, 1194, + 0, 0, 1194, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1293, 0, + 0, 1293, 0, 0, 0, 0, 0, 0, 0, 1517, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1194, 1194, 0, 0, + 1526, 0, 1517, 0, 0, 0, 0, 0, 0, 0, + 0, 4137, 0, 4140, 4142, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1517, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1762, 1762, 1762, 0, 0, 0, + 1762, 0, 0, 0, 0, 0, 0, 0, 1293, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1293, 1526, 0, 0, 0, 0, 1762, 0, 1293, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3214, 0, 0, 0, 0, 1194, 0, 0, + 1194, 0, 0, 0, 4243, 0, 0, 1115, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1526, 1293, + 4256, 0, 0, 1526, 1526, 0, 0, 0, 0, 0, + 4137, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1293, 0, 4278, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2252, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1762, 0, + 1517, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4342, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1293, 0, 1293, 0, 1293, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1526, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2386, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1517, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1517, 0, 0, 0, 0, + 0, 0, 949, 1293, 0, 1305, 0, 1305, 1305, 0, + 1293, 0, 0, 0, 0, 0, 0, 1762, 0, 0, + 0, 0, 1762, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1762, 1762, + 1762, 0, 0, 1762, 0, 0, 0, 0, 0, 0, + 0, 1762, 1762, 1762, 1762, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1762, 0, 0, 1762, 0, 1762, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1762, 1762, 0, 0, 1762, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1332, 0, 1762, 0, 1762, 0, 1762, 0, 1519, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1517, 0, 0, 0, 0, 0, 0, 1762, 0, 0, + 0, 1194, 0, 0, 0, 1519, 0, 0, 4546, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1526, 0, 0, 0, 0, 0, 0, 0, + 0, 1194, 0, 0, 0, 0, 0, 0, 1517, 1762, + 0, 1517, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1762, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4546, 0, + 0, 0, 4602, 0, 0, 4605, 0, 3855, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 80, 0, 0, 0, 0, 83, 0, 0, 0, + 87, 0, 88, 0, 90, 91, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 112, 113, 0, 0, 0, 0, 0, 0, 0, + 0, 1762, 0, 0, 0, 0, 0, 0, 2386, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1293, 1293, 0, 0, 0, 0, 0, 121, 0, + 0, 0, 0, 0, 0, 0, 0, 1517, 122, 0, + 123, 124, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1228, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 135, 0, 136, 137, 0, 0, 0, 0, 0, 140, + 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 147, 0, 148, 0, 0, 151, 0, 0, 1194, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 152, 0, 153, 0, 0, 0, 154, 0, 0, 0, + 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, + 157, 0, 159, 0, 0, 0, 0, 0, 0, 161, + 0, 1517, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 165, 1519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1519, 0, + 0, 0, 0, 169, 0, 0, 0, 0, 0, 1517, + 0, 0, 0, 1519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1517, 0, 0, 0, 0, 0, 0, 0, 0, + 1762, 0, 0, 180, 181, 0, 1762, 0, 0, 182, + 0, 0, 0, 0, 0, 0, 0, 1293, 0, 0, + 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1194, 1194, 1194, 0, 1517, 0, + 0, 0, 0, 0, 1519, 0, 0, 0, 0, 0, + 0, 1194, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 199, 0, 0, 0, 1762, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, + 0, 0, 202, 203, 0, 204, 2386, 1194, 1194, 0, + 205, 0, 1194, 0, 0, 0, 206, 0, 0, 208, + 0, 0, 0, 0, 1194, 0, 210, 0, 0, 0, + 0, 0, 211, 212, 0, 0, 0, 0, 0, 0, + 213, 0, 0, 0, 215, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, + 0, 0, 0, 0, 0, 0, 4342, 0, 0, 0, + 1517, 0, 0, 1520, 0, 0, 0, 0, 0, 226, + 0, 227, 0, 0, 0, 0, 0, 1519, 0, 1293, + 229, 0, 0, 0, 0, 0, 230, 0, 0, 1520, + 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1194, 234, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1194, 0, 0, 1194, + 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1762, 0, + 0, 0, 0, 0, 0, 247, 0, 1762, 0, -148, + 0, 0, 0, 0, 0, 1762, 0, 1762, 0, 0, + 1762, 0, 0, 0, 0, 1762, 1762, 1762, 1762, 0, + 0, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, + 1762, 0, 0, 0, 1762, 1762, 1762, 0, 0, 0, + 0, 0, 0, 0, 1762, 0, 0, 0, 1762, 0, + 0, 0, 1762, 0, 0, 0, 0, 0, 0, 0, + 1762, 0, 0, 1762, 0, 1762, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1762, 0, 0, 1762, 1762, + 0, 0, 0, 1762, 1762, 947, 0, 0, 5097, 0, + 1762, 0, 0, 0, 0, 0, 0, 1194, 1194, 1194, + 949, 0, 0, 4546, 5119, 0, 0, 0, 5119, 5133, + 5119, 0, 0, 1762, 0, 0, 0, 0, 1517, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1151, 0, 0, + 1762, 0, 0, 0, 0, 1151, 0, 1151, 0, 0, + 0, 0, 0, 0, 3855, 0, 1762, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5194, 2386, 2386, 1519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1517, 0, + 0, 0, 0, 0, 3214, 5226, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5247, 0, 0, 0, 0, 0, 0, + 0, 1520, 0, 0, 1519, 0, 0, 0, 0, 0, + 0, 0, 1520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1520, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1517, 1519, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1519, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1517, 0, 0, 0, + 0, 1517, 1517, 5335, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1520, 0, + 0, 0, 0, 0, 0, 0, 1293, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1293, 0, 1762, 0, 0, 0, 0, 0, 0, 1194, + 0, 0, 0, 0, 0, 5379, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3214, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1194, 0, 0, 1519, 0, 4546, 4256, 0, 0, 0, + 0, 0, 0, 4137, 1519, 0, 0, 0, 0, 0, + 0, 0, 5429, 1517, 0, 0, 0, 0, 0, 0, + 1519, 0, 1194, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1762, 1762, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1762, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2386, 1194, 0, 0, + 0, 1520, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1519, 4342, 4342, 4342, 4342, 4342, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, + 0, 0, 0, 0, 1519, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1519, + 0, 0, 0, 0, 0, 0, 1762, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1762, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1519, + 1519, 0, 0, 0, 0, 1762, 0, 0, 1762, 0, + 0, 0, 0, 0, 0, 0, 1762, 1762, 0, 0, + 0, 0, 0, 1762, 1762, 0, 0, 0, 1762, 0, + 0, 0, 1762, 0, 0, 1762, 1762, 0, 0, 0, + 1762, 5555, 0, 0, 0, 0, 1762, 1194, 1194, 1194, + 1194, 0, 0, 0, 5119, 5133, 5119, 0, 1762, 5119, + 0, 0, 5569, 0, 0, 0, 4546, 0, 0, 0, + 4546, 0, 0, 0, 0, 0, 5584, 0, 0, 0, + 1517, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1332, 0, 0, 0, 0, 0, + 0, 0, 0, 1762, 0, 0, 0, 4602, 0, 0, + 0, 0, 3855, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1115, 0, 0, 1762, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3214, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1520, 0, 0, 0, 5660, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1762, 947, 0, 0, + 0, 0, 0, 0, 0, 0, 947, 0, 1520, 0, + 0, 0, 0, 0, 947, 0, 0, 947, 0, 0, + 1293, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1293, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1520, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1762, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1520, 0, + 0, 0, 949, 0, 0, 0, 0, 0, 0, 3214, + 0, 0, 0, 0, 0, 0, 0, 0, 2386, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4256, 0, 0, 0, 0, 0, 0, + 947, 0, 0, 0, 0, 1527, 1293, 0, 4278, 947, + 0, 0, 0, 0, 0, 0, 947, 0, 0, 947, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1527, 0, 0, 0, 1194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1194, 0, 0, 0, + 0, 0, 5801, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1520, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1520, 0, 0, 0, 0, 0, + 0, 1762, 0, 0, 1762, 0, 0, 1762, 1762, 1762, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1762, 1762, 0, 0, 1762, 0, 947, 947, + 0, 0, 0, 0, 0, 1151, 0, 1520, 0, 1151, + 0, 949, 0, 0, 5119, 0, 0, 0, 4546, 0, + 0, 0, 0, 4546, 0, 0, 4546, 949, 1520, 4137, + 0, 5856, 0, 0, 1762, 947, 0, 0, 0, 0, + 0, 1520, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1520, 0, 5194, 0, 1762, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5194, + 1332, 1293, 0, 1293, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1520, 1520, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1305, 1332, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1305, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5379, 0, + 0, 1151, 1151, 1194, 0, 0, 0, 0, 1194, 0, + 0, 0, 0, 0, 0, 0, 0, 3214, 0, 0, + 0, 0, 0, 0, 0, 947, 947, 1194, 0, 0, + 0, 5429, 0, 0, 5999, 0, 0, 0, 947, 0, + 0, 0, 0, 1527, 947, 1293, 1194, 5194, 947, 0, + 947, 0, 0, 0, 1527, 0, 0, 0, 0, 0, + 0, 1520, 0, 0, 0, 0, 0, 0, 0, 1527, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1762, 0, 0, 0, 1762, 0, 1762, 0, + 1519, 0, 0, 0, 1519, 1519, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1762, 0, 0, 0, + 0, 947, 1762, 947, 947, 0, 4546, 0, 0, 0, + 5856, 0, 0, 1762, 0, 6084, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1194, 1519, 2386, 0, 0, 0, 0, 1519, + 1527, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1762, 0, + 0, 0, 0, 1762, 1762, 0, 0, 0, 1293, 1293, + 1293, 1293, 0, 0, 0, 0, 0, 0, 0, 0, + 1519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1762, + 0, 0, 0, 0, 0, 0, 949, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1194, 0, 0, 4546, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1194, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1527, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1762, 0, 0, 0, 0, 0, 1762, 0, 0, 949, + 0, 0, 1762, 0, 947, 0, 6246, 0, 0, 0, + 0, 0, 0, 1762, 0, 0, 0, 0, 0, 0, + 1762, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2386, 947, 0, 0, 0, 5194, 0, + 0, 0, 0, 0, 0, 0, 1332, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1762, 0, 0, 0, + 0, 0, 947, 947, 947, 0, 947, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1519, 0, + 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, + 0, 2386, 2386, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1293, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6336, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1519, 0, 0, 0, 1519, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 0, 947, 947, + 0, 5801, 0, 0, 0, 0, 0, 0, 0, 1762, + 1762, 1762, 0, 947, 0, 4137, 0, 0, 1762, 0, + 0, 0, 0, 0, 0, 0, 0, 1762, 0, 1762, + 0, 1762, 6084, 0, 0, 0, 0, 0, 0, 0, + 3855, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1305, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1293, + 0, 0, 0, 0, 0, 0, 2386, 0, 0, 0, + 0, 0, 0, 1527, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1151, + 0, 3214, 0, 0, 0, 0, 0, 0, 1762, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5194, 1519, + 0, 0, 0, 0, 0, 0, 1305, 1305, 6448, 0, + 0, 0, 1762, 0, 1519, 1762, 0, 0, 0, 1519, + 1151, 0, 0, 0, 0, 1762, 0, 0, 0, 6246, + 1527, 0, 0, 0, 0, 1762, 0, 0, 0, 0, + 2386, 2386, 6480, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1293, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1527, 0, 0, + 0, 0, 0, 0, 1520, 0, 1151, 0, 1520, 1520, + 0, 0, 0, 6336, 1293, 1293, 0, 0, 0, 5194, + 0, 0, 0, 1151, 0, 0, 0, 0, 0, 0, + 1527, 0, 0, 0, 0, 0, 949, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1762, 0, 0, 0, 0, 1762, 6529, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1520, 0, 1762, + 0, 0, 0, 1520, 1762, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1762, 0, 0, 0, 0, + 947, 947, 947, 0, 1520, 0, 1762, 0, 6559, 6560, + 949, 6563, 0, 0, 0, 0, 0, 0, 0, 1293, + 0, 0, 5194, 0, 0, 0, 0, 0, 0, 1527, + 0, 0, 0, 6246, 0, 0, 0, 0, 0, 0, + 1527, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1527, 0, 0, 1762, + 949, 0, 0, 949, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1305, 1305, 0, 0, 6606, 0, 0, + 1519, 0, 0, 1519, 0, 1519, 0, 0, 0, 0, + 1519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1527, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 947, 0, 0, + 1527, 0, 0, 0, 0, 0, 0, 947, 1519, 0, + 0, 0, 0, 1527, 0, 0, 1519, 0, 0, 0, + 0, 0, 0, 0, 0, 1527, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 947, 947, + 0, 1519, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 947, 0, 0, 947, 0, 0, 0, + 0, 0, 0, 0, 0, 1527, 1527, 0, 0, 0, + 0, 0, 1520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1519, 0, 1519, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 947, 947, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1520, 0, 0, 0, + 1520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 947, 0, 0, 0, 0, + 947, 947, 0, 0, 0, 0, 0, 947, 947, 947, + 0, 0, 947, 0, 947, 0, 947, 947, 947, 947, + 947, 947, 0, 947, 0, 947, 947, 0, 0, 947, + 0, 0, 0, 1519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1527, 947, 947, 947, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 947, 0, 0, 0, 0, 0, 0, 81, 82, + 0, 84, 85, 86, 0, 1519, 0, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 0, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 1519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1520, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1520, 0, + 0, 35, 0, 1520, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1519, 0, 0, 0, 0, 126, + 0, 0, 0, 128, 129, 130, 131, 132, 0, 0, + 0, 0, 0, 0, 0, 0, 1519, 0, 0, 0, + 0, 134, 0, 0, 947, 0, 0, 0, 138, 0, + 139, 0, 0, 0, 0, 0, 0, 0, 142, 0, + 1519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 145, 0, 0, 0, 0, 0, 0, 146, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 149, 150, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, + 160, 0, 0, 0, 0, 947, 0, 162, 0, 0, + 0, 0, 0, 163, 0, 164, 0, 0, 0, 0, + 0, 0, 166, 0, 167, 0, 0, 0, 0, 0, + 0, 1519, 0, 168, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 170, 171, + 0, 0, 0, 0, 1519, 172, 0, 173, 0, 0, + 174, 175, 0, 176, 0, 0, 0, 0, 0, 0, + 0, 0, 177, 178, 0, 179, 0, 0, 0, 1519, + 0, 0, 0, 0, 1520, 0, 0, 1520, 0, 1520, + 0, 0, 0, 0, 1520, 0, 0, 0, 184, 185, + 186, 0, 0, 0, 0, 0, 0, 0, 187, 188, + 0, 0, 0, 0, 190, 0, 0, 191, 0, 192, + 0, 0, 0, 0, 0, 0, 0, 1522, 0, 0, + 0, 0, 0, 0, 0, 193, 194, 0, 195, 196, + 0, 0, 1520, 0, 0, 0, 0, 0, 0, 0, + 1520, 0, 197, 1522, 198, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, + 0, 0, 0, 0, 0, 1520, 0, 0, 0, 947, + 947, 947, 947, 947, 947, 947, 947, 947, 0, 947, + 0, 207, 0, 0, 0, 0, 0, 209, 0, 947, + 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 214, 0, 0, 216, + 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1519, 0, 0, 0, 0, 0, 219, 0, + 0, 0, 0, 0, 1520, 221, 1520, 0, 0, 0, + 0, 0, 0, 222, 223, 0, 0, 0, 947, 224, + 0, 225, 947, 0, 0, 947, 0, 947, 0, 0, + 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 947, 232, 0, 0, 233, + 0, 0, 0, 0, 947, 947, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 0, 0, 0, 0, + 0, 0, 1519, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1520, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1527, 0, 0, 1520, + 1527, 1527, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1520, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 947, 0, 1527, + 947, 0, 947, 947, 0, 1527, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1151, 0, 0, 0, 0, 0, 0, 0, 1520, 0, + 0, 0, 1519, 0, 0, 1522, 1527, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1522, 0, 0, 0, + 1520, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1522, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1520, 0, 0, 0, 0, 0, + 1519, 0, 0, 1519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1151, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1522, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1520, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1520, 0, + 947, 947, 947, 0, 0, 0, 947, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1520, 0, 0, 0, 0, 0, 1519, + 0, 0, 0, 947, 1527, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, + 0, 0, 0, 0, 0, 1522, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1527, 0, + 0, 0, 1527, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1519, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1527, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, + 1527, 947, 0, 947, 947, 1527, 1520, 0, 0, 0, + 0, 0, 0, 947, 0, 0, 0, 0, 947, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1519, 1520, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 947, 947, 0, 0, 947, + 0, 0, 0, 0, 0, 0, 0, 947, 947, 947, + 947, 0, 0, 0, 0, 1523, 0, 0, 0, 0, + 947, 0, 0, 947, 0, 947, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 947, 947, 0, 0, + 947, 1523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1522, 0, 0, 0, 947, + 0, 947, 0, 947, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, + 0, 0, 1519, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1520, 0, 0, 0, + 0, 0, 1522, 0, 0, 947, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 0, 0, 1522, + 0, 0, 0, 0, 1520, 0, 0, 1520, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 952, 0, 0, + 0, 0, 1522, 0, 0, 0, 1527, 0, 0, 1527, + 0, 1527, 0, 0, 0, 0, 1527, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1527, 0, 0, 0, 0, 0, + 0, 0, 1527, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1527, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1522, 0, 0, 0, 0, 0, 0, 0, 0, + 1519, 0, 1522, 1520, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1522, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1527, 0, 1527, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1523, 0, 0, 0, 0, 0, 0, + 0, 1522, 0, 0, 1523, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1523, + 0, 0, 1522, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1522, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1522, 0, 0, + 1519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1520, 0, 1527, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1522, 1522, 0, + 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, + 0, 0, 947, 0, 0, 1520, 0, 0, 0, 0, + 1523, 1527, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1519, 0, 0, 0, 0, 1520, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1527, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1519, 0, + 0, 0, 0, 1519, 1519, 0, 0, 0, 0, 0, + 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1520, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1527, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1527, 0, 0, 1522, 0, 0, 0, 0, + 0, 0, 0, 1523, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1527, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1519, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 1527, 0, 0, + 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, + 0, 947, 0, 947, 0, 0, 947, 0, 0, 0, + 1527, 947, 947, 947, 947, 0, 0, 947, 947, 947, + 947, 947, 947, 947, 947, 947, 947, 0, 0, 0, + 947, 947, 947, 0, 0, 1527, 0, 0, 0, 0, + 947, 0, 0, 0, 947, 0, 0, 0, 947, 0, + 0, 0, 0, 0, 0, 0, 947, 0, 0, 947, + 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 947, 0, 0, 947, 947, 0, 0, 0, 947, + 947, 0, 0, 0, 0, 0, 947, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 947, 0, 0, 947, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1519, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1523, 1520, 0, 947, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1527, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 947, 0, 0, 0, 0, 0, 0, 0, 0, 952, + 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, + 1523, 0, 0, 0, 0, 0, 952, 0, 0, 952, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1523, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1520, 0, 0, 0, 1527, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1523, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1527, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 952, 0, 0, 0, 0, 1530, 0, 0, + 0, 952, 0, 0, 0, 0, 1520, 0, 952, 0, + 0, 952, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1530, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1520, 0, 0, 0, 0, 1520, 1520, 1523, + 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, + 1523, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1527, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 947, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 952, 952, 0, 0, 0, 0, 0, 0, 0, 1523, + 0, 0, 0, 0, 0, 0, 1527, 0, 1522, 1527, + 947, 947, 1522, 1522, 0, 0, 0, 0, 0, 0, + 1523, 947, 0, 0, 0, 0, 0, 952, 0, 1520, + 0, 0, 0, 1523, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1523, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1522, 0, 0, 0, 0, 0, 1522, 0, 0, + 0, 0, 0, 0, 0, 1523, 1523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 947, 0, 0, 0, 0, 1522, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 947, 0, 0, 947, 0, 0, 0, 0, 0, + 0, 0, 947, 947, 0, 1527, 0, 0, 0, 947, + 947, 0, 0, 0, 947, 0, 0, 0, 947, 0, + 0, 947, 947, 0, 0, 0, 947, 0, 0, 0, + 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 952, 952, 0, + 0, 0, 947, 0, 0, 0, 947, 0, 0, 0, + 952, 0, 0, 0, 0, 1530, 952, 0, 0, 0, + 952, 0, 952, 0, 0, 0, 1530, 0, 0, 0, + 0, 0, 0, 1523, 0, 0, 0, 0, 0, 947, + 0, 1530, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 952, 952, 0, 0, 1527, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1522, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1527, 0, 0, + 0, 0, 1530, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1527, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1522, 0, 0, 0, 1522, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 952, 0, 0, 0, 0, 1527, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, + 0, 0, 0, 0, 0, 1530, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 1522, 0, 0, + 0, 0, 0, 0, 0, 0, 1527, 0, 1527, 0, + 0, 0, 1522, 0, 0, 0, 0, 1522, 0, 0, + 0, 0, 0, 0, 952, 952, 952, 0, 952, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, + 947, 0, 0, 947, 947, 947, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 947, 947, + 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, + 0, 0, 0, 0, 947, 0, 952, 0, 0, 947, + 952, 952, 947, 947, 0, 0, 0, 0, 0, 0, + 947, 0, 0, 0, 0, 952, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 947, 0, 947, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1530, 1527, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1522, 0, + 0, 1522, 0, 1522, 0, 0, 0, 0, 1522, 0, + 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1530, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1522, 0, 0, 1530, + 0, 0, 0, 0, 1522, 0, 1523, 0, 0, 0, + 1523, 1523, 0, 947, 0, 0, 1527, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1522, + 0, 0, 1530, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, + 0, 0, 947, 0, 947, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1523, + 0, 0, 947, 0, 0, 1523, 0, 0, 947, 0, + 0, 0, 947, 0, 0, 0, 0, 0, 1527, 947, + 0, 0, 0, 0, 0, 0, 0, 0, 1522, 0, + 1522, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 952, 952, 952, 0, 1523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1527, 0, 0, 0, 0, 1527, + 1527, 1530, 0, 0, 947, 0, 0, 0, 0, 947, + 947, 0, 1530, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1530, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, + 0, 1522, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 947, 1530, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1522, 0, 0, 952, 0, 0, 952, + 0, 0, 1530, 0, 0, 0, 0, 0, 0, 952, + 1527, 1527, 0, 0, 0, 1530, 0, 0, 0, 0, + 0, 1522, 0, 0, 0, 0, 0, 1530, 0, 0, + 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, + 952, 952, 947, 0, 0, 947, 0, 0, 947, 0, + 0, 0, 0, 0, 0, 952, 0, 0, 952, 947, + 0, 0, 0, 0, 0, 0, 947, 1530, 1530, 0, + 0, 0, 0, 0, 1523, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, + 0, 0, 1522, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1522, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 952, + 952, 0, 0, 0, 0, 0, 0, 0, 1522, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1523, 0, + 0, 0, 1523, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 952, 0, 0, + 0, 0, 952, 952, 0, 0, 0, 0, 0, 952, + 952, 952, 0, 947, 952, 0, 952, 0, 952, 952, + 952, 952, 952, 952, 0, 952, 0, 952, 952, 0, + 0, 952, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1530, 952, 952, 952, 0, + 0, 0, 0, 0, 0, 947, 947, 947, 0, 0, + 0, 0, 0, 952, 947, 0, 0, 0, 1527, 1522, + 0, 0, 0, 947, 0, 947, 0, 947, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1522, 0, 0, 0, 0, 0, 0, 0, + 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1523, 0, 1522, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1523, 0, 0, 0, 0, 1523, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, + 0, 0, 947, 947, 0, 0, 0, 0, 947, 0, + 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 947, 0, 0, 0, 0, 952, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 947, + 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1522, 0, 947, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, + 0, 0, 947, 0, 0, 0, 0, 952, 0, 0, + 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, + 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 947, 0, 0, 0, 947, 0, 0, 0, + 1522, 0, 0, 0, 0, 0, 0, 0, 947, 0, + 0, 0, 0, 0, 0, 0, 1523, 0, 0, 1523, + 0, 1523, 0, 0, 0, 1522, 1523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 947, 947, 0, 0, 947, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, + 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1523, 0, 0, 0, 0, 0, + 0, 0, 1523, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1523, 0, 0, + 0, 952, 952, 952, 952, 952, 952, 952, 952, 952, + 0, 952, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 952, 0, 0, 952, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1522, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1523, 0, 1523, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 952, 0, 0, 0, 952, 0, 0, 952, 0, 952, + 0, 0, 952, 0, 0, 0, 0, 0, 1522, 0, + 0, 1522, 0, 0, 0, 0, 0, 952, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 952, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 0, 0, 1523, + 0, 83, 0, 0, 0, 87, 0, 88, 0, 90, + 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 112, 113, 1530, 0, + 0, 1523, 1530, 1530, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1523, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 121, 0, 0, 0, 1522, 952, 0, + 0, 0, 0, 122, 0, 123, 124, 0, 0, 952, + 0, 1530, 952, 0, 952, 952, 0, 1530, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 135, 0, 136, 137, 0, + 1523, 0, 0, 0, 140, 0, 141, 0, 1530, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, + 144, 0, 1523, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 147, 0, 148, 0, 0, + 151, 0, 0, 0, 0, 0, 1523, 0, 0, 0, + 0, 0, 0, 0, 0, 152, 0, 153, 0, 0, + 0, 154, 0, 0, 0, 0, 0, 6020, 0, 0, + 0, 0, 0, 0, 0, 157, 0, 159, 0, 0, + 0, 1522, 0, 0, 161, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 169, 1522, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1522, 0, 0, 0, 0, 0, 1523, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 180, 181, + 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, + 1523, 0, 952, 952, 952, 0, 183, 0, 952, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 189, 1523, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 952, 1530, 0, 1522, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, + 0, 201, 0, 0, 0, 0, 0, 202, 203, 0, + 204, 0, 0, 0, 0, 205, 0, 0, 4939, 0, + 0, 206, 0, 0, 208, 0, 0, 0, 0, 0, + 1530, 210, 0, 0, 1530, 0, 0, 211, 212, 0, + 0, 0, 0, 0, 0, 213, 0, 0, 0, 215, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 218, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, + 1522, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 226, 0, 227, 0, 1523, 0, + 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1530, 0, 0, + 247, 0, 0, 0, -148, 0, 0, 0, 0, 0, + 952, 0, 1530, 952, 0, 952, 952, 1530, 1523, 0, + 0, 0, 0, 0, 0, 952, 0, 0, 0, 0, + 952, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1523, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 952, 952, 0, + 0, 952, 0, 0, 0, 0, 0, 0, 0, 952, + 952, 952, 952, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 952, 0, 0, 952, 0, 952, 0, 0, + 771, 0, 0, 0, 0, 0, 0, 0, 952, 952, + 0, 0, 952, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1522, 0, + 0, 952, 0, 952, 0, 952, 0, 771, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 952, 0, 0, 0, 1000, + 1010, 0, 0, 1015, 0, 0, 952, 0, 0, 1010, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1523, 0, + 0, 0, 0, 0, 0, 0, 0, 952, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1010, 952, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1523, 0, 0, 1523, + 0, 0, 0, 0, 0, 0, 1207, 0, 1522, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1207, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1530, 0, + 0, 1530, 0, 1530, 0, 0, 0, 0, 1530, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 952, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1522, 0, 0, 0, 0, 0, 1530, 0, 0, 0, + 0, 0, 0, 0, 1530, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1530, + 0, 0, 0, 0, 0, 0, 1522, 0, 0, 0, + 0, 1522, 1522, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1523, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1530, 0, + 1530, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1258, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1522, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1523, + 0, 1530, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, + 0, 0, 0, 0, 952, 0, 0, 1523, 0, 0, + 0, 0, 0, 1530, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1523, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1530, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 952, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1530, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1530, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1000, 1530, 0, + 1522, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1010, 1010, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1523, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1258, 0, 0, 952, 0, 0, 1530, + 0, 0, 0, 0, 0, 952, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 952, 0, 0, 952, 0, + 0, 0, 1530, 952, 952, 952, 952, 0, 0, 952, + 952, 952, 952, 952, 952, 952, 952, 952, 952, 0, + 0, 0, 952, 952, 952, 0, 0, 1530, 0, 0, + 0, 0, 952, 0, 0, 0, 952, 0, 0, 0, + 952, 0, 0, 0, 0, 0, 0, 0, 952, 0, + 0, 952, 0, 952, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 0, 952, 952, 0, 0, + 0, 952, 952, 0, 0, 0, 0, 0, 952, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, + 1295, 952, 0, 0, 1299, 0, 0, 0, 0, 0, + 0, 952, 1334, 0, 0, 1336, 0, 0, 1341, 1342, + 0, 1345, 0, 1348, 0, 0, 1354, 0, 1356, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1384, 0, 0, 0, 0, 0, 1523, 0, 952, 0, + 0, 1420, 0, 0, 0, 1424, 0, 0, 0, 0, + 0, 0, 1436, 1437, 952, 0, 1443, 0, 1446, 1447, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1530, 0, 0, 0, 0, 0, 0, 0, 0, 1258, + 0, 1010, 952, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1490, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1556, 0, 1558, 0, 0, + 0, 0, 0, 0, 0, 0, 1572, 1574, 0, 0, + 0, 0, 0, 0, 0, 0, 1010, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1523, 0, 0, 0, + 1530, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1530, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1523, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1258, 0, 771, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1523, 0, 1207, 0, 0, 1523, + 1523, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 952, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1525, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1530, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 952, 0, 1525, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1909, 0, 0, 1910, 0, 1913, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1530, 0, + 1956, 1530, 952, 952, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 0, 0, 0, 0, 0, + 0, 1523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2169, 0, 0, 952, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 952, 2181, 0, 2182, 0, + 0, 0, 0, 0, 0, 0, 0, 2185, 0, 0, + 0, 0, 0, 0, 2195, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 0, 952, 0, 0, 0, + 0, 0, 0, 0, 952, 952, 0, 1530, 0, 0, + 0, 952, 952, 0, 0, 0, 952, 0, 0, 0, + 952, 0, 0, 952, 952, 2246, 0, 2248, 952, 0, + 0, 0, 0, 0, 952, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, + 0, 0, 0, 0, 952, 0, 0, 0, 952, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 952, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1523, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1530, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1525, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1525, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1530, + 0, 0, 0, 0, 1525, 0, 0, 0, 0, 0, + 0, 0, 2406, 0, 0, 0, 0, 0, 0, 0, + 0, 1530, 0, 0, 0, 0, 0, 0, 0, 0, + 2421, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 952, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1530, 0, + 0, 0, 0, 0, 0, 1525, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 952, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 952, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, + 771, 952, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1207, 1572, 0, 0, 0, 0, 0, 0, 1530, 0, + 1530, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1525, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, + 0, 0, 0, 784, 0, 784, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 784, 0, 0, 771, 0, + 0, 0, 0, 3077, 0, 0, 3077, 0, 0, 952, + 0, 0, 952, 0, 3084, 952, 952, 952, 0, 0, + 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3092, 784, 0, 0, 0, 0, 0, 0, 0, 0, + 952, 952, 784, 784, 952, 0, 784, 0, 0, 0, + 0, 0, 784, 0, 0, 0, 1107, 0, 0, 952, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, + 0, 952, 0, 0, 952, 952, 0, 0, 1107, 0, + 0, 0, 952, 0, 3176, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 952, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 952, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3265, 0, 0, 0, 0, 0, 1530, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 952, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1525, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 952, 0, 0, 1530, 0, + 0, 0, 0, 0, 0, 3387, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 952, 0, 0, 0, 952, 1525, 952, 0, 0, 0, + 3423, 0, 0, 784, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 952, 0, 0, 0, 0, 0, + 952, 0, 0, 0, 952, 0, 0, 0, 0, 0, + 1530, 952, 1525, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3485, 0, 3489, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1525, 0, 0, 0, 0, + 0, 3510, 0, 0, 0, 0, 1530, 0, 0, 0, + 0, 1530, 1530, 0, 0, 0, 952, 0, 0, 0, + 0, 952, 952, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 952, 3548, 0, + 3549, 0, 0, 0, 952, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1572, 3558, 0, 3559, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 952, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1525, 0, 0, 0, 0, 3580, + 0, 0, 0, 0, 0, 1525, 0, 0, 0, 0, + 0, 1572, 1530, 1530, 0, 1572, 0, 0, 0, 1572, + 0, 1525, 1572, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, + 0, 0, 0, 0, 952, 0, 0, 952, 0, 0, + 952, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 952, 0, 0, 0, 0, 0, 0, 952, 0, + 0, 0, 0, 0, 1525, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, + 784, 0, 0, 0, 0, 1525, 0, 0, 0, 0, + 0, 0, 0, 0, 952, 0, 0, 0, 1525, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1525, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, + 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1525, 1525, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 952, 784, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 952, 952, 952, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, + 1530, 0, 0, 0, 0, 952, 0, 952, 0, 952, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 952, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1525, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, + 0, 0, 0, 0, 952, 952, 0, 0, 0, 0, + 952, 0, 0, 952, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1472, 784, 0, 784, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 952, 0, 0, 0, 0, 0, 952, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 952, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 952, + 0, 0, 0, 0, 952, 784, 0, 0, 784, 784, + 0, 0, 0, 0, 0, 0, 0, 952, 0, 0, + 0, 0, 952, 740, 0, 1107, 0, 1107, 0, 0, + 0, 0, 0, 740, 0, 0, 0, 784, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 952, 0, 0, 0, 1107, 1107, 0, + 0, 0, 0, 0, 952, 0, 0, 0, 952, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 952, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3785, 0, 0, 0, 0, + 0, 0, 0, 0, 784, 0, 784, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 952, 952, 0, + 0, 952, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 952, 952, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, + 740, 0, 0, 1891, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1746, 1746, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 740, 1258, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3881, 3882, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3897, + 3898, 0, 0, 0, 3901, 3902, 0, 0, 3904, 3905, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3916, 0, 0, 0, 0, 0, 0, + 3925, 0, 0, 0, 3928, 3929, 740, 0, 3932, 3933, + 0, 0, 0, 0, 0, 3938, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3953, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3970, + 0, 0, 0, 0, 3972, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3978, + 0, 0, 0, 0, 0, 0, 0, 0, 3985, 0, + 0, 3989, 0, 3991, 3994, 3996, 0, 0, 0, 0, + 4004, 4007, 0, 0, 0, 0, 0, 0, 0, 0, + 4020, 0, 0, 0, 0, 4029, 0, 0, 0, 4032, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4042, + 4043, 0, 0, 0, 4048, 0, 0, 0, 0, 0, + 4057, 4058, 0, 0, 0, 0, 0, 4063, 0, 0, + 4065, 2144, 2148, 0, 0, 0, 0, 4077, 4078, 0, + 0, 0, 0, 4082, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4089, 0, 0, 4092, 0, + 0, 1525, 0, 4095, 0, 1525, 1525, 0, 0, 4098, + 4099, 0, 1572, 0, 1572, 0, 0, 4105, 1572, 0, + 4107, 0, 0, 0, 4114, 4115, 4116, 4117, 0, 4119, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4144, 4145, 0, 4147, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4156, 4157, 4158, 0, + 0, 784, 0, 784, 1525, 0, 784, 0, 784, 0, + 1525, 784, 784, 784, 0, 0, 0, 2381, 0, 0, + 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, + 784, 0, 0, 0, 0, 784, 0, 0, 0, 0, + 0, 1525, 0, 4210, 0, 0, 0, 0, 0, 0, + 0, 4234, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4247, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4317, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2935, 4350, 0, 4352, 0, 0, 0, 0, 0, 0, + 0, 0, 784, 784, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, + 0, 0, 0, 0, 740, 740, 0, 0, 0, 0, + 2436, 0, 0, 1258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1572, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2451, 0, 0, 0, 0, 0, 0, 0, 0, 1525, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2469, 2470, + 2471, 0, 2474, 0, 0, 0, 0, 4416, 0, 0, + 0, 784, 0, 740, 0, 0, 0, 0, 0, 0, + 0, 0, 2925, 3081, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1525, 0, 0, 0, 1525, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3009, 740, 0, 0, 3021, 3026, 0, 0, 0, 0, + 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1525, 0, 0, 0, 740, 0, 0, 740, 740, 0, + 0, 0, 0, 0, 0, 1525, 0, 0, 0, 0, + 1525, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1572, 0, 0, 0, 0, 4637, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4649, + 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, + 0, 0, 0, 0, 0, 0, 4656, 0, 0, 0, + 4656, 0, 0, 0, 0, 4667, 4668, 4669, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4699, 4700, 4701, 4702, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4720, 0, + 4724, 4725, 4726, 0, 0, 0, 2144, 2144, 2144, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1525, 0, 0, 1525, 0, 1525, 0, 0, 0, + 0, 1525, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 784, 0, 784, 0, + 0, 0, 784, 0, 784, 0, 0, 784, 0, 1525, + 0, 784, 0, 4802, 0, 0, 2935, 1525, 0, 0, + 0, 0, 4808, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1525, 0, 0, 0, 0, 0, 4818, 4819, + 0, 0, 0, 4820, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4862, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1525, 0, 1525, 0, 0, 0, 0, 0, 1572, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4898, 0, 0, 0, 0, 1010, 0, 0, 0, 0, + 0, 4910, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4949, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1000, 0, 0, 1010, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1525, 0, 3654, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3674, 4979, + 3675, 4980, 3677, 0, 0, 3691, 3694, 3699, 0, 0, + 0, 0, 3705, 0, 0, 3710, 0, 0, 1572, 0, + 0, 0, 0, 0, 0, 0, 1525, 0, 0, 0, + 3717, 3718, 3719, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5004, 0, 0, 0, 3720, 0, 0, + 0, 0, 0, 0, 1525, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1525, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1525, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1525, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3727, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3744, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2917, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1525, 0, 0, 0, 0, 0, 0, 0, + 0, 3746, 0, 0, 5198, 0, 0, 5205, 0, 5206, + 0, 0, 0, 0, 0, 1525, 0, 0, 0, 0, + 0, 0, 5213, 0, 0, 0, 0, 0, 0, 2917, + 0, 0, 0, 0, 5219, 0, 0, 0, 5222, 0, + 1525, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5246, 0, 0, + 0, 2381, 0, 0, 0, 0, 0, 0, 3786, 0, + 0, 0, 0, 0, 0, 5250, 0, 0, 3081, 0, + 5254, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5289, 0, 0, 0, 5293, + 0, 0, 0, 0, 0, 0, 0, 5298, 5299, 5300, + 5301, 0, 0, 0, 0, 0, 0, 5305, 5306, 5307, + 5308, 0, 0, 0, 0, 0, 5310, 5311, 0, 0, + 0, 0, 5318, 5319, 0, 5321, 5322, 5323, 5324, 5325, + 5326, 5327, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5336, 0, 0, 0, 5339, 5340, 5341, 5342, 0, + 0, 0, 0, 0, 0, 3753, 3754, 3755, 3756, 3757, + 3758, 3759, 3760, 3761, 0, 3762, 0, 0, 0, 4656, + 0, 0, 0, 1525, 0, 1746, 0, 0, 2144, 0, + 0, 0, 0, 0, 0, 740, 0, 5362, 0, 740, + 0, 0, 0, 0, 0, 3870, 0, 1891, 0, 0, + 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3720, 0, 0, 0, 3727, 0, + 0, 3744, 0, 3746, 0, 0, 3806, 0, 740, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5444, 1525, 0, 0, 0, 0, 0, 0, + 2470, 2471, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1525, 0, + 0, 0, 0, 0, 0, 4656, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5479, 0, 5480, + 0, 0, 0, 0, 0, 0, 0, 1572, 1572, 1572, + 1572, 1572, 0, 0, 0, 0, 0, 0, 2917, 0, + 5494, 0, 2917, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3930, 0, 0, 0, 0, 0, 0, 0, + 0, 740, 0, 0, 0, 0, 0, 0, 0, 740, + 0, 0, 740, 1525, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1525, 0, 0, 1525, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5640, 5641, 5642, 0, 0, 0, 5643, 5644, 5645, 5646, + 0, 0, 0, 5648, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5667, + 5668, 5669, 5670, 5671, 0, 5673, 5674, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5683, 5684, 0, + 1525, 0, 0, 0, 0, 0, 4168, 4169, 2144, 0, + 2917, 0, 4173, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2917, 5689, 0, 0, 3687, + 0, 0, 0, 0, 1572, 1572, 0, 1572, 0, 4202, + 0, 0, 0, 2917, 2917, 2917, 0, 0, 2917, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 784, 2381, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5753, 0, + 0, 0, 0, 0, 1525, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1525, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1525, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5807, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1525, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4421, + 0, 0, 0, 0, 4427, 0, 3081, 0, 0, 0, + 0, 740, 1572, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1572, 0, 0, + 0, 0, 2474, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3699, 0, 3699, 3699, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4487, 0, 0, 4490, + 0, 4492, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4511, 0, 4514, 0, 4516, + 0, 0, 0, 1525, 0, 0, 0, 0, 5900, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5910, 0, 0, + 0, 0, 5915, 5916, 0, 0, 0, 0, 0, 0, + 0, 0, 5927, 0, 0, 0, 0, 0, 0, 5929, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3009, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3026, 0, 0, 0, + 0, 0, 0, 0, 0, 5980, 5981, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5989, 0, + 1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6006, 0, 0, 0, 2917, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4656, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6042, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4635, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1572, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1572, 0, 0, 0, + 0, 0, 0, 2917, 0, 0, 0, 0, 0, 0, + 0, 1525, 6090, 0, 0, 2917, 0, 0, 0, 0, + 2917, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6107, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6114, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1572, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6173, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, + 0, 1525, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4656, + 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1525, 0, 0, 1572, 0, 0, 0, + 0, 0, 2144, 0, 0, 0, 0, 0, 2144, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1525, + 6274, 0, 0, 0, 1525, 1525, 0, 0, 0, 0, + 0, 0, 0, 0, 6287, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4888, 0, + 0, 0, 0, 0, 0, 0, 0, 6315, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6326, 0, 0, 740, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1525, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6417, 0, 0, 0, 0, 0, 0, 0, + 5021, 0, 0, 0, 0, 0, 0, 0, 0, 5025, + 0, 0, 0, 0, 0, 0, 0, 5027, 0, 5028, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5050, 5051, 5052, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3870, 0, 0, 0, 3705, 0, 0, 0, 0, 0, + 0, 0, 5076, 0, 0, 5079, 0, 5081, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5084, 6493, 0, + 0, 0, 0, 0, 0, 5091, 5092, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1525, 0, 5138, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5156, 0, 0, 0, 0, 0, 2917, 0, + 0, 0, 0, 0, 0, 0, 740, 0, 5169, 0, + 0, 0, 0, 740, 0, 0, 0, 0, 2917, 2917, + 0, 2917, 0, 0, 740, 0, 3687, 3687, 0, 4464, + 0, 3687, 0, 0, 0, 2917, 0, 0, 2917, 0, + 0, 0, 0, 2917, 0, 0, 0, 0, 0, 2917, + 0, 0, 0, 0, 2917, 0, 0, 0, 0, 0, + 0, 2917, 2917, 2917, 2917, 0, 0, 0, 3687, 3687, + 0, 2917, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2917, 0, + 2917, 0, 0, 0, 0, 0, 0, 2917, 2917, 2917, + 2917, 2917, 2917, 2917, 2917, 2917, 2917, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2917, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2917, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5451, 5452, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5459, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3081, + 0, 0, 0, 0, 0, 0, 0, 0, 5511, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5517, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5536, 5538, + 0, 0, 0, 0, 0, 5542, 5543, 0, 0, 0, + 5544, 0, 0, 0, 5545, 0, 0, 5548, 5549, 0, + 0, 0, 5553, 740, 0, 0, 0, 0, 5557, 740, + 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, + 0, 0, 2917, 2917, 0, 0, 0, 2917, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2917, 0, 0, 0, + 0, 0, 0, 0, 0, 1746, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5621, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5686, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5722, 0, + 0, 0, 0, 0, 0, 2917, 0, 0, 0, 0, + 0, 2917, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4464, + 4464, 0, 0, 3687, 3687, 3687, 3687, 0, 0, 3687, + 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687, 4464, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2917, 0, 0, 2917, 0, 2917, 0, 0, 4464, + 4464, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2917, 3687, 3687, 2917, 0, + 2917, 0, 0, 0, 0, 0, 0, 784, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5813, 0, 0, 0, 0, 0, 5817, + 5818, 5819, 0, 0, 0, 0, 0, 0, 0, 740, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5830, 5831, 0, 0, 5832, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2917, + 0, 0, 0, 0, 0, 0, 5858, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5874, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3687, 0, 0, 0, 0, 0, 0, 0, 740, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3705, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2917, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6063, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6081, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, + 6121, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6157, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2917, 0, 0, 0, 2917, + 0, 2917, 2917, 0, 0, 0, 0, 4464, 4464, 4464, + 4464, 0, 0, 0, 4464, 4464, 4464, 4464, 4464, 4464, + 4464, 4464, 4464, 4464, 2917, 2917, 2917, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2917, 0, 0, 2917, 0, 2917, 0, 0, 2917, 0, + 0, 4464, 4464, 0, 0, 2917, 2917, 0, 0, 0, + 0, 0, 6228, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2474, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2917, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2917, 0, 0, 0, 0, 0, 0, 0, 6276, 0, + 0, 0, 0, 2917, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6362, 6362, 6362, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6081, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4464, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6425, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6449, 0, 0, 6362, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6081, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2917, 2917, 0, 0, 0, + 0, 0, 0, 2917, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2917, 0, 0, 0, 0, + 0, 2917, 3687, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2917, 6536, 2917, 0, 0, 0, 2917, 2917, 2917, 2917, + 0, 0, 2917, 2917, 0, 0, 0, 2917, 0, 0, + 0, 2917, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6362, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6558, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2917, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2144, 0, 0, 0, 0, 81, 82, 0, 84, + 85, 86, 0, 0, 0, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 0, 0, 0, + 101, 102, 103, 104, 0, 105, 106, 107, 108, 0, + 109, 110, 111, 0, 0, 0, 0, 0, 114, 115, + 2917, 0, 0, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 117, 0, 118, 0, 119, 0, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2917, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, + 0, 128, 129, 130, 131, 132, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, + 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, + 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, + 0, 0, 0, 0, 0, 146, 0, 2917, 0, 4464, + 3687, 2917, 2917, 2917, 0, 149, 150, 0, 0, 0, + 0, 0, 0, 0, 2917, 2917, 2917, 0, 0, 0, + 0, 0, 0, 0, 3687, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, + 0, 0, 2917, 158, 0, 0, 0, 0, 160, 0, + 0, 0, 0, 0, 0, 162, 0, 0, 2917, 0, + 0, 163, 0, 164, 0, 0, 0, 0, 0, 0, + 166, 0, 167, 0, 0, 0, 0, 0, 0, 0, + 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 170, 171, 0, 0, + 0, 0, 0, 172, 0, 173, 0, 0, 174, 175, + 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, + 177, 178, 0, 179, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 184, 185, 186, 0, + 0, 0, 0, 0, 0, 0, 187, 188, 0, 0, + 0, 0, 190, 0, 0, 191, 0, 192, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 193, 194, 0, 195, 196, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 197, 0, 198, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4464, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, + 3687, 0, 0, 4464, 0, 209, 0, 2917, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 214, 2917, 0, 216, 0, 0, + 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, + 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, + 0, 222, 223, 0, 0, 2917, 0, 224, 0, 225, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, + 0, 2917, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3860, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2917, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4464, 0, 3687, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2917, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2917, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2917, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2917, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3687, + 0, 0, 0, 0, 3687, 0, 0, 0, 0, 793, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 794, 98, + 99, 749, 795, 0, 101, 102, 103, 104, 796, 797, + 106, 107, 108, 0, 109, 798, 799, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 4464, + 0, 0, 4464, 0, 0, 0, 0, 755, 0, 756, + 2917, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2917, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 800, 438, 439, 440, 801, 802, 803, 804, + 805, 806, 807, 441, 442, 443, 808, 444, 445, 446, + 447, 126, 448, 449, 450, 128, 129, 130, 131, 132, + 809, 451, 452, 453, 454, 455, 456, 457, 810, 811, + 458, 459, 812, 134, 460, 813, 461, 462, 463, 464, + 138, 814, 139, 815, 465, 466, 467, 468, 469, 470, + 142, 471, 472, 816, 817, 473, 474, 475, 476, 477, + 478, 818, 145, 479, 480, 819, 820, 821, 822, 146, + 823, 824, 825, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 826, 489, 827, 490, 491, 492, 493, 494, + 495, 496, 828, 497, 498, 499, 500, 829, 830, 501, + 502, 503, 504, 505, 831, 506, 507, 508, 832, 509, + 510, 511, 833, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 834, 520, 835, 521, 522, 523, 162, + 524, 836, 525, 837, 526, 163, 838, 164, 527, 528, + 529, 530, 839, 531, 166, 840, 167, 532, 533, 841, + 534, 535, 765, 536, 537, 168, 538, 539, 540, 541, + 842, 542, 543, 544, 545, 546, 547, 548, 843, 549, + 170, 171, 844, 550, 551, 552, 845, 172, 846, 173, + 847, 553, 174, 175, 554, 176, 555, 556, 557, 558, + 559, 848, 849, 560, 177, 178, 561, 179, 850, 562, + 563, 564, 851, 852, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 185, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 853, 587, 588, 190, 589, 854, 191, + 590, 192, 591, 592, 593, 855, 594, 595, 856, 857, + 596, 597, 598, 858, 859, 599, 600, 193, 194, 601, + 195, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 860, 611, 612, 197, 613, 198, 614, 615, 616, + 861, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 862, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 863, 644, 645, 207, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 864, + 659, 660, 661, 662, 663, 865, 665, 666, 214, 667, + 668, 216, 669, 670, 217, 671, 866, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 867, 686, 687, 868, 688, 221, 689, 690, + 691, 692, 693, 869, 694, 222, 223, 870, 871, 696, + 697, 224, 698, 225, 872, 699, 700, 701, 702, 703, + 704, 705, 706, 873, 874, 707, 708, 709, 710, 711, + 875, 876, 712, 713, 714, 715, 716, 877, 232, 878, + 717, 233, 718, 719, 720, 721, 879, 880, 722, 881, + 882, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 80, 0, 0, 81, 82, 83, 84, 85, 86, + 87, 0, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 100, 0, 1067, 101, 102, + 103, 104, 0, 105, 106, 107, 108, 0, 109, 110, + 111, 112, 113, 0, 0, 0, 114, 115, 0, 0, + 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, + 0, 117, 0, 118, 0, 119, 120, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, + 123, 124, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 125, 0, 0, 126, 0, 0, 127, 128, + 129, 130, 131, 132, 0, 0, 0, 0, 133, 0, + 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, + 135, 0, 136, 137, 138, 0, 139, 0, 0, 140, + 0, 141, 0, 0, 142, 0, 0, 0, 0, 0, + 0, 0, 0, 143, 0, 144, 145, 0, 0, 0, + 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, + 147, 0, 148, 149, 150, 151, 0, 0, 0, 0, + 0, -1668, 0, 0, 0, 0, 0, 0, 0, 0, + 152, 0, 153, 0, 0, 0, 154, 0, 0, 0, + 0, 0, 155, 156, 0, 0, 0, 0, 0, 0, + 157, 158, 159, 0, 0, 0, 160, 0, 0, 161, + 0, 0, 0, 162, 0, 0, 0, 0, 0, 163, + 0, 164, 0, 0, 0, 0, 165, 0, 166, 0, + 167, 0, 0, 0, 0, 0, 0, 0, 0, 168, + 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 170, 171, 0, 0, -1668, 0, + 0, 172, 0, 173, 0, 0, 174, 175, 0, 176, + 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, + 0, 179, 0, 180, 181, 0, 0, 0, 0, 182, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 183, 0, 0, 184, 185, 186, 0, 0, 0, + 0, 0, 0, 0, 187, 188, 0, 0, 0, 189, + 190, 0, 0, 191, 0, 192, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 193, 194, 0, 195, 196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, + 198, 0, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 200, 201, 0, 0, 0, + 0, 0, 202, 203, 0, 204, 0, 0, 0, 0, + 205, 0, 0, 0, 0, 0, 206, 207, 0, 208, + 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, + 0, 0, 211, 212, 0, 0, 0, 0, 0, 0, + 213, 0, 214, 0, 215, 216, 0, 0, 217, 0, + 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 219, 0, 0, 0, 0, 220, + 0, 221, 0, 0, 0, 0, 0, 0, 0, 222, + 223, 0, 0, 0, 0, 224, 0, 225, 0, 226, + 0, 227, 0, 0, 0, 0, 0, 228, 0, 0, + 229, 0, 0, -1668, 0, 0, 230, 0, 0, 0, + 0, 231, 232, 0, 0, 233, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, + 0, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 0, 0, 0, 0, 0, 246, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, + 0, 84, 85, 86, 0, 247, 0, 89, 0, -148, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 0, + 0, 0, 101, 102, 103, 104, 0, 105, 106, 107, + 108, 0, 109, 110, 111, 0, 0, 0, 0, 0, + 114, 115, 0, 0, 0, 0, 116, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 0, 118, 0, 119, + 0, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, + 0, 0, 0, 128, 129, 130, 131, 132, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 134, 0, 0, 0, 0, 0, 0, 138, 0, + 139, 0, 0, 0, 0, 0, 0, 0, 142, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 145, 0, 0, 0, 0, 0, 0, 146, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 149, 150, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, + 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, + 160, 0, 0, 0, 0, 0, 0, 162, 0, 0, + 0, 0, 0, 163, 0, 164, 0, 0, 0, 0, + 0, 0, 166, 0, 167, 0, 0, 0, 0, 0, + 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 170, 171, + 0, 0, 0, 0, 0, 172, 0, 173, 0, 0, + 174, 175, 0, 176, 0, 0, 0, 0, 0, 0, + 0, 0, 177, 178, 0, 179, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 184, 185, + 186, 0, 0, 0, 0, 0, 0, 0, 187, 188, + 0, 0, 0, 0, 190, 0, 0, 191, 0, 192, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 193, 194, 0, 195, 196, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 197, 0, 198, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 207, 0, 0, 0, 0, 0, 209, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 214, 0, 0, 216, + 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, + 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, + 0, 0, 0, 222, 223, 0, 0, 0, 0, 224, + 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 232, 0, 0, 233, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 0, 0, 0, 0, + 0, 0, 793, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 794, 98, 99, 749, 795, 3862, 101, 102, 103, + 104, 796, 797, 106, 107, 108, 0, 109, 798, 799, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 429, 0, 0, + 37, 0, 38, 39, 0, 1664, 1665, 1666, 40, 1667, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 2138, 438, 439, 440, 0, + 0, 0, 0, 1668, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 126, 448, 449, 450, 128, 1669, + 130, 1670, 1671, 0, 451, 452, 453, 454, 455, 456, + 457, 1672, 1673, 458, 459, 1674, 1675, 460, 0, 461, + 462, 463, 464, 1676, 0, 1677, 0, 465, 466, 467, + 468, 469, 470, 142, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 145, 479, 480, 0, 1678, + 1679, 1680, 1681, 1682, 1683, 1684, 483, 484, 485, 486, + 763, 487, 1685, 1686, 488, 1687, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 2139, 0, 501, 502, 1498, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 1688, 516, 517, 518, 519, 1689, 1690, 520, 0, 521, + 522, 523, 1691, 524, 0, 525, 0, 526, 163, 0, + 164, 527, 528, 529, 530, 0, 531, 1692, 0, 1693, + 532, 533, 0, 534, 535, 765, 536, 537, 168, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 170, 171, 0, 550, 551, 552, 1501, + 1694, 0, 1695, 0, 553, 174, 175, 554, 176, 555, + 556, 557, 558, 559, 0, 0, 560, 1696, 178, 561, + 179, 0, 562, 563, 564, 1697, 1698, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 1699, 185, 1700, 579, 580, 581, 582, + 583, 584, 585, 187, 1701, 586, 1702, 587, 588, 190, + 589, 1703, 1704, 590, 1705, 591, 592, 593, 0, 594, + 595, 0, 0, 1706, 597, 598, 0, 0, 599, 600, + 193, 194, 601, 195, 1707, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 1708, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 1709, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 207, 646, 647, 648, + 649, 650, 1710, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 1711, 665, + 666, 214, 667, 668, 216, 669, 670, 1712, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 1713, 685, 0, 686, 687, 0, 688, + 221, 689, 690, 691, 692, 693, 0, 694, 1714, 1715, + 0, 0, 696, 697, 1716, 698, 1717, 1718, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 1719, 707, 708, + 709, 710, 711, 1720, 0, 712, 713, 714, 715, 716, + 769, 1721, 2140, 717, 233, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 1722, 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, + 245, 770, 729, 730, 1730, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1731, 1732, 2141, 0, 0, + 0, 0, 0, 0, 1734, 2142, 793, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 794, 98, 99, 749, 795, + 0, 101, 102, 103, 104, 796, 797, 106, 107, 108, + 0, 109, 798, 799, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 429, 0, 0, 37, 0, 38, 39, 0, 1664, + 1665, 1666, 40, 1667, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 1668, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 126, 448, + 449, 450, 128, 1669, 130, 1670, 1671, 0, 451, 452, + 453, 454, 455, 456, 457, 1672, 1673, 458, 459, 1674, + 1675, 460, 0, 461, 462, 463, 464, 1676, 0, 1677, + 0, 465, 466, 467, 468, 469, 470, 142, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 145, + 479, 480, 0, 1678, 1679, 1680, 1681, 1682, 1683, 1684, + 483, 484, 485, 486, 763, 487, 1685, 1686, 488, 1687, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 1498, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 1688, 516, 517, 518, 519, 1689, + 1690, 520, 0, 521, 522, 523, 1691, 524, 0, 525, + 0, 526, 163, 0, 164, 527, 528, 529, 530, 0, + 531, 1692, 0, 1693, 532, 533, 0, 534, 535, 765, + 536, 537, 168, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 170, 171, 0, + 550, 551, 552, 1501, 1694, 0, 1695, 0, 553, 174, + 175, 554, 176, 555, 556, 557, 558, 559, 0, 0, + 560, 1696, 178, 561, 179, 0, 562, 563, 564, 1697, + 1698, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 1699, 185, 1700, + 579, 580, 581, 582, 583, 584, 585, 187, 1701, 586, + 1702, 587, 588, 190, 589, 1703, 1704, 590, 1705, 591, + 592, 593, 0, 594, 595, 0, 0, 1706, 597, 598, + 0, 0, 599, 600, 193, 194, 601, 195, 1707, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 1708, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 1709, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 207, 646, 647, 648, 649, 650, 1710, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 212, 659, 660, 661, + 662, 663, 1711, 665, 666, 214, 667, 668, 216, 669, + 670, 1712, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 1713, 685, 0, + 686, 687, 220, 688, 221, 689, 690, 691, 692, 693, + 0, 694, 1714, 1715, 0, 0, 696, 697, 1716, 698, + 1717, 1718, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 1719, 707, 708, 709, 710, 711, 1720, 0, 712, + 713, 714, 715, 716, 2472, 1721, 0, 717, 233, 718, + 719, 720, 721, 0, 0, 722, 0, 234, 723, 724, + 725, 726, 727, 728, 235, 1722, 1723, 1724, 1725, 240, + 1726, 1727, 1728, 1729, 245, 770, 729, 730, 1730, 0, + 246, 0, 0, 0, 0, 0, 0, 0, 0, 1731, + 1732, 0, 0, 0, 0, 0, 0, 0, 1734, 6254, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 429, 0, 0, 37, 0, + 38, 39, 0, 1664, 1665, 1666, 40, 1667, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 1668, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 1669, 130, 1670, + 1671, 0, 451, 452, 453, 454, 455, 456, 457, 1672, + 1673, 458, 459, 1674, 1675, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 1685, 1686, 488, 1687, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 1498, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 1688, 516, + 517, 518, 519, 1689, 1690, 520, 0, 521, 522, 523, + 1691, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 1693, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 1501, 1694, 0, + 1695, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 1699, 185, 1700, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 1702, 587, 588, 190, 589, 1703, + 1704, 590, 1705, 591, 592, 593, 0, 594, 595, 0, + 0, 1706, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 1709, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 1710, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 1712, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 1714, 1715, 0, 0, + 696, 697, 1716, 698, 1717, 1718, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 1719, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 1721, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, 770, + 729, 730, 1730, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1731, 1732, 0, 0, 0, 0, 0, + 0, 0, 1734, 3689, 793, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 794, 98, 99, 749, 795, 0, 101, + 102, 103, 104, 796, 797, 106, 107, 108, 0, 109, + 798, 799, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 429, + 0, 0, 37, 0, 38, 39, 0, 1664, 1665, 1666, + 40, 1667, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 1668, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 126, 448, 449, 450, + 128, 1669, 130, 1670, 1671, 0, 451, 452, 453, 454, + 455, 456, 457, 1672, 1673, 458, 459, 1674, 1675, 460, + 0, 461, 462, 463, 464, 1676, 0, 1677, 0, 465, + 466, 467, 468, 469, 470, 142, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 145, 479, 480, + 0, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 483, 484, + 485, 486, 763, 487, 1685, 1686, 488, 1687, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 1498, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 1688, 516, 517, 518, 519, 1689, 1690, 520, + 0, 521, 522, 523, 1691, 524, 0, 525, 0, 526, + 163, 0, 164, 527, 528, 529, 530, 0, 531, 1692, + 0, 1693, 532, 533, 0, 534, 535, 765, 536, 537, + 168, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 170, 171, 0, 550, 551, + 552, 1501, 1694, 0, 1695, 0, 553, 174, 175, 554, + 176, 555, 556, 557, 558, 559, 0, 0, 560, 1696, + 178, 561, 179, 0, 562, 563, 564, 1697, 1698, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 1699, 185, 1700, 579, 580, + 581, 582, 583, 584, 585, 187, 1701, 586, 1702, 587, + 588, 190, 589, 1703, 1704, 590, 1705, 591, 592, 593, + 0, 594, 595, 0, 0, 1706, 597, 598, 0, 0, + 599, 600, 193, 194, 601, 195, 1707, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 1708, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 1709, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 207, 646, + 647, 648, 649, 650, 1710, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 1711, 665, 666, 214, 667, 668, 216, 669, 670, 1712, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 1713, 685, 0, 686, 687, + 0, 688, 221, 689, 690, 691, 692, 693, 0, 694, + 1714, 1715, 0, 0, 696, 697, 1716, 698, 1717, 1718, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 1719, + 707, 708, 709, 710, 711, 1720, 0, 712, 713, 714, + 715, 716, 769, 1721, 0, 717, 233, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 1722, 1723, 1724, 1725, 240, 1726, 1727, + 1728, 1729, 245, 770, 729, 730, 1730, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1731, 1732, 0, + 0, 0, 0, 0, 0, 0, 1734, 5029, 793, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 794, 98, 99, + 749, 795, 0, 101, 102, 103, 104, 796, 797, 106, + 107, 108, 0, 109, 798, 799, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 429, 0, 0, 37, 0, 38, 39, + 0, 1664, 1665, 1666, 40, 1667, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 0, 438, 439, 440, 0, 0, 0, 0, 1668, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 126, 448, 449, 450, 128, 1669, 130, 1670, 1671, 0, + 451, 452, 453, 454, 455, 456, 457, 1672, 1673, 458, + 459, 1674, 1675, 460, 0, 461, 462, 463, 464, 1676, + 0, 1677, 0, 465, 466, 467, 468, 469, 470, 142, + 471, 472, 761, 0, 473, 474, 475, 476, 477, 478, + 0, 145, 479, 480, 0, 1678, 1679, 1680, 1681, 1682, + 1683, 1684, 483, 484, 485, 486, 763, 487, 1685, 1686, + 488, 1687, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 1498, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 1688, 516, 517, 518, + 519, 1689, 1690, 520, 0, 521, 522, 523, 1691, 524, + 0, 525, 0, 526, 163, 0, 164, 527, 528, 529, + 530, 0, 531, 1692, 0, 1693, 532, 533, 0, 534, + 535, 765, 536, 537, 168, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 170, + 171, 0, 550, 551, 552, 1501, 1694, 0, 1695, 0, + 553, 174, 175, 554, 176, 555, 556, 557, 558, 559, + 0, 0, 560, 1696, 178, 561, 179, 0, 562, 563, + 564, 1697, 1698, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 1699, + 185, 1700, 579, 580, 581, 582, 583, 584, 585, 187, + 1701, 586, 1702, 587, 588, 190, 589, 1703, 1704, 590, + 1705, 591, 592, 593, 0, 594, 595, 0, 0, 1706, + 597, 598, 0, 0, 599, 600, 193, 194, 601, 195, + 1707, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 1708, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 1709, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 207, 646, 647, 648, 649, 650, 1710, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 663, 1711, 665, 666, 214, 667, 668, + 216, 669, 670, 1712, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 1713, + 685, 0, 686, 687, 0, 688, 221, 689, 690, 691, + 692, 693, 0, 694, 1714, 1715, 0, 0, 696, 697, + 1716, 698, 1717, 1718, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 1719, 707, 708, 709, 710, 711, 1720, + 0, 712, 713, 714, 715, 716, 769, 1721, 0, 717, + 233, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 1722, 1723, 1724, + 1725, 240, 1726, 1727, 1728, 1729, 245, 770, 729, 730, + 1730, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1731, 1732, 0, 0, 0, 0, 0, 0, 0, + 1734, 5098, 793, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 794, 98, 99, 749, 795, 0, 101, 102, 103, + 104, 796, 797, 106, 107, 108, 0, 109, 798, 799, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 126, 448, 449, 450, 0, 1491, + 130, 1492, 1493, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 1494, 1495, 460, 0, 461, + 462, 463, 464, 0, 0, 139, 0, 465, 466, 467, + 468, 469, 470, 142, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 145, 479, 480, 0, 0, + 0, 0, 146, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 1496, 1497, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 1498, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 0, 516, 517, 518, 519, 0, 0, 520, 0, 521, + 522, 523, 1499, 524, 0, 525, 0, 526, 163, 0, + 164, 527, 528, 529, 530, 0, 531, 0, 0, 0, + 532, 533, 0, 534, 535, 765, 536, 537, 168, 538, + 539, 540, 541, 3100, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 170, 3101, 0, 550, 551, 552, 1501, + 1502, 0, 1503, 0, 553, 174, 175, 554, 176, 555, + 556, 557, 558, 559, 0, 0, 560, 0, 178, 561, + 179, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 1504, 185, 1505, 579, 580, 581, 582, + 583, 584, 585, 0, 0, 586, 0, 587, 588, 190, + 589, 0, 0, 590, 1506, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 3103, 194, 601, 195, 0, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 0, 613, 0, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 1507, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 207, 646, 647, 648, + 649, 650, 0, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 0, 665, + 666, 3104, 667, 668, 216, 669, 670, 1509, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 0, 685, 0, 686, 687, 0, 688, + 221, 689, 690, 691, 692, 693, 0, 694, 1510, 1511, + 0, 0, 696, 697, 0, 698, 0, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 0, 1512, 3105, 717, 233, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 770, 729, 730, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 793, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 3202, 92, 93, 94, 95, + 96, 97, 794, 98, 99, 749, 795, 0, 101, 102, + 103, 104, 796, 797, 106, 107, 108, 0, 109, 798, + 799, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 126, 448, 449, 450, 0, + 1491, 130, 1492, 1493, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 1494, 1495, 460, 0, + 461, 462, 463, 464, 0, 0, 139, 0, 465, 466, + 467, 468, 469, 470, 142, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 145, 479, 480, 0, + 0, 0, 0, 146, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 1496, 1497, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 1498, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 0, 516, 517, 518, 519, 0, 0, 520, 0, + 521, 522, 523, 1499, 524, 0, 525, 0, 526, 163, + 0, 164, 527, 528, 529, 530, 0, 531, 0, 0, + 0, 532, 533, 0, 534, 535, 765, 536, 537, 168, + 538, 539, 540, 541, 3100, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 170, 3101, 0, 550, 551, 552, + 1501, 1502, 0, 1503, 0, 553, 174, 175, 554, 176, + 555, 556, 557, 558, 559, 0, 0, 560, 0, 178, + 561, 179, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 1504, 185, 1505, 579, 580, 581, + 582, 583, 584, 585, 0, 0, 586, 0, 587, 588, + 190, 589, 0, 0, 590, 1506, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 3103, 194, 601, 195, 0, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 0, 613, + 0, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 1507, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 207, 646, 647, + 648, 649, 650, 0, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 3104, 667, 668, 216, 669, 670, 1509, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 0, 685, 0, 686, 687, 0, + 688, 221, 689, 690, 691, 692, 693, 0, 694, 1510, + 1511, 0, 0, 696, 697, 0, 698, 0, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 0, 1512, 3105, 717, 233, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 770, 729, 730, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 793, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 4294, 92, 93, 94, + 95, 96, 97, 794, 98, 99, 749, 795, 0, 101, + 102, 103, 104, 796, 797, 106, 107, 108, 0, 109, + 798, 799, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 429, + 0, 0, 37, 0, 38, 39, 0, 1664, 1665, 1666, + 40, 1667, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 1668, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 126, 448, 449, 450, + 128, 1669, 130, 1670, 1671, 0, 451, 452, 453, 454, + 455, 456, 457, 1672, 1673, 458, 459, 1674, 1675, 460, + 0, 461, 462, 463, 464, 1676, 0, 1677, 0, 465, + 466, 467, 468, 469, 470, 142, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 145, 479, 480, + 0, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 483, 484, + 485, 486, 763, 487, 1685, 1686, 488, 1687, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 1498, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 1688, 516, 517, 518, 519, 1689, 1690, 520, + 0, 521, 522, 523, 1691, 524, 0, 525, 0, 526, + 163, 0, 164, 527, 528, 529, 530, 0, 531, 1692, + 0, 1693, 532, 533, 0, 534, 535, 765, 536, 537, + 168, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 170, 171, 0, 550, 551, + 552, 1501, 1694, 0, 1695, 0, 553, 174, 175, 554, + 176, 555, 556, 557, 558, 559, 0, 0, 560, 1696, + 178, 561, 179, 0, 562, 563, 564, 1697, 1698, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 1699, 185, 1700, 579, 580, + 581, 582, 583, 584, 585, 187, 1701, 586, 1702, 587, + 588, 190, 589, 1703, 1704, 590, 1705, 591, 592, 593, + 0, 594, 595, 0, 0, 1706, 597, 598, 0, 0, + 599, 600, 193, 194, 601, 195, 1707, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 1708, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 1709, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 207, 646, + 647, 648, 649, 650, 1710, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 212, 659, 660, 661, 662, 663, + 1711, 665, 666, 214, 667, 668, 216, 669, 670, 1712, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 1713, 685, 0, 686, 687, + 220, 688, 221, 689, 690, 691, 692, 693, 0, 694, + 1714, 1715, 0, 0, 696, 697, 1716, 698, 1717, 1718, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 1719, + 707, 708, 709, 710, 711, 1720, 0, 712, 713, 714, + 715, 716, 2472, 1721, 0, 717, 233, 718, 719, 720, + 721, 0, 0, 722, 0, 234, 723, 724, 725, 726, + 727, 728, 235, 1722, 1723, 1724, 1725, 240, 1726, 1727, + 1728, 1729, 245, 770, 729, 730, 1730, 0, 246, 0, + 0, 0, 0, 0, 0, 0, 0, 1731, 1732, 0, + 0, 0, 0, 0, 0, 0, 1734, 793, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 794, 98, 99, 749, + 795, 0, 101, 102, 103, 104, 796, 797, 106, 107, + 108, 0, 109, 798, 799, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 429, 0, 0, 37, 0, 38, 39, 0, + 1664, 1665, 1666, 40, 1667, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 1668, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 126, + 448, 449, 450, 128, 1669, 130, 1670, 1671, 3695, 451, + 452, 453, 454, 455, 456, 457, 1672, 1673, 458, 459, + 1674, 1675, 460, 0, 461, 462, 463, 464, 1676, 0, + 1677, 0, 465, 466, 467, 468, 469, 470, 142, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 145, 479, 480, 0, 1678, 1679, 1680, 1681, 1682, 1683, + 1684, 483, 484, 485, 486, 763, 487, 1685, 1686, 488, + 1687, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 1498, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 1688, 516, 517, 518, 519, + 1689, 1690, 520, 0, 521, 522, 523, 1691, 524, 0, + 525, 0, 526, 163, 3696, 164, 527, 528, 529, 530, + 0, 531, 1692, 0, 1693, 532, 533, 0, 534, 535, + 765, 536, 537, 168, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 170, 171, + 0, 550, 551, 552, 1501, 1694, 0, 1695, 0, 553, + 174, 175, 554, 176, 555, 556, 557, 558, 559, 0, + 3697, 560, 1696, 178, 561, 179, 0, 562, 563, 564, + 1697, 1698, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 1699, 185, + 1700, 579, 580, 581, 582, 583, 584, 585, 187, 1701, + 586, 1702, 587, 588, 190, 589, 1703, 1704, 590, 1705, + 591, 592, 593, 0, 594, 595, 0, 0, 1706, 597, + 598, 0, 0, 599, 600, 193, 194, 601, 195, 1707, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 1708, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 1709, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 207, 646, 647, 648, 649, 650, 1710, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 1711, 665, 666, 214, 667, 668, 216, + 669, 670, 1712, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 1713, 685, + 0, 686, 687, 0, 688, 221, 689, 690, 691, 692, + 693, 0, 694, 1714, 1715, 0, 3698, 696, 697, 1716, + 698, 1717, 1718, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 1719, 707, 708, 709, 710, 711, 1720, 0, + 712, 713, 714, 715, 716, 769, 1721, 0, 717, 233, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 1722, 1723, 1724, 1725, + 240, 1726, 1727, 1728, 1729, 245, 770, 729, 730, 1730, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1731, 1732, 0, 0, 0, 0, 0, 0, 0, 1734, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 429, 0, 0, 37, 0, + 38, 39, 0, 1664, 1665, 1666, 40, 1667, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, -2167, 438, 439, 440, 0, 0, 0, + -2167, 1668, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 1669, 130, 1670, + 1671, 0, 451, 452, 453, 454, 455, 456, 457, 1672, + 1673, 458, 459, 1674, 1675, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 1685, 1686, 488, 1687, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 1498, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 1688, 516, + 517, 518, 519, 1689, 1690, 520, 0, 521, 522, 523, + 1691, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 1693, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 1501, 1694, 0, + 1695, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 1699, 185, 1700, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 1702, 587, 588, 190, 589, 1703, + 1704, 590, 1705, 591, 592, 593, 0, 594, 595, 0, + 0, 1706, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 1709, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 1710, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 1712, 671, -2167, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 1714, 1715, 0, 0, + 696, 697, 1716, 698, 1717, 1718, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 1719, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 1721, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, 770, + 729, 730, 1730, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1731, 1732, 0, 0, 0, 0, 0, + 0, 0, 1734, 793, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 794, 98, 99, 749, 795, 0, 101, 102, + 103, 104, 796, 797, 106, 107, 108, 0, 109, 798, + 799, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 429, 0, + 0, 37, 0, 38, 39, 0, 1664, 1665, 1666, 40, + 1667, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, -2165, 438, 439, 440, + 0, 0, 0, -2165, 1668, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 126, 448, 449, 450, 128, + 1669, 130, 1670, 1671, 0, 451, 452, 453, 454, 455, + 456, 457, 1672, 1673, 458, 459, 1674, 1675, 460, 0, + 461, 462, 463, 464, 1676, 0, 1677, 0, 465, 466, + 467, 468, 469, 470, 142, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 145, 479, 480, 0, + 1678, 1679, 1680, 1681, 1682, 1683, 1684, 483, 484, 485, + 486, 763, 487, 1685, 1686, 488, 1687, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 1498, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 1688, 516, 517, 518, 519, 1689, 1690, 520, 0, + 521, 522, 523, 1691, 524, 0, 525, 0, 526, 163, + 0, 164, 527, 528, 529, 530, 0, 531, 1692, 0, + 1693, 532, 533, 0, 534, 535, 765, 536, 537, 168, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 170, 171, 0, 550, 551, 552, + 1501, 1694, 0, 1695, 0, 553, 174, 175, 554, 176, + 555, 556, 557, 558, 559, 0, 0, 560, 1696, 178, + 561, 179, 0, 562, 563, 564, 1697, 1698, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 1699, 185, 1700, 579, 580, 581, + 582, 583, 584, 585, 187, 1701, 586, 1702, 587, 588, + 190, 589, 1703, 1704, 590, 1705, 591, 592, 593, 0, + 594, 595, 0, 0, 1706, 597, 598, 0, 0, 599, + 600, 193, 194, 601, 195, 1707, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 1708, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 1709, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 207, 646, 647, + 648, 649, 650, 1710, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 1711, + 665, 666, 214, 667, 668, 216, 669, 670, 1712, 671, + -2165, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 1713, 685, 0, 686, 687, 0, + 688, 221, 689, 690, 691, 692, 693, 0, 694, 1714, + 1715, 0, 0, 696, 697, 1716, 698, 1717, 1718, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 1719, 707, + 708, 709, 710, 711, 1720, 0, 712, 713, 714, 715, + 716, 769, 1721, 0, 717, 233, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 1722, 1723, 1724, 1725, 240, 1726, 1727, 1728, + 1729, 245, 770, 729, 730, 1730, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1731, 1732, 0, 0, + 0, 0, 0, 0, 0, 1734, 793, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 794, 98, 99, 749, 795, + 0, 101, 102, 103, 104, 796, 797, 106, 107, 108, + 0, 109, 798, 799, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 429, 0, 0, 37, 0, 38, 39, 0, 1664, + 1665, 1666, 40, 1667, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 1668, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 126, 448, + 449, 450, 128, 1669, 130, 1670, 1671, 0, 451, 452, + 453, 454, 455, 456, 457, 1672, 1673, 458, 459, 1674, + 1675, 460, 0, 461, 462, 463, 464, 1676, 0, 1677, + 0, 465, 466, 467, 468, 469, 470, 142, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 145, + 479, 480, 0, 1678, 1679, 1680, 1681, 1682, 1683, 1684, + 483, 484, 485, 486, 763, 487, 1685, 1686, 488, 1687, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 1498, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 1688, 516, 517, 518, 519, 1689, + 1690, 520, 0, 521, 522, 523, 1691, 524, 0, 525, + 0, 526, 163, 0, 164, 527, 528, 529, 530, 0, + 531, 1692, 0, 1693, 532, 533, 0, 534, 535, 765, + 536, 537, 168, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 170, 171, 0, + 550, 551, 552, 1501, 1694, 0, 1695, 0, 553, 174, + 175, 554, 176, 555, 556, 557, 558, 559, 0, 0, + 560, 1696, 178, 561, 179, 0, 562, 563, 564, 1697, + 1698, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 1699, 185, 1700, + 579, 580, 581, 582, 583, 584, 585, 187, 1701, 586, + 1702, 587, 588, 190, 589, 1703, 1704, 590, 1705, 591, + 592, 593, 0, 594, 595, 0, 0, 1706, 597, 598, + 0, 0, 599, 600, 193, 194, 601, 195, 1707, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 1708, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 1709, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 207, 646, 647, 648, 649, 650, 1710, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 1711, 665, 666, 214, 667, 668, 216, 669, + 670, 1712, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 1713, 685, 0, + 686, 687, 0, 688, 221, 689, 690, 691, 692, 693, + 0, 694, 1714, 1715, 0, 0, 696, 697, 1716, 698, + 1717, 1718, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 1719, 707, 708, 709, 710, 711, 1720, 0, 712, + 713, 714, 715, 716, 769, 1721, 0, 717, 233, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 1722, 1723, 1724, 1725, 240, + 1726, 1727, 1728, 1729, 245, 770, 729, 730, 1730, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1731, + 1732, 0, 0, 0, 0, 0, 2433, 3647, 1734, 793, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 794, 98, + 99, 749, 795, 0, 101, 102, 103, 104, 796, 797, + 106, 107, 108, 0, 109, 798, 799, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 429, 0, 0, 37, 0, 38, + 39, 0, 1664, 1665, 1666, 40, 1667, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 1668, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 126, 448, 449, 450, 128, 1669, 130, 1670, 1671, + 0, 451, 452, 453, 454, 455, 456, 457, 1672, 1673, + 458, 459, 1674, 1675, 460, 0, 461, 462, 463, 464, + 1676, 0, 1677, 0, 465, 466, 467, 468, 469, 470, + 142, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, 1681, + 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, 1685, + 1686, 488, 1687, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 1498, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 1688, 516, 517, + 518, 519, 1689, 1690, 520, 0, 521, 522, 523, 1691, + 524, 0, 525, 0, 526, 163, 0, 164, 527, 528, + 529, 530, 0, 531, 1692, 0, 1693, 532, 533, 0, + 534, 535, 765, 536, 537, 168, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 170, 171, 0, 550, 551, 552, 1501, 1694, 0, 1695, + 0, 553, 174, 175, 554, 176, 555, 556, 557, 558, + 559, 0, 0, 560, 1696, 178, 561, 179, 0, 562, + 563, 564, 1697, 1698, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 1699, 185, 1700, 579, 580, 581, 582, 583, 584, 585, + 187, 1701, 586, 1702, 587, 588, 190, 589, 1703, 1704, + 590, 1705, 591, 592, 593, 0, 594, 595, 0, 0, + 1706, 597, 598, 0, 0, 599, 600, 193, 194, 601, + 195, 1707, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 1708, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 1709, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 207, 646, 647, 648, 649, 650, 1710, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 1711, 665, 666, 214, 667, + 668, 216, 669, 670, 1712, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 1713, 685, 0, 686, 687, 0, 688, 221, 689, 690, + 691, 692, 693, 0, 694, 1714, 1715, 0, 0, 696, + 697, 1716, 698, 1717, 1718, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 1719, 707, 708, 709, 710, 711, + 1720, 0, 712, 713, 714, 715, 716, 769, 1721, 0, + 717, 233, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 1722, 1723, + 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, 770, 729, + 730, 1730, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1731, 1732, 1733, 0, 0, 0, 0, 0, + 0, 1734, 793, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 794, 98, 99, 749, 795, 0, 101, 102, 103, + 104, 796, 797, 106, 107, 108, 0, 109, 798, 799, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 429, 0, 0, + 37, 0, 38, 39, 0, 1664, 1665, 1666, 40, 1667, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 3019, 438, 439, 440, 0, + 0, 0, 0, 1668, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 126, 448, 449, 450, 128, 1669, + 130, 1670, 1671, 0, 451, 452, 453, 454, 455, 456, + 457, 1672, 1673, 458, 459, 1674, 1675, 460, 0, 461, + 462, 463, 464, 1676, 0, 1677, 0, 465, 466, 467, + 468, 469, 470, 142, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 145, 479, 480, 0, 1678, + 1679, 1680, 1681, 1682, 1683, 1684, 483, 484, 485, 486, + 763, 487, 1685, 1686, 488, 1687, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 1498, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 1688, 516, 517, 518, 519, 1689, 1690, 520, 0, 521, + 522, 523, 1691, 524, 0, 525, 0, 526, 163, 0, + 164, 527, 528, 529, 530, 0, 531, 1692, 0, 1693, + 532, 533, 0, 534, 535, 765, 536, 537, 168, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 170, 171, 0, 550, 551, 552, 1501, + 1694, 0, 1695, 0, 553, 174, 175, 554, 176, 555, + 556, 557, 558, 559, 0, 0, 560, 1696, 178, 561, + 179, 0, 562, 563, 564, 1697, 1698, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 1699, 185, 1700, 579, 580, 581, 582, + 583, 584, 585, 187, 1701, 586, 1702, 587, 588, 190, + 589, 1703, 1704, 590, 1705, 591, 592, 593, 0, 594, + 595, 0, 0, 1706, 597, 598, 0, 0, 599, 600, + 193, 194, 601, 195, 1707, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 1708, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 1709, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 207, 646, 647, 648, + 649, 650, 1710, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 1711, 665, + 666, 214, 667, 668, 216, 669, 670, 1712, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 1713, 685, 0, 686, 687, 0, 688, + 221, 689, 690, 691, 692, 693, 0, 694, 1714, 1715, + 0, 0, 696, 697, 1716, 698, 1717, 1718, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 1719, 707, 708, + 709, 710, 711, 1720, 0, 712, 713, 714, 715, 716, + 769, 1721, 0, 717, 233, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 1722, 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, + 245, 770, 729, 730, 1730, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1731, 1732, 0, 0, 0, + 0, 0, 0, 0, 1734, 793, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 794, 98, 99, 749, 795, 0, + 101, 102, 103, 104, 796, 797, 106, 107, 108, 0, + 109, 798, 799, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 429, 0, 0, 37, 0, 38, 39, 0, 1664, 1665, + 1666, 40, 1667, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 1668, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 1669, 130, 1670, 1671, 0, 451, 452, 453, + 454, 455, 456, 457, 1672, 1673, 458, 459, 1674, 1675, + 460, 0, 461, 462, 463, 464, 1676, 0, 1677, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 483, + 484, 485, 486, 763, 487, 1685, 1686, 488, 1687, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 1498, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 1688, 516, 517, 518, 519, 1689, 1690, + 520, 0, 521, 522, 523, 1691, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 1692, 0, 1693, 532, 533, 0, 534, 535, 765, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 1501, 1694, 0, 1695, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 1696, 178, 561, 179, 0, 562, 563, 564, 1697, 1698, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 1699, 185, 1700, 579, + 580, 581, 582, 583, 584, 585, 187, 1701, 586, 1702, + 587, 588, 190, 589, 1703, 1704, 590, 1705, 591, 592, + 593, 0, 594, 595, 0, 0, 1706, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 1707, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 1708, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 1709, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 1710, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 1711, 665, 666, 214, 667, 668, 216, 669, 670, + 1712, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 1713, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 1714, 1715, 0, 0, 696, 697, 1716, 698, 1717, + 1718, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 1719, 707, 708, 709, 710, 711, 1720, 0, 712, 713, + 714, 715, 716, 769, 1721, 4170, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 1722, 1723, 1724, 1725, 240, 1726, + 1727, 1728, 1729, 245, 770, 729, 730, 1730, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1731, 1732, + 0, 0, 0, 0, 0, 0, 0, 1734, 793, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 794, 98, 99, + 749, 795, 0, 101, 102, 103, 104, 796, 797, 106, + 107, 108, 0, 109, 798, 799, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 429, 0, 0, 37, 0, 38, 39, + 0, 1664, 1665, 1666, 40, 1667, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 0, 438, 439, 440, 0, 0, 0, 0, 1668, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 126, 448, 449, 450, 128, 1669, 130, 1670, 1671, 0, + 451, 452, 453, 454, 455, 456, 457, 1672, 1673, 458, + 459, 1674, 1675, 460, 0, 461, 462, 463, 464, 1676, + 0, 1677, 0, 465, 466, 467, 468, 469, 470, 142, + 471, 472, 761, 0, 473, 474, 475, 476, 477, 478, + 0, 145, 479, 480, 0, 1678, 1679, 1680, 1681, 1682, + 1683, 1684, 483, 484, 485, 486, 763, 487, 1685, 1686, + 488, 1687, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 1498, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 1688, 516, 517, 518, + 519, 1689, 1690, 520, 0, 521, 522, 523, 1691, 524, + 0, 525, 0, 526, 163, 3696, 164, 527, 528, 529, + 530, 0, 531, 1692, 0, 1693, 532, 533, 0, 534, + 535, 765, 536, 537, 168, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 170, + 171, 0, 550, 551, 552, 1501, 1694, 0, 1695, 0, + 553, 174, 175, 554, 176, 555, 556, 557, 558, 559, + 0, 0, 560, 1696, 178, 561, 179, 0, 562, 563, + 564, 1697, 1698, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 1699, + 185, 1700, 579, 580, 581, 582, 583, 584, 585, 187, + 1701, 586, 1702, 587, 588, 190, 589, 1703, 1704, 590, + 1705, 591, 592, 593, 0, 594, 595, 0, 0, 1706, + 597, 598, 0, 0, 599, 600, 193, 194, 601, 195, + 1707, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 1708, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 1709, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 207, 646, 647, 648, 649, 650, 1710, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 663, 1711, 665, 666, 214, 667, 668, + 216, 669, 670, 1712, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 1713, + 685, 0, 686, 687, 0, 688, 221, 689, 690, 691, + 692, 693, 0, 694, 1714, 1715, 0, 0, 696, 697, + 1716, 698, 1717, 1718, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 1719, 707, 708, 709, 710, 711, 1720, + 0, 712, 713, 714, 715, 716, 769, 1721, 0, 717, + 233, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 1722, 1723, 1724, + 1725, 240, 1726, 1727, 1728, 1729, 245, 770, 729, 730, + 1730, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1731, 1732, 0, 0, 0, 0, 0, 0, 0, + 1734, 793, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 794, 98, 99, 749, 795, 0, 101, 102, 103, 104, + 796, 797, 106, 107, 108, 0, 109, 798, 799, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 429, 0, 0, 37, + 0, 38, 39, 0, 1664, 1665, 1666, 40, 1667, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 1668, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 126, 448, 449, 450, 128, 1669, 130, + 1670, 1671, 0, 451, 452, 453, 454, 455, 456, 457, + 1672, 1673, 458, 459, 1674, 1675, 460, 0, 461, 462, + 463, 464, 1676, 0, 1677, 0, 465, 466, 467, 468, + 469, 470, 142, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 145, 479, 480, 0, 1678, 1679, + 1680, 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, + 487, 1685, 1686, 488, 1687, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 1498, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 1688, + 516, 517, 518, 519, 1689, 1690, 520, 0, 521, 522, + 523, 1691, 524, 0, 525, 0, 526, 163, 0, 164, + 527, 528, 529, 530, 0, 531, 1692, 0, 1693, 532, + 533, 0, 534, 535, 765, 536, 537, 168, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 170, 171, 0, 550, 551, 552, 1501, 1694, + 0, 1695, 0, 553, 174, 175, 554, 176, 555, 556, + 557, 558, 559, 0, 0, 560, 1696, 178, 561, 179, + 0, 562, 563, 564, 1697, 1698, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 1699, 185, 1700, 579, 580, 581, 582, 583, + 584, 585, 187, 1701, 586, 1702, 587, 588, 190, 589, + 1703, 1704, 590, 1705, 591, 592, 593, 0, 594, 595, + 0, 0, 1706, 597, 598, 0, 0, 599, 600, 193, + 194, 601, 195, 1707, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 1708, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 1709, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 207, 646, 647, 648, 649, + 650, 1710, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 1711, 665, 666, + 214, 667, 668, 216, 669, 670, 1712, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 1713, 685, 0, 686, 687, 0, 688, 221, + 689, 690, 691, 692, 693, 0, 694, 1714, 1715, 3747, + 0, 696, 697, 1716, 698, 1717, 1718, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 1719, 707, 708, 709, + 710, 711, 1720, 0, 712, 713, 714, 715, 716, 769, + 1721, 0, 717, 233, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 1722, 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, + 770, 729, 730, 1730, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1731, 1732, 0, 0, 0, 0, + 0, 0, 0, 1734, 793, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 794, 98, 99, 749, 795, 0, 101, + 102, 103, 104, 796, 797, 106, 107, 108, 0, 109, + 798, 799, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 429, + 0, 0, 37, 0, 38, 39, 0, 1664, 1665, 1666, + 40, 1667, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 1668, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 126, 448, 449, 450, + 128, 1669, 130, 1670, 1671, 0, 451, 452, 453, 454, + 455, 456, 457, 1672, 1673, 458, 459, 1674, 1675, 460, + 0, 461, 462, 463, 464, 1676, 0, 1677, 0, 465, + 466, 467, 468, 469, 470, 142, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 145, 479, 480, + 5155, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 483, 484, + 485, 486, 763, 487, 1685, 1686, 488, 1687, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 1498, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 1688, 516, 517, 518, 519, 1689, 1690, 520, + 0, 521, 522, 523, 1691, 524, 0, 525, 0, 526, + 163, 0, 164, 527, 528, 529, 530, 0, 531, 1692, + 0, 1693, 532, 533, 0, 534, 535, 765, 536, 537, + 168, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 170, 171, 0, 550, 551, + 552, 1501, 1694, 0, 1695, 0, 553, 174, 175, 554, + 176, 555, 556, 557, 558, 559, 0, 0, 560, 1696, + 178, 561, 179, 0, 562, 563, 564, 1697, 1698, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 1699, 185, 1700, 579, 580, + 581, 582, 583, 584, 585, 187, 1701, 586, 1702, 587, + 588, 190, 589, 1703, 1704, 590, 1705, 591, 592, 593, + 0, 594, 595, 0, 0, 1706, 597, 598, 0, 0, + 599, 600, 193, 194, 601, 195, 1707, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 1708, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 1709, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 207, 646, + 647, 648, 649, 650, 1710, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 1711, 665, 666, 214, 667, 668, 216, 669, 670, 1712, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 1713, 685, 0, 686, 687, + 0, 688, 221, 689, 690, 691, 692, 693, 0, 694, + 1714, 1715, 0, 0, 696, 697, 1716, 698, 1717, 1718, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 1719, + 707, 708, 709, 710, 711, 1720, 0, 712, 713, 714, + 715, 716, 769, 1721, 0, 717, 233, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 1722, 1723, 1724, 1725, 240, 1726, 1727, + 1728, 1729, 245, 770, 729, 730, 1730, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1731, 1732, 0, + 0, 0, 0, 0, 0, 0, 1734, 793, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 794, 98, 99, 749, + 795, 0, 101, 102, 103, 104, 796, 797, 106, 107, + 108, 0, 109, 798, 799, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 429, 0, 0, 37, 0, 38, 39, 0, + 1664, 1665, 1666, 40, 1667, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 1668, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 126, + 448, 449, 450, 6359, 1669, 130, 1670, 1671, 0, 451, + 452, 453, 454, 455, 456, 457, 1672, 1673, 458, 459, + 1674, 1675, 460, 0, 461, 462, 463, 464, 1676, 0, + 1677, 0, 465, 466, 467, 468, 469, 470, 142, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 145, 479, 480, 6360, 1678, 1679, 1680, 1681, 1682, 1683, + 1684, 483, 484, 485, 486, 763, 487, 1685, 1686, 488, + 1687, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 1498, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 1688, 516, 517, 518, 519, + 1689, 1690, 520, 0, 521, 522, 523, 1691, 524, 0, + 525, 0, 526, 163, 0, 164, 527, 528, 529, 530, + 0, 531, 1692, 0, 1693, 532, 533, 0, 534, 535, + 765, 536, 537, 168, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 170, 171, + 0, 550, 551, 552, 1501, 1694, 0, 1695, 0, 553, + 174, 175, 554, 176, 555, 556, 557, 558, 559, 0, + 0, 560, 1696, 178, 561, 179, 0, 562, 563, 564, + 1697, 1698, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 1699, 185, + 1700, 579, 580, 581, 582, 583, 584, 585, 187, 1701, + 586, 1702, 587, 588, 190, 589, 1703, 1704, 590, 1705, + 591, 592, 593, 0, 594, 595, 0, 0, 1706, 597, + 598, 0, 0, 599, 600, 193, 194, 601, 195, 1707, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 1708, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 1709, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 207, 646, 647, 648, 649, 650, 1710, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 1711, 665, 666, 214, 667, 668, 216, + 669, 670, 1712, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 1713, 685, + 0, 686, 687, 0, 688, 221, 689, 690, 691, 692, + 693, 0, 694, 1714, 1715, 0, 0, 696, 697, 1716, + 698, 1717, 1718, 699, 700, 701, 702, 703, 6361, 705, + 706, 0, 1719, 707, 708, 709, 710, 711, 1720, 0, + 712, 713, 714, 715, 716, 769, 1721, 0, 717, 233, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 1722, 1723, 1724, 1725, + 240, 1726, 1727, 1728, 1729, 245, 770, 729, 730, 1730, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1731, 1732, 0, 0, 0, 0, 0, 0, 0, 1734, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 429, 0, 0, 37, 0, + 38, 39, 0, 1664, 1665, 1666, 40, 1667, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 1668, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 1669, 130, 1670, + 1671, 0, 451, 452, 453, 454, 455, 456, 457, 1672, + 1673, 458, 459, 1674, 1675, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 6360, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 1685, 1686, 488, 1687, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 1498, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 1688, 516, + 517, 518, 519, 1689, 1690, 520, 0, 521, 522, 523, + 1691, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 1693, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 1501, 1694, 0, + 1695, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 1699, 185, 1700, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 1702, 587, 588, 190, 589, 1703, + 1704, 590, 1705, 591, 592, 593, 0, 594, 595, 0, + 0, 1706, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 1709, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 1710, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 1712, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 1714, 1715, 0, 0, + 696, 697, 1716, 698, 1717, 1718, 699, 700, 701, 702, + 703, 6361, 705, 706, 0, 1719, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 1721, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, 770, + 729, 730, 1730, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1731, 1732, 0, 0, 0, 0, 0, + 0, 0, 1734, 793, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 794, 98, 99, 749, 795, 0, 101, 102, + 103, 104, 796, 797, 106, 107, 108, 0, 109, 798, + 799, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 429, 0, + 0, 37, 0, 38, 39, 0, 1664, 1665, 1666, 40, + 1667, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 1668, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 126, 448, 449, 450, 128, + 1669, 130, 1670, 1671, 0, 451, 452, 453, 454, 455, + 456, 457, 1672, 1673, 458, 459, 1674, 1675, 460, 0, + 461, 462, 463, 464, 1676, 0, 1677, 0, 465, 466, + 467, 468, 469, 470, 142, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 145, 479, 480, 0, + 1678, 1679, 1680, 1681, 1682, 1683, 1684, 483, 484, 485, + 486, 763, 487, 1685, 1686, 488, 1687, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 1498, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 1688, 516, 517, 518, 519, 1689, 1690, 520, 0, + 521, 522, 523, 1691, 524, 0, 525, 0, 526, 163, + 0, 164, 527, 528, 529, 530, 0, 531, 1692, 0, + 1693, 532, 533, 0, 534, 535, 765, 536, 537, 168, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 170, 171, 0, 550, 551, 552, + 1501, 1694, 0, 1695, 0, 553, 174, 175, 554, 176, + 555, 556, 557, 558, 559, 0, 0, 560, 1696, 178, + 561, 179, 0, 562, 563, 564, 1697, 1698, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 1699, 185, 1700, 579, 580, 581, + 582, 583, 584, 585, 187, 1701, 586, 1702, 587, 588, + 190, 589, 1703, 1704, 590, 1705, 591, 592, 593, 0, + 594, 595, 0, 0, 1706, 597, 598, 0, 0, 599, + 600, 193, 194, 601, 195, 1707, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 1708, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 1709, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 207, 646, 647, + 648, 649, 650, 1710, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 1711, + 665, 666, 214, 667, 668, 216, 669, 670, 1712, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 1713, 685, 0, 686, 687, 0, + 688, 221, 689, 690, 691, 692, 693, 0, 694, 1714, + 1715, 0, 0, 696, 697, 1716, 698, 1717, 1718, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 1719, 707, + 708, 709, 710, 711, 1720, 0, 712, 713, 714, 715, + 716, 769, 1721, 0, 717, 233, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 1722, 1723, 1724, 1725, 240, 1726, 1727, 1728, + 1729, 245, 770, 729, 730, 1730, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1731, 1732, 0, 0, + 0, 0, 0, 0, 0, 1734, 793, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 794, 98, 99, 749, 795, + 0, 101, 102, 103, 104, 796, 797, 106, 107, 108, + 0, 109, 798, 799, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 429, 0, 0, 37, 0, 38, 39, 0, 1664, + 1665, 1666, 40, 1667, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 1668, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 126, 448, + 449, 450, 128, 1669, 130, 1670, 1671, 0, 451, 452, + 453, 454, 455, 456, 457, 1672, 1673, 458, 459, 1674, + 1675, 460, 0, 461, 462, 463, 464, 1676, 0, 1677, + 0, 465, 466, 467, 468, 469, 470, 142, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 145, + 479, 480, 0, 1678, 1679, 1680, 1681, 1682, 1683, 1684, + 483, 484, 485, 486, 763, 487, 1685, 1686, 488, 1687, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 1498, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 1688, 516, 517, 518, 519, 1689, + 1690, 520, 0, 521, 522, 523, 1691, 524, 0, 525, + 0, 526, 163, 0, 164, 527, 528, 529, 530, 0, + 531, 1692, 0, 1693, 532, 533, 0, 534, 535, 765, + 536, 537, 168, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 170, 171, 0, + 550, 551, 552, 1501, 1694, 0, 1695, 0, 553, 174, + 175, 554, 176, 555, 556, 557, 558, 559, 0, 0, + 560, 1696, 178, 561, 179, 0, 562, 563, 564, 1697, + 1698, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 1699, 185, 1700, + 579, 580, 581, 582, 583, 584, 585, 187, 1701, 586, + 1702, 587, 588, 190, 589, 1703, 1704, 590, 1705, 591, + 592, 593, 0, 594, 595, 0, 0, 1706, 597, 598, + 0, 0, 599, 600, 193, 194, 601, 195, 1707, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 1708, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 1709, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 207, 646, 647, 648, 649, 650, 1710, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 1711, 665, 666, 214, 667, 668, 216, 669, + 670, 1712, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 1713, 685, 0, + 686, 687, 0, 688, 221, 689, 690, 691, 692, 693, + 0, 694, 1714, 1715, 0, 0, 696, 697, 1716, 698, + 1717, 1718, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 1719, 707, 708, 709, 710, 711, 1720, 0, 712, + 713, 714, 715, 716, 769, 1721, 0, 717, 233, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 1722, 1723, 1724, 1725, 240, + 1726, 1727, 1728, 1729, 245, 770, 729, 730, 1730, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3022, + 3023, 0, 0, 0, 0, 0, 0, 0, 1734, 793, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 794, 98, + 99, 749, 795, 0, 101, 102, 103, 104, 796, 797, + 106, 107, 108, 0, 109, 798, 799, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 429, 0, 0, 37, 0, 38, + 39, 0, 1664, 1665, 1666, 40, 1667, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 1668, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 126, 448, 449, 450, 128, 1669, 130, 1670, 1671, + 0, 451, 452, 453, 454, 455, 456, 457, 1672, 1673, + 458, 459, 1674, 1675, 460, 0, 461, 462, 463, 464, + 1676, 0, 1677, 0, 465, 466, 467, 468, 469, 470, + 142, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, 1681, + 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, 1685, + 1686, 488, 1687, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 1498, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 1688, 516, 517, + 518, 519, 1689, 1690, 520, 0, 521, 522, 523, 1691, + 524, 0, 525, 0, 526, 163, 0, 164, 527, 528, + 529, 530, 0, 531, 1692, 0, 1693, 532, 533, 0, + 534, 535, 765, 536, 537, 168, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 170, 171, 0, 550, 551, 552, 1501, 1694, 0, 1695, + 0, 553, 174, 175, 554, 176, 555, 556, 557, 558, + 559, 0, 0, 560, 1696, 178, 561, 179, 0, 562, + 563, 564, 1697, 1698, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 1699, 185, 1700, 579, 580, 581, 582, 583, 584, 585, + 187, 1701, 586, 1702, 587, 588, 190, 589, 1703, 1704, + 590, 1705, 591, 592, 593, 0, 594, 595, 0, 0, + 1706, 597, 598, 0, 0, 599, 600, 193, 194, 601, + 195, 1707, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 1708, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 1709, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 207, 646, 647, 648, 649, 650, 1710, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 1711, 665, 666, 214, 667, + 668, 216, 669, 670, 1712, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 1713, 685, 0, 686, 687, 0, 688, 221, 689, 690, + 691, 692, 693, 0, 694, 1714, 1715, 0, 0, 696, + 697, 1716, 698, 1717, 1718, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 1719, 707, 708, 709, 710, 711, + 1720, 0, 712, 713, 714, 715, 716, 769, 1721, 0, + 717, 233, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 5525, 1722, 1723, + 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, 770, 729, + 730, 1730, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1731, 1732, 0, 0, 0, 0, 0, 0, + 0, 1734, 793, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 794, 98, 99, 749, 795, 0, 101, 102, 103, + 104, 796, 797, 106, 107, 108, 0, 109, 798, 799, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 429, 0, 0, + 37, 0, 38, 39, 0, 1664, 1665, 1666, 40, 1667, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 1668, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 126, 448, 449, 450, 128, 1669, + 130, 1670, 1671, 0, 451, 452, 453, 454, 455, 456, + 457, 1672, 1673, 458, 459, 1674, 1675, 460, 0, 461, + 462, 463, 464, 1676, 0, 1677, 0, 465, 466, 467, + 468, 469, 470, 142, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 145, 479, 480, 0, 1678, + 1679, 1680, 1681, 1682, 1683, 1684, 483, 484, 485, 486, + 763, 487, 1685, 1686, 488, 1687, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 1498, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 1688, 516, 517, 518, 519, 1689, 1690, 520, 0, 521, + 522, 523, 1691, 524, 0, 525, 0, 526, 163, 0, + 164, 527, 528, 529, 530, 0, 531, 1692, 0, 1693, + 532, 533, 0, 534, 535, 765, 536, 537, 168, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 170, 171, 0, 550, 551, 552, 1501, + 1694, 0, 1695, 0, 553, 174, 175, 554, 176, 555, + 556, 557, 558, 559, 0, 0, 560, 1696, 178, 561, + 179, 0, 562, 563, 564, 1697, 1698, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 1699, 185, 1700, 579, 580, 581, 582, + 583, 584, 5537, 187, 1701, 586, 1702, 587, 588, 190, + 589, 1703, 1704, 590, 1705, 591, 592, 593, 0, 594, + 595, 0, 0, 1706, 597, 598, 0, 0, 599, 600, + 193, 194, 601, 195, 1707, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 1708, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 1709, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 207, 646, 647, 648, + 649, 650, 1710, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 1711, 665, + 666, 214, 667, 668, 216, 669, 670, 1712, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 1713, 685, 0, 686, 687, 0, 688, + 221, 689, 690, 691, 692, 693, 0, 694, 1714, 1715, + 0, 0, 696, 697, 1716, 698, 1717, 1718, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 1719, 707, 708, + 709, 710, 711, 1720, 0, 712, 713, 714, 715, 716, + 769, 1721, 0, 717, 233, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 1722, 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, + 245, 770, 729, 730, 1730, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1731, 1732, 0, 0, 0, + 0, 0, 0, 0, 1734, 793, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 794, 98, 99, 749, 795, 0, + 101, 102, 103, 104, 796, 797, 106, 107, 108, 0, + 109, 798, 799, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 429, 0, 0, 37, 0, 38, 39, 0, 1664, 1665, + 1666, 40, 1667, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 1668, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 1669, 130, 1670, 1671, 0, 451, 452, 453, + 454, 455, 456, 457, 1672, 1673, 458, 459, 1674, 1675, + 460, 0, 461, 462, 463, 464, 1676, 0, 1677, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 6071, 0, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 483, + 484, 485, 486, 763, 487, 1685, 1686, 488, 1687, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 1498, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 1688, 516, 517, 518, 519, 1689, 1690, + 520, 0, 521, 522, 523, 1691, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 1692, 0, 6072, 532, 533, 0, 534, 535, 765, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 1501, 1694, 0, 1695, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 1696, 178, 561, 179, 0, 562, 563, 564, 1697, 1698, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 1699, 185, 1700, 579, + 580, 581, 582, 583, 584, 585, 187, 1701, 586, 1702, + 587, 588, 190, 589, 1703, 1704, 590, 1705, 591, 592, + 593, 0, 594, 595, 0, 0, 1706, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 1707, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 1708, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 1709, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 6073, 649, 650, 1710, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 1711, 665, 666, 214, 667, 668, 216, 669, 670, + 1712, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 1713, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 1714, 1715, 0, 0, 696, 697, 1716, 698, 1717, + 1718, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 1719, 707, 708, 709, 710, 711, 1720, 0, 712, 713, + 714, 715, 716, 769, 1721, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 1722, 1723, 1724, 1725, 240, 1726, + 1727, 1728, 1729, 245, 770, 729, 730, 1730, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1731, 1732, + 0, 0, 0, 0, 0, 0, 0, 6074, 793, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 794, 98, 99, + 749, 795, 0, 101, 102, 103, 104, 796, 797, 106, + 107, 108, 0, 109, 798, 799, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 429, 0, 0, 37, 0, 38, 39, + 0, 1664, 1665, 1666, 40, 1667, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 0, 438, 439, 440, 0, 0, 0, 0, 1668, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 126, 448, 449, 450, -3465, 1669, 130, 1670, 1671, 0, + 451, 452, 453, 454, 455, 456, 457, 1672, 1673, 458, + 459, 1674, 1675, 460, 0, 461, 462, 463, 464, 1676, + 0, 1677, 0, 465, 466, 467, 468, 469, 470, 142, + 471, 472, 761, 0, 473, 474, 475, 476, 477, 478, + 0, 145, 479, 480, 6360, 1678, 1679, 1680, 1681, 1682, + 1683, 1684, 483, 484, 485, 486, 763, 487, 1685, 1686, + 488, 1687, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 1498, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 1688, 516, 517, 518, + 519, 1689, 1690, 520, 0, 521, 522, 523, 1691, 524, + 0, 525, 0, 526, 163, 0, 164, 527, 528, 529, + 530, 0, 531, 1692, 0, 1693, 532, 533, 0, 534, + 535, 765, 536, 537, -3465, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 170, + 171, 0, 550, 551, 552, 1501, 1694, 0, 1695, 0, + 553, 0, 0, 554, 176, 555, 556, 557, 558, 559, + 0, 0, 560, 1696, 178, 561, -3465, 0, 562, 563, + 564, 1697, 1698, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 1699, + 185, 1700, 579, 580, 581, 582, 583, 584, 585, 187, + 1701, 586, 1702, 587, 588, 0, 589, 1703, 1704, 590, + 1705, 591, 592, 593, 0, 594, 595, 0, 0, 1706, + 597, 598, 0, 0, 599, 600, 193, 194, 601, 195, + 1707, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 1708, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 1709, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 207, 646, 647, 648, 649, 650, 1710, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 663, 1711, 665, 666, 214, 667, 668, + -3465, 669, 670, 1712, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 1713, + 685, 0, 686, 687, 0, 688, 221, 689, 690, 691, + 692, 693, 0, 694, 1714, 1715, 0, 0, 696, 697, + 1716, 698, 1717, 1718, 699, 700, 701, 702, 703, 6361, + 705, 706, 0, 1719, 707, 708, 709, 710, 711, 1720, + 0, 712, 713, 714, 715, 716, 769, 1721, 0, 717, + 233, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 1722, 1723, 1724, + 1725, 240, 1726, 1727, 1728, 1729, 245, 770, 729, 730, + -3465, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1731, 1732, 0, 0, 0, 0, 0, 0, 0, + 1734, 793, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 794, 98, 99, 749, 795, 0, 101, 102, 103, 104, + 796, 797, 106, 107, 108, 0, 109, 798, 799, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 429, 0, 0, 37, + 0, 38, 39, 0, 1664, 1665, 1666, 40, 1667, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 1668, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 126, 448, 449, 450, 128, 1669, 130, + 1670, 1671, 0, 451, 452, 453, 454, 455, 456, 457, + 1672, 1673, 458, 459, 1674, 1675, 460, 0, 461, 462, + 463, 464, 1676, 0, 1677, 0, 465, 466, 467, 468, + 469, 470, 142, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 145, 479, 480, 0, 1678, 1679, + 1680, 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, + 487, 1685, 1686, 488, 6056, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 1498, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 1688, + 516, 517, 518, 519, 1689, 1690, 520, 0, 521, 522, + 523, 1691, 524, 0, 525, 0, 526, 163, 0, 164, + 527, 528, 529, 530, 0, 531, 1692, 0, 1693, 532, + 533, 0, 534, 535, 765, 536, 537, 168, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 170, 171, 0, 550, 551, 552, 1501, 1694, + 0, 1695, 0, 553, 174, 175, 554, 176, 555, 556, + 557, 558, 559, 0, 0, 560, 1696, 178, 561, 179, + 0, 562, 563, 564, 1697, 1698, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 1699, 185, 1700, 579, 580, 581, 582, 583, + 584, 585, 187, 1701, 586, 0, 587, 588, 190, 589, + 1703, 1704, 590, 1705, 591, 592, 593, 0, 594, 595, + 0, 0, 1706, 597, 598, 0, 0, 599, 600, 193, + 194, 601, 195, 1707, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 1708, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 1709, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 207, 646, 647, 648, 649, + 650, 3681, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 1711, 665, 666, + 214, 667, 668, 216, 669, 670, 1712, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 1713, 685, 0, 686, 687, 0, 688, 221, + 689, 690, 691, 692, 693, 0, 694, 1714, 1715, 0, + 0, 696, 697, 1716, 698, 1717, 1718, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 1720, 0, 712, 713, 714, 715, 716, 769, + 1721, 0, 717, 233, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 1722, 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, + 770, 729, 730, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3682, 3683, 0, 0, 0, 0, + 0, 0, 0, 3684, 793, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 794, 98, 99, 749, 795, 0, 101, + 102, 103, 104, 796, 797, 106, 107, 108, 0, 109, + 798, 799, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 429, + 0, 0, 37, 0, 38, 39, 0, 1664, 1665, 1666, + 40, 1667, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 1668, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 126, 448, 449, 450, + 128, 1669, 130, 1670, 1671, 0, 451, 452, 453, 454, + 455, 456, 457, 1672, 1673, 458, 459, 1674, 1675, 460, + 0, 461, 462, 463, 464, 1676, 0, 1677, 0, 465, + 466, 467, 468, 469, 470, 142, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 145, 479, 480, + 0, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 483, 484, + 485, 486, 763, 487, 1685, 1686, 488, 0, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 1498, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 1688, 516, 517, 518, 519, 1689, 1690, 520, + 0, 521, 522, 523, 1691, 524, 0, 525, 0, 526, + 163, 0, 164, 527, 528, 529, 530, 0, 531, 1692, + 0, 1693, 532, 533, 0, 534, 535, 765, 536, 537, + 168, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 170, 171, 0, 550, 551, + 552, 1501, 1694, 0, 1695, 0, 553, 174, 175, 554, + 176, 555, 556, 557, 558, 559, 0, 0, 560, 1696, + 178, 561, 179, 0, 562, 563, 564, 1697, 1698, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 1699, 185, 1700, 579, 580, + 581, 582, 583, 584, 585, 187, 1701, 586, 0, 587, + 588, 190, 589, 1703, 1704, 590, 1705, 591, 592, 593, + 0, 594, 595, 0, 0, 1706, 597, 598, 0, 0, + 599, 600, 193, 194, 601, 195, 1707, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 1708, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 1709, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 207, 646, + 647, 648, 649, 650, 3681, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 1711, 665, 666, 214, 667, 668, 216, 669, 670, 1712, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 1713, 685, 0, 686, 687, + 0, 688, 221, 689, 690, 691, 692, 693, 0, 694, + 1714, 1715, 0, 0, 696, 697, 1716, 698, 1717, 1718, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 1720, 0, 712, 713, 714, + 715, 716, 769, 1721, 0, 717, 233, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 1722, 1723, 1724, 1725, 240, 1726, 1727, + 1728, 1729, 245, 770, 729, 730, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3682, 3683, 0, + 0, 0, 0, 0, 0, 0, 3684, 793, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 794, 98, 99, 749, + 795, 0, 101, 102, 103, 104, 796, 797, 106, 107, + 108, 0, 109, 798, 799, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 429, 0, 0, 37, 0, 38, 39, 0, + 1664, 1665, 0, 40, 1667, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 1668, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 126, + 448, 449, 450, 128, 1669, 130, 1670, 1671, 0, 451, + 452, 453, 454, 455, 456, 457, 1672, 1673, 458, 459, + 1674, 1675, 460, 0, 461, 462, 463, 464, 1676, 0, + 1677, 0, 465, 466, 467, 468, 469, 470, 142, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 145, 479, 480, 0, 1678, 1679, 1680, 1681, 1682, 1683, + 1684, 483, 484, 485, 486, 763, 487, 1685, 1686, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 1498, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 1688, 516, 517, 518, 519, + 1689, 1690, 520, 0, 521, 522, 523, 1691, 524, 0, + 525, 0, 526, 163, 0, 164, 527, 528, 529, 530, + 0, 531, 1692, 0, 1693, 532, 533, 0, 534, 535, + 765, 536, 537, 168, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 170, 171, + 0, 550, 551, 552, 1501, 1694, 0, 1695, 0, 553, + 174, 175, 554, 176, 555, 556, 557, 558, 559, 0, + 0, 560, 1696, 178, 561, 179, 0, 562, 563, 564, + 1697, 1698, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 1699, 185, + 1700, 579, 580, 581, 582, 583, 584, 585, 187, 1701, + 586, 0, 587, 588, 190, 589, 1703, 1704, 590, 1705, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 194, 601, 195, 1707, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 1708, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 1709, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 207, 646, 647, 648, 649, 650, 3818, 3819, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 1711, 665, 666, 214, 667, 668, 216, + 669, 670, 1712, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 1713, 685, + 0, 686, 687, 0, 688, 221, 689, 690, 691, 692, + 693, 0, 694, 1714, 1715, 0, 0, 696, 697, 1716, + 698, 1717, 1718, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 1720, 0, + 712, 713, 714, 715, 716, 769, 1721, 0, 717, 233, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 1722, 1723, 1724, 1725, + 240, 1726, 1727, 1728, 1729, 245, 770, 729, 730, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3820, 3821, 0, 0, 0, 0, 0, 0, 0, 3684, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 429, 0, 0, 37, 0, + 38, 39, 0, 1664, 1665, 0, 40, 1667, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 1668, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 1669, 130, 1670, + 1671, 0, 451, 452, 453, 454, 455, 456, 457, 1672, + 1673, 458, 459, 1674, 1675, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 1685, 1686, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 1498, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 1688, 516, + 517, 518, 519, 1689, 1690, 520, 0, 521, 522, 523, + 1691, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 1693, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 1501, 1694, 0, + 1695, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 1699, 185, 1700, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 0, 587, 588, 190, 589, 1703, + 1704, 590, 1705, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 1709, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 3681, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 1712, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 1714, 1715, 0, 0, + 696, 697, 1716, 698, 1717, 1718, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 1721, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, 770, + 729, 730, 0, 0, 0, 0, 0, 0, 0, 0, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 3684, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 429, 0, 0, 37, 0, + 38, 39, 0, 1664, 1665, 0, 40, 1667, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 1668, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 1669, 130, 1670, + 1671, 0, 451, 5060, 453, 454, 455, 456, 457, 1672, + 1673, 458, 459, 1674, 1675, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 1685, 1686, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 1498, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 1688, 516, + 517, 518, 519, 1689, 1690, 520, 0, 521, 522, 523, + 1691, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 1693, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 1501, 1694, 0, + 1695, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 1699, 185, 1700, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 0, 587, 588, 190, 589, 1703, + 1704, 590, 1705, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 1709, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 3681, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 1712, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 1714, 1715, 0, 0, + 696, 697, 1716, 698, 1717, 1718, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 1721, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, 770, + 729, 730, 0, 0, 0, 0, 0, 0, 0, 0, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 3684, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 429, 0, 0, 37, 0, + 38, 39, 0, 1664, 1665, 0, 40, 1667, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 1668, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 1669, 130, 1670, + 1671, 0, 451, 452, 453, 454, 455, 456, 457, 1672, + 1673, 458, 459, 1674, 1675, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 1685, 1686, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 1498, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 1688, 516, + 517, 518, 519, 1689, 1690, 520, 0, 521, 522, 523, + 1691, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 1693, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 1501, 1694, 0, + 1695, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 1699, 185, 1700, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 0, 587, 588, 190, 589, 1703, + 1704, 590, 1705, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 1709, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 3681, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 1712, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 1714, 1715, 0, 0, + 696, 697, 1716, 698, 1717, 1718, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 1721, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 5566, 1726, 1727, 1728, 1729, 245, 770, + 729, 730, 0, 0, 0, 0, 0, 0, 0, 0, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 3684, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 1673, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 1689, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 4534, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 0, 587, 588, 190, 589, 0, + 1704, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 1191, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 4535, 652, 653, 654, 655, 656, 657, 768, 658, + 212, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 220, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 1716, 698, 1717, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 2472, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 234, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 4536, 770, + 729, 730, 0, 0, 246, 0, 0, 0, 0, 0, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 4537, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 1673, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 1689, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 4534, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 0, 587, 588, 190, 589, 0, + 1704, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 1191, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 4535, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 1716, 698, 1717, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 4536, 770, + 729, 730, 0, 0, 0, 0, 0, 0, 0, 0, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 4537, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 1673, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 1689, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 0, 587, 588, 190, 589, 0, + 1704, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 1716, 698, 1717, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, 770, + 729, 730, 0, 0, 0, 0, 0, 0, 0, 0, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 4250, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 1673, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 1689, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 0, 587, 588, 190, 589, 0, + 1704, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 4535, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 1716, 698, 1717, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 4536, 770, + 729, 730, 0, 0, 0, 0, 0, 0, 0, 0, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 247, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 1673, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 1689, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 0, 587, 588, 190, 589, 0, + 1704, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 1716, 698, 1717, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, 770, + 729, 730, 0, 0, 0, 0, 0, 0, 0, 0, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 5189, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 1673, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 1676, 0, 1677, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 1678, 1679, 1680, + 1681, 1682, 1683, 1684, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 1689, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 1692, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 1696, 178, 561, 179, 0, + 562, 563, 564, 1697, 1698, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 1701, 586, 0, 587, 588, 190, 589, 0, + 1704, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 1707, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 1708, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 1711, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 1713, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 1716, 698, 1717, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 1720, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 1722, + 1723, 1724, 1725, 240, 1726, 1727, 1728, 1729, 245, 770, + 729, 730, 0, 0, 0, 0, 0, 0, 0, 0, + 793, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 6332, 92, 93, 94, 95, 96, 97, 794, + 98, 99, 749, 795, 0, 101, 102, 103, 104, 796, + 797, 106, 107, 108, 0, 109, 798, 799, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 139, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 0, 0, 0, + 146, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 178, 561, 179, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 190, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 0, 0, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 5902, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 5116, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, -1778, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, -1778, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 537, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, -1778, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, -1778, + 555, 556, 557, 558, 559, 0, 0, 560, 177, -1778, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, -1778, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, -1778, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 0, 0, 0, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 1821, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 429, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 212, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 220, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 2472, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 234, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 0, + 0, 246, 0, 0, 0, 0, 0, 0, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 247, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 212, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 220, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 2472, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 234, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 0, + 0, 246, 0, 0, 0, 0, 0, 0, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 247, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 39, 0, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 769, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 4339, 4340, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 39, 0, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 769, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 0, + 0, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 4340, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 0, 0, 0, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 0, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 0, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 0, 0, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 1806, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 537, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 0, 0, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 3851, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 760, + 134, 460, 0, 461, 462, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 520, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 537, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 646, 647, 648, 649, 650, 209, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 769, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 0, 0, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 5095, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 537, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 0, 0, 0, 0, 0, 0, 0, 0, 793, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 5583, 92, 93, 94, 95, 96, 97, 794, 98, + 99, 749, 795, 0, 101, 102, 103, 104, 796, 797, + 106, 107, 108, 0, 109, 798, 799, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 429, 0, 0, 37, 0, 38, + 39, 0, 0, 0, 1313, 40, 0, 0, 0, 0, + 0, 1314, 1315, 1316, 430, 431, 432, 433, 434, 435, + 436, 437, 800, 438, 439, 440, 801, 802, 803, 804, + 805, 806, 807, 441, 442, 443, 808, 444, 445, 446, + 447, 126, 448, 449, 450, 0, 1491, 130, 1492, 1493, + 809, 451, 452, 453, 454, 455, 456, 457, 810, 811, + 458, 459, 1494, 1495, 460, 813, 461, 462, 463, 464, + 0, 814, 139, 815, 465, 466, 467, 468, 469, 470, + 142, 471, 472, 761, 817, 473, 474, 475, 476, 477, + 478, 818, 145, 479, 480, 0, 820, 821, 822, 146, + 823, 824, 825, 483, 484, 485, 486, 763, 487, 1496, + 1497, 488, 826, 489, 827, 490, 491, 492, 493, 494, + 495, 496, 828, 497, 498, 499, 500, 829, 830, 501, + 502, 1498, 504, 505, 831, 506, 507, 508, 832, 509, + 510, 511, 833, 512, 513, 514, 515, 0, 516, 517, + 518, 519, 0, 834, 520, 835, 521, 522, 523, 1499, + 524, 836, 525, 837, 526, 163, 838, 164, 527, 528, + 529, 530, 839, 531, 0, 840, 0, 532, 533, 841, + 534, 535, 765, 536, 537, 168, 538, 539, 540, 541, + 842, 542, 543, 544, 545, 546, 547, 548, 843, 549, + 170, 0, 0, 550, 551, 552, 1501, 1502, 846, 1503, + 847, 553, 174, 175, 554, 176, 555, 556, 557, 558, + 559, 848, 849, 560, 0, 178, 561, 179, 850, 562, + 563, 564, 851, 852, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 1504, 185, 1505, 579, 580, 581, 582, 583, 584, 585, + 4833, 0, 586, 853, 587, 588, 190, 589, 854, 0, + 590, 1506, 591, 592, 593, 855, 594, 595, 856, 857, + 4834, 597, 598, 858, 859, 599, 600, 0, 194, 601, + 195, 0, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 860, 611, 612, 0, 613, 0, 614, 615, 616, + 861, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 1507, 627, 628, 629, 630, 862, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 863, 644, 645, 207, 646, 647, 648, 649, 650, 0, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 864, + 659, 660, 661, 662, 663, 865, 665, 666, 3104, 667, + 668, 216, 669, 670, 1509, 671, 866, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 0, 685, 867, 686, 687, 868, 688, 221, 689, 690, + 691, 692, 693, 869, 694, 1510, 1511, 0, 871, 696, + 697, 0, 698, 0, 872, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 874, 707, 708, 709, 710, 711, + 875, 876, 712, 713, 714, 715, 716, 0, 1512, 878, + 717, 233, 718, 719, 720, 721, 879, 880, 722, 881, + 882, 723, 724, 725, 726, 727, 728, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 770, 729, + 730, 0, 0, 0, 0, 0, 0, 0, 0, 1319, + 1320, 1321, 4835, 4836, 1324, 1325, 1326, 1327, 793, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 794, 98, 99, + 749, 795, 0, 101, 102, 103, 104, 796, 797, 106, + 107, 108, 0, 109, 798, 799, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 429, 0, 0, 37, 0, 38, 39, + 0, 0, 0, 1313, 40, 0, 0, 0, 0, 0, + 1314, 1315, 1316, 430, 431, 432, 433, 434, 435, 436, + 437, 800, 438, 439, 440, 801, 802, 803, 804, 805, + 806, 807, 441, 442, 443, 808, 444, 445, 446, 447, + 126, 448, 449, 450, 0, 1491, 130, 1492, 1493, 809, + 451, 452, 453, 454, 455, 456, 457, 810, 811, 458, + 459, 1494, 1495, 460, 813, 461, 462, 463, 464, 0, + 814, 139, 815, 465, 466, 467, 468, 469, 470, 142, + 471, 472, 761, 817, 473, 474, 475, 476, 477, 478, + 818, 145, 479, 480, 0, 820, 821, 822, 146, 823, + 824, 825, 483, 484, 485, 486, 763, 487, 1496, 1497, + 488, 826, 489, 827, 490, 491, 492, 493, 494, 495, + 496, 828, 497, 498, 499, 500, 829, 830, 501, 502, + 1498, 504, 505, 831, 506, 507, 508, 832, 509, 510, + 511, 833, 512, 513, 514, 515, 0, 516, 517, 518, + 519, 0, 834, 520, 835, 521, 522, 523, 1499, 524, + 836, 525, 837, 526, 163, 838, 164, 527, 528, 529, + 530, 839, 531, 0, 840, 0, 532, 533, 841, 534, + 535, 765, 536, 537, 168, 538, 539, 540, 541, 842, + 542, 543, 544, 545, 546, 547, 548, 843, 549, 170, + 0, 0, 550, 551, 552, 1501, 1502, 846, 1503, 847, + 553, 174, 175, 554, 176, 555, 556, 557, 558, 559, + 848, 849, 560, 0, 178, 561, 179, 850, 562, 563, + 564, 851, 852, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 1504, + 185, 1505, 579, 580, 581, 582, 583, 584, 585, 5281, + 0, 586, 853, 587, 588, 190, 589, 854, 0, 590, + 1506, 591, 592, 593, 855, 594, 595, 856, 857, 4834, + 597, 598, 858, 859, 599, 600, 0, 194, 601, 195, + 0, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 860, 611, 612, 0, 613, 0, 614, 615, 616, 861, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 1507, 627, 628, 629, 630, 862, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 863, + 644, 645, 207, 646, 647, 648, 649, 650, 0, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 864, 659, + 660, 661, 662, 663, 865, 665, 666, 3104, 667, 668, + 216, 669, 670, 1509, 671, 866, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 0, + 685, 867, 686, 687, 868, 688, 221, 689, 690, 691, + 692, 693, 869, 694, 1510, 1511, 0, 871, 696, 697, + 0, 698, 0, 872, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 874, 707, 708, 709, 710, 711, 875, + 876, 712, 713, 714, 715, 716, 0, 1512, 878, 717, + 233, 718, 719, 720, 721, 879, 880, 722, 881, 882, + 723, 724, 725, 726, 727, 728, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 770, 729, 730, + 0, 0, 0, 0, 0, 0, 0, 0, 1319, 1320, + 1321, 4835, 4836, 1324, 1325, 1326, 1327, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 0, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 1313, 0, 0, 0, 0, 0, 0, 1314, 1315, + 1316, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 760, + 134, 460, 0, 461, 1317, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 1318, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 537, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 646, 647, 648, 649, 650, 209, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 769, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 0, 0, + 0, 0, 0, 0, 0, 0, 1319, 1320, 1321, 1322, + 1323, 1324, 1325, 1326, 1327, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 749, 0, 0, 101, + 102, 103, 104, 0, 0, 106, 107, 108, 0, 109, + 0, 0, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 1313, + 0, 0, 0, 0, 0, 0, 1314, 1315, 1316, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 0, 448, 449, 450, + 128, 129, 0, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 760, 134, 460, + 0, 461, 1432, 463, 464, 138, 0, 0, 0, 465, + 466, 467, 468, 469, 470, 0, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 0, 479, 480, + 0, 0, 0, 0, 0, 0, 0, 0, 483, 484, + 485, 486, 763, 487, 149, 150, 488, 0, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 0, 1433, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 0, 0, 0, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 765, 536, 537, + 0, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 0, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 0, 0, 554, + 0, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 0, 561, 0, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 184, 0, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 0, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 0, 0, 596, 597, 598, 0, 0, + 599, 600, 193, 0, 601, 0, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 0, 646, + 647, 648, 649, 650, 209, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 0, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 0, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 0, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 769, 232, 0, 717, 0, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 770, 729, 730, 0, 0, 0, 0, + 0, 0, 0, 0, 1319, 1320, 1321, 1322, 1323, 1324, + 1325, 1326, 1327, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 1313, 0, 0, + 0, 0, 0, 0, 1314, 1315, 1316, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 760, 134, 460, 0, 461, + 1543, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 1544, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 1545, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 0, 0, 696, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 769, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 0, 0, 0, 0, 0, 0, + 0, 0, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, + 1327, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, + 0, 0, 1314, 1315, 1316, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 0, 461, 2173, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 2174, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 0, 0, 0, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 0, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 0, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 0, 0, 0, 0, 0, 0, 0, 0, + 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 749, 0, 0, 101, 102, 103, 104, 0, 0, 106, + 107, 108, 0, 109, 0, 0, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, + 1314, 1315, 1316, 430, 431, 432, 433, 434, 435, 436, + 437, 0, 438, 439, 440, 0, 0, 0, 0, 0, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 0, 448, 449, 450, 128, 129, 0, 131, 132, 0, + 451, 452, 453, 454, 455, 456, 457, 0, 0, 458, + 459, 760, 134, 460, 0, 461, 462, 463, 464, 138, + 0, 0, 0, 465, 466, 467, 468, 469, 470, 0, + 471, 472, 761, 0, 473, 474, 475, 476, 477, 478, + 0, 0, 479, 480, 0, 0, 0, 0, 0, 0, + 0, 0, 483, 484, 485, 486, 763, 487, 149, 150, + 488, 0, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 503, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 158, 516, 517, 518, + 519, 160, 0, 520, 0, 521, 522, 523, 162, 524, + 0, 525, 0, 526, 0, 0, 0, 527, 528, 529, + 530, 0, 531, 166, 0, 167, 532, 533, 0, 534, + 535, 765, 536, 537, 0, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 0, + 171, 0, 550, 551, 552, 0, 172, 0, 173, 0, + 553, 0, 0, 554, 0, 555, 556, 557, 558, 559, + 0, 0, 560, 177, 0, 561, 0, 0, 562, 563, + 564, 0, 0, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 184, + 0, 186, 579, 580, 581, 582, 583, 584, 585, 187, + 188, 586, 0, 587, 588, 0, 589, 0, 191, 590, + 192, 591, 592, 593, 0, 594, 595, 0, 0, 596, + 597, 598, 0, 0, 599, 600, 193, 0, 601, 0, + 196, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 197, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 200, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 0, 646, 647, 648, 649, 650, 209, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 663, 0, 665, 666, 214, 667, 668, + 0, 669, 670, 217, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 219, + 685, 0, 686, 687, 0, 688, 0, 689, 690, 691, + 692, 693, 0, 694, 222, 223, 0, 0, 696, 697, + 224, 698, 225, 0, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 0, 707, 708, 709, 710, 711, 0, + 0, 712, 713, 714, 715, 716, 769, 232, 0, 717, + 0, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 770, 729, 730, + 0, 0, 0, 0, 0, 0, 0, 0, 1319, 1320, + 1321, 1322, 1323, 1324, 1325, 1326, 1327, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 0, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 1313, 0, 0, 0, 0, 0, 0, 1314, 1315, + 1316, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 760, + 134, 460, 0, 461, 3945, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 3946, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 537, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 646, 647, 648, 649, 650, 209, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 769, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 0, 0, + 0, 0, 0, 0, 0, 0, 1319, 1320, 1321, 1322, + 1323, 1324, 1325, 1326, 1327, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 749, 0, 0, 101, + 102, 103, 104, 0, 0, 106, 107, 108, 0, 109, + 0, 0, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 1313, + 0, 0, 0, 0, 0, 0, 1314, 1315, 1316, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 0, 448, 449, 450, + 128, 129, 0, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 760, 134, 460, + 0, 461, 462, 463, 464, 138, 0, 0, 0, 465, + 466, 467, 468, 469, 470, 0, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 0, 479, 480, + 0, 0, 0, 0, 0, 0, 0, 0, 483, 484, + 485, 486, 763, 487, 149, 150, 488, 0, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 0, 520, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 0, 0, 0, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 765, 536, 537, + 0, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 0, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 0, 0, 554, + 0, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 0, 561, 0, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 184, 0, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 0, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 0, 0, 5881, 597, 598, 0, 0, + 599, 600, 193, 0, 601, 0, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 0, 646, + 647, 648, 649, 650, 209, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 0, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 0, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 0, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 769, 232, 0, 717, 0, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 770, 729, 730, 0, 0, 0, 0, + 0, 0, 0, 0, 1319, 1320, 1321, 1322, 1323, 1324, + 1325, 1326, 1327, 793, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 794, 98, 99, 749, 795, 0, 101, 102, + 103, 104, 796, 797, 106, 107, 108, 0, 109, 798, + 799, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 800, 438, 439, 440, + 801, 802, 803, 804, 805, 806, 807, 441, 442, 443, + 808, 444, 445, 446, 447, 126, 448, 449, 450, 128, + 129, 130, 131, 132, 809, 451, 452, 453, 454, 455, + 456, 457, 810, 811, 458, 459, 812, 134, 460, 813, + 461, 462, 463, 464, 138, 814, 139, 815, 465, 466, + 467, 468, 469, 470, 142, 471, 472, 816, 817, 473, + 474, 475, 476, 477, 478, 818, 145, 479, 480, 819, + 820, 821, 822, 146, 823, 824, 825, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 826, 489, 827, 490, + 491, 492, 493, 494, 495, 496, 828, 497, 498, 499, + 500, 829, 830, 501, 502, 503, 504, 505, 831, 506, + 507, 508, 832, 509, 510, 511, 833, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 834, 520, 835, + 521, 522, 523, 162, 524, 836, 525, 837, 526, 163, + 838, 164, 527, 528, 529, 530, 839, 531, 166, 840, + 167, 532, 533, 841, 534, 535, 765, 536, 537, 168, + 538, 539, 540, 541, 842, 542, 543, 544, 545, 546, + 547, 548, 843, 549, 170, 171, 844, 550, 551, 552, + 845, 172, 846, 173, 847, 553, 174, 175, 554, 176, + 555, 556, 557, 558, 559, 848, 849, 560, 177, 178, + 561, 179, 850, 562, 563, 564, 851, 852, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 185, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 853, 587, 588, + 190, 589, 854, 191, 590, 192, 591, 592, 593, 855, + 594, 595, 856, 857, 596, 597, 598, 858, 859, 599, + 600, 193, 194, 601, 195, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 860, 611, 612, 197, 613, + 198, 614, 615, 616, 861, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 862, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 863, 644, 645, 207, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 864, 659, 660, 661, 662, 663, 865, + 665, 666, 214, 667, 668, 216, 669, 670, 217, 671, + 866, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 867, 686, 687, 868, + 688, 221, 689, 690, 691, 692, 693, 869, 694, 222, + 223, 870, 871, 696, 697, 224, 698, 225, 872, 699, + 700, 701, 702, 703, 704, 705, 706, 873, 874, 707, + 708, 709, 710, 711, 875, 876, 712, 713, 714, 715, + 716, 877, 232, 878, 717, 233, 718, 719, 720, 721, + 879, 880, 722, 881, 882, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 0, 793, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 2150, 92, + 93, 94, 95, 96, 97, 794, 98, 99, 749, 795, + 0, 101, 102, 103, 104, 796, 797, 106, 107, 108, + 0, 109, 798, 799, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 126, 448, + 449, 450, 0, 1491, 130, 1492, 1493, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 1494, + 1495, 460, 0, 461, 462, 463, 464, 0, 0, 139, + 0, 465, 466, 467, 468, 469, 470, 142, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 145, + 479, 480, 0, 0, 0, 0, 146, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 1496, 1497, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 1498, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 0, 516, 517, 518, 519, 0, + 0, 520, 0, 521, 522, 523, 1499, 524, 0, 525, + 0, 526, 163, 0, 164, 527, 528, 529, 530, 0, + 531, 0, 0, 0, 532, 533, 0, 534, 535, 765, + 536, 537, 168, 538, 539, 540, 541, 3100, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 170, 3101, 0, + 550, 551, 552, 1501, 1502, 0, 1503, 0, 553, 174, + 175, 554, 176, 555, 556, 557, 558, 559, 0, 0, + 560, 0, 178, 561, 179, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 1504, 185, 1505, + 579, 580, 581, 582, 583, 584, 585, 0, 0, 586, + 0, 587, 588, 190, 589, 0, 0, 590, 1506, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 3102, 599, 600, 3103, 194, 601, 195, 0, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 0, 613, 0, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 1507, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 207, 646, 647, 648, 649, 650, 0, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 3104, 667, 668, 216, 669, + 670, 1509, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 0, 685, 0, + 686, 687, 0, 688, 221, 689, 690, 691, 692, 693, + 0, 694, 1510, 1511, 0, 0, 696, 697, 0, 698, + 0, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 0, 1512, 3105, 717, 233, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 770, 729, 730, 0, 0, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 3106, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 537, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 0, 0, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 1198, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 760, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 537, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 0, 0, 696, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 769, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 0, 0, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 6302, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 749, 0, 0, + 101, 102, 103, 104, 0, 0, 106, 107, 108, 0, + 109, 0, 0, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 429, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 1088, 432, 433, 434, 435, 436, 437, 1089, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 0, 1090, 449, + 450, 128, 129, 0, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 760, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 0, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 0, 479, + 480, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 1091, 162, 524, 0, 525, 0, + 1092, 0, 1093, 0, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 537, 0, 538, 539, 540, 541, 1094, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 0, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 0, 0, + 554, 0, 555, 556, 557, 558, 1095, 0, 0, 560, + 177, 0, 561, 0, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 184, 0, 186, 579, + 1096, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 0, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 0, 601, 0, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 1097, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 1098, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 0, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 0, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 0, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 769, 232, 0, 717, 0, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 0, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 1099, 1100, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 429, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 1088, 432, 433, 434, 435, 436, 437, + 1089, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 1122, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 1091, 162, 524, 0, + 525, 0, 1123, 0, 1093, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 0, 538, 539, 540, 541, 1094, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 1095, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 1096, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 1097, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 1098, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 769, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 0, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 1099, 1100, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 429, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 1597, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 1093, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 537, 0, 538, 539, 540, 541, + 1094, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 0, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 1099, 1100, 92, 93, 94, 95, 96, 97, + 0, 98, 99, 749, 0, 0, 101, 102, 103, 104, + 0, 0, 106, 107, 108, 0, 109, 0, 0, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 429, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 1602, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 0, 448, 449, 450, 128, 129, 0, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 760, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 0, 0, 465, 466, 467, 468, + 469, 470, 0, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 0, 479, 480, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 0, 1093, 0, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 537, 0, 538, 539, + 540, 541, 1094, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 0, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 0, 0, 554, 0, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 0, 561, 0, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 0, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 0, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 0, 601, 0, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 0, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 0, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 0, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 769, + 232, 0, 717, 0, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 0, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 1099, 1100, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 429, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 764, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 537, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 1777, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1168, 1778, 81, 82, 746, 84, + 85, 86, 747, 1169, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 749, 0, 0, + 101, 102, 103, 104, 0, 0, 106, 107, 108, 0, + 109, 0, 0, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 0, 448, 449, + 450, 128, 129, 0, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 1170, 459, 1141, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 0, 471, 472, 1171, + 0, 1172, 474, 475, 476, 477, 478, 0, 0, 479, + 480, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 0, 0, 0, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 537, 0, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 0, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 0, 0, + 554, 0, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 0, 561, 0, 0, 562, 563, 1173, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 1174, 184, 0, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 0, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 0, 601, 0, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 0, + 1175, 647, 648, 649, 650, 209, 651, 652, 653, 1176, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 1177, 0, 665, 666, 214, 667, 668, 0, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 0, 689, 690, 691, 692, 693, 0, + 694, 1178, 223, 0, 0, 1179, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 1145, 232, 0, 717, 0, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 1180, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 793, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 794, 98, 99, 749, + 795, 0, 101, 102, 103, 104, 796, 797, 106, 107, + 108, 0, 109, 798, 799, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 38, 39, 0, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 800, 438, 439, 440, 801, 802, 803, 804, 805, 806, + 807, 441, 442, 443, 808, 444, 445, 446, 447, 126, + 448, 449, 450, 128, 129, 130, 131, 132, 809, 451, + 452, 453, 454, 455, 456, 457, 810, 811, 458, 459, + 812, 134, 460, 813, 461, 462, 463, 464, 138, 814, + 139, 815, 465, 466, 467, 468, 469, 470, 142, 471, + 472, 816, 817, 473, 474, 475, 476, 477, 478, 818, + 145, 479, 480, 819, 820, 821, 822, 146, 823, 824, + 825, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 826, 489, 827, 490, 491, 492, 493, 494, 495, 496, + 828, 497, 498, 499, 500, 829, 830, 501, 502, 503, + 504, 505, 831, 506, 507, 508, 832, 509, 510, 511, + 833, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 834, 520, 835, 521, 522, 523, 162, 524, 836, + 525, 837, 526, 163, 838, 164, 527, 528, 529, 530, + 839, 531, 166, 840, 167, 532, 533, 841, 534, 535, + 765, 536, 537, 168, 538, 539, 540, 541, 842, 542, + 543, 544, 545, 546, 547, 548, 843, 549, 170, 171, + 844, 550, 551, 552, 845, 172, 846, 173, 847, 553, + 174, 175, 554, 176, 555, 556, 557, 558, 559, 848, + 849, 560, 177, 178, 561, 179, 850, 562, 563, 564, + 851, 852, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 185, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 853, 587, 588, 190, 589, 854, 191, 590, 192, + 591, 592, 593, 855, 594, 595, 856, 857, 596, 597, + 598, 858, 859, 599, 600, 193, 194, 601, 195, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 860, + 611, 612, 197, 613, 198, 614, 615, 616, 861, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 862, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 863, 644, + 645, 207, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 864, 659, 660, + 661, 662, 663, 865, 665, 666, 214, 667, 668, 216, + 669, 670, 217, 671, 866, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 867, 686, 687, 868, 688, 221, 689, 690, 691, 692, + 693, 869, 694, 222, 223, 870, 871, 696, 697, 224, + 698, 225, 872, 699, 700, 701, 702, 703, 704, 705, + 706, 873, 874, 707, 708, 709, 710, 711, 875, 876, + 712, 713, 714, 715, 716, 877, 232, 878, 717, 233, + 718, 719, 720, 721, 879, 880, 722, 881, 882, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 793, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 794, 98, + 99, 749, 795, 0, 101, 102, 103, 104, 796, 797, + 106, 107, 108, 0, 109, 798, 799, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 800, 438, 439, 440, 801, 802, 803, 804, + 805, 806, 807, 441, 442, 443, 808, 444, 445, 446, + 447, 126, 448, 449, 450, 128, 129, 130, 131, 132, + 809, 451, 452, 453, 454, 455, 456, 457, 810, 811, + 458, 459, 812, 134, 460, 813, 461, 462, 463, 464, + 138, 814, 139, 815, 465, 466, 467, 468, 469, 470, + 142, 471, 472, 816, 817, 473, 474, 475, 476, 477, + 478, 818, 145, 479, 480, 819, 820, 821, 822, 146, + 823, 824, 825, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 826, 489, 827, 490, 491, 492, 493, 494, + 495, 496, 828, 497, 498, 499, 500, 829, 830, 501, + 502, 503, 504, 505, 831, 506, 507, 508, 832, 509, + 510, 511, 833, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 834, 520, 835, 521, 522, 523, 162, + 524, 836, 525, 837, 526, 163, 838, 164, 527, 528, + 529, 530, 839, 531, 166, 840, 167, 532, 533, 841, + 534, 535, 765, 536, 537, 168, 538, 539, 540, 541, + 842, 542, 543, 544, 545, 546, 547, 548, 843, 549, + 170, 171, 844, 550, 551, 552, 845, 172, 846, 173, + 847, 553, 174, 175, 554, 176, 555, 556, 557, 558, + 559, 848, 849, 560, 177, 178, 561, 179, 850, 562, + 563, 564, 851, 852, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 185, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 853, 587, 588, 190, 589, 854, 191, + 590, 192, 591, 592, 593, 855, 594, 595, 856, 857, + 596, 597, 598, 858, 859, 599, 600, 193, 194, 601, + 195, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 860, 611, 612, 197, 613, 198, 614, 615, 616, + 861, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 862, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 863, 644, 645, 207, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 864, + 659, 660, 661, 662, 663, 865, 665, 666, 214, 667, + 668, 216, 669, 670, 217, 671, 866, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 867, 686, 687, 868, 688, 221, 689, 690, + 691, 692, 693, 869, 694, 222, 223, 870, 871, 696, + 697, 224, 698, 225, 872, 699, 700, 701, 702, 703, + 704, 705, 706, 873, 874, 707, 708, 709, 710, 711, + 875, 876, 712, 713, 714, 715, 716, 877, 232, 878, + 717, 233, 718, 719, 720, 721, 879, 880, 722, 881, + 882, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 793, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 794, 98, 99, 749, 795, 0, 101, 102, 103, 104, + 796, 797, 106, 107, 108, 0, 109, 798, 799, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 4011, 435, 436, 437, 800, 438, 439, 440, 801, 802, + 803, 804, 805, 806, 807, 441, 442, 443, 808, 444, + 445, 446, 447, 126, 448, 449, 450, 128, 129, 130, + 131, 132, 809, 451, 452, 453, 454, 455, 456, 457, + 810, 811, 458, 459, 812, 134, 460, 813, 461, 462, + 463, 464, 138, 814, 139, 815, 465, 466, 467, 468, + 469, 470, 142, 471, 472, 816, 817, 473, 474, 475, + 476, 477, 478, 818, 145, 479, 480, 819, 820, 821, + 822, 146, 823, 824, 825, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 826, 489, 827, 490, 491, 492, + 493, 494, 495, 496, 828, 497, 498, 499, 500, 829, + 830, 501, 502, 503, 4012, 505, 831, 506, 507, 508, + 832, 509, 510, 511, 833, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 834, 520, 835, 521, 522, + 523, 162, 524, 836, 525, 837, 526, 163, 838, 164, + 527, 528, 529, 530, 839, 531, 166, 840, 167, 532, + 533, 841, 534, 535, 765, 536, 537, 168, 538, 539, + 540, 541, 842, 542, 543, 544, 545, 546, 547, 548, + 843, 549, 170, 171, 844, 550, 551, 552, 845, 172, + 846, 173, 847, 553, 174, 175, 554, 176, 555, 556, + 557, 558, 559, 848, 849, 560, 177, 178, 561, 179, + 850, 562, 563, 564, 851, 852, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 185, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 853, 587, 588, 190, 589, + 854, 191, 590, 192, 591, 592, 593, 855, 594, 595, + 856, 857, 596, 597, 598, 858, 859, 599, 600, 193, + 194, 601, 195, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 860, 611, 612, 197, 613, 198, 614, + 615, 616, 861, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 862, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 863, 644, 645, 207, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 864, 659, 660, 661, 662, 663, 865, 4013, 666, + 214, 667, 668, 216, 669, 670, 217, 671, 866, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 867, 686, 687, 868, 688, 221, + 689, 690, 691, 692, 693, 869, 694, 222, 223, 870, + 871, 696, 697, 224, 698, 225, 872, 699, 700, 701, + 702, 703, 704, 705, 706, 873, 874, 707, 708, 709, + 710, 711, 875, 876, 712, 713, 714, 715, 716, 877, + 232, 878, 717, 233, 718, 719, 720, 721, 879, 880, + 722, 881, 882, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 793, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 794, 98, 99, 749, 795, 0, 101, 102, + 103, 104, 796, 797, 106, 107, 108, 0, 109, 798, + 799, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 126, 448, 449, 450, 128, + 129, 130, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 1673, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 1676, 0, 1677, 0, 465, 466, + 467, 468, 469, 470, 142, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 145, 479, 480, 0, + 1678, 1679, 1680, 1681, 1682, 1683, 1684, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 1689, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 163, + 0, 164, 527, 528, 529, 530, 0, 531, 1692, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 537, 168, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 170, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 174, 175, 554, 176, + 555, 556, 557, 558, 559, 0, 0, 560, 1696, 178, + 561, 179, 0, 562, 563, 564, 1697, 1698, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 185, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 1701, 586, 0, 587, 588, + 190, 589, 0, 1704, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 194, 601, 195, 1707, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 1708, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 207, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 1711, + 665, 666, 214, 667, 668, 216, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 1713, 685, 0, 686, 687, 0, + 688, 221, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 1716, 698, 1717, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 1720, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 233, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 1722, 1723, 1724, 1725, 240, 1726, 1727, 1728, + 1729, 245, 770, 729, 730, 793, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 794, 98, 99, 749, 795, 0, + 101, 102, 103, 104, 796, 797, 106, 107, 108, 0, + 109, 798, 799, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 429, 0, 0, 37, 0, 38, 39, 0, 1664, 1665, + 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 1669, 130, 1670, 1671, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 1674, 1675, + 460, 0, 461, 462, 463, 464, 138, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 0, 146, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 1685, 1686, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 1498, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 1690, + 520, 0, 521, 522, 523, 1691, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 1501, 1694, 0, 1695, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 1699, 185, 1700, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 190, 589, 1703, 191, 590, 1705, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 1709, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 216, 669, 670, + 1712, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 1714, 1715, 0, 0, 696, 697, 224, 698, 225, + 1718, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 769, 1721, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 793, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 794, 98, 99, 749, + 795, 0, 101, 102, 103, 104, 796, 797, 106, 107, + 108, 0, 109, 798, 799, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 126, + 448, 449, 450, 128, 129, 130, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 139, 0, 465, 466, 467, 468, 469, 470, 142, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 145, 479, 480, 0, 0, 0, 0, 146, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 163, 0, 164, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 168, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 170, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 174, 175, 554, 176, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 178, 561, 179, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 185, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 190, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 194, 601, 195, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 207, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 216, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 221, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 769, 232, 0, 717, 233, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 793, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 794, 98, + 99, 749, 795, 0, 101, 102, 103, 104, 796, 797, + 106, 107, 108, 0, 109, 798, 799, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 126, 448, 449, 450, 128, 129, 130, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 139, 0, 465, 466, 467, 468, 469, 470, + 142, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 145, 479, 480, 0, 0, 0, 0, 146, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 163, 0, 164, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 1484, 168, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 170, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 174, 175, 554, 176, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 178, 561, 179, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 185, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 190, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 194, 601, + 195, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 207, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 216, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 221, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 233, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 793, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 794, 98, 99, 749, 795, 0, 101, 102, 103, 104, + 796, 797, 106, 107, 108, 0, 109, 798, 799, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 126, 448, 449, 450, 128, 129, 130, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 760, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 139, 0, 465, 466, 467, 468, + 469, 470, 142, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 145, 479, 480, 0, 0, 0, + 0, 146, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 163, 0, 164, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 1535, 168, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 170, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 174, 175, 554, 176, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 178, 561, 179, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 185, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 190, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 194, 601, 195, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 207, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 216, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 221, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 769, + 232, 0, 717, 233, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 793, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 794, 98, 99, 749, 795, 0, 101, 102, + 103, 104, 796, 797, 106, 107, 108, 0, 109, 798, + 799, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 126, 448, 449, 450, 128, + 129, 130, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 139, 0, 465, 466, + 467, 468, 469, 470, 142, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 145, 479, 480, 0, + 0, 0, 0, 146, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 163, + 0, 164, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 1549, 168, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 170, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 174, 175, 554, 176, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 178, + 561, 179, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 185, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 190, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 194, 601, 195, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 207, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 216, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 221, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 233, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 793, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 794, 98, 99, 749, 795, 0, + 101, 102, 103, 104, 796, 797, 106, 107, 108, 0, + 109, 798, 799, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 129, 130, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 760, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 0, 146, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 1553, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 184, 185, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 190, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 216, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 769, 232, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 793, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 794, 98, 99, 749, + 795, 0, 101, 102, 103, 104, 796, 797, 106, 107, + 108, 0, 109, 798, 799, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 126, + 448, 449, 450, 0, 1491, 130, 1492, 1493, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 1494, 1495, 460, 0, 461, 462, 463, 464, 0, 0, + 139, 0, 465, 466, 467, 468, 469, 470, 142, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 145, 479, 480, 0, 0, 0, 0, 146, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 1496, 1497, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 1498, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 0, 516, 517, 518, 519, + 0, 0, 520, 0, 521, 522, 523, 1499, 524, 0, + 525, 0, 526, 163, 0, 164, 527, 528, 529, 530, + 0, 531, 0, 0, 0, 532, 533, 0, 534, 535, + 765, 536, 537, 168, 538, 539, 540, 541, 3100, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 170, 3101, + 0, 550, 551, 552, 1501, 1502, 0, 1503, 0, 553, + 174, 175, 554, 176, 555, 556, 557, 558, 559, 0, + 0, 560, 0, 178, 561, 179, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 1504, 185, + 1505, 579, 580, 581, 582, 583, 584, 585, 0, 0, + 586, 0, 587, 588, 190, 589, 0, 0, 590, 1506, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 3103, 194, 601, 195, 0, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 0, 613, 0, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 1507, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 207, 646, 647, 648, 649, 650, 0, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 3104, 667, 668, 216, + 669, 670, 1509, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 0, 685, + 0, 686, 687, 0, 688, 221, 689, 690, 691, 692, + 693, 0, 694, 1510, 1511, 0, 0, 696, 697, 0, + 698, 0, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 0, 1512, 3105, 717, 233, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 770, 729, 730, 793, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 794, 98, + 99, 749, 795, 0, 101, 102, 103, 104, 796, 797, + 106, 107, 108, 0, 109, 798, 799, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 126, 448, 449, 450, 0, 1491, 130, 1492, 1493, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 1494, 1495, 460, 0, 461, 462, 463, 464, + 0, 0, 139, 0, 465, 466, 467, 468, 469, 470, + 142, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 145, 479, 480, 0, 0, 0, 0, 146, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 1496, + 1497, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 1498, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 0, 516, 517, + 518, 519, 0, 0, 520, 0, 521, 522, 523, 1499, + 524, 0, 525, 0, 526, 163, 0, 164, 527, 528, + 529, 530, 0, 531, 0, 0, 0, 532, 533, 0, + 534, 535, 765, 536, 537, 168, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 170, 0, 0, 550, 551, 552, 1501, 1502, 0, 1503, + 0, 553, 174, 175, 554, 176, 555, 556, 557, 558, + 559, 0, 0, 560, 0, 178, 561, 179, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 1504, 185, 1505, 579, 580, 581, 582, 583, 584, 585, + 0, 0, 586, 0, 587, 588, 190, 589, 3188, 0, + 590, 1506, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 0, 194, 601, + 195, 0, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 0, 613, 0, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 1507, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 207, 646, 647, 648, 649, 650, 0, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 3104, 667, + 668, 216, 669, 670, 1509, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 0, 685, 0, 686, 687, 4933, 688, 221, 689, 690, + 691, 692, 693, 0, 694, 1510, 1511, 0, 0, 696, + 697, 0, 698, 0, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 0, 1512, 0, + 717, 233, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 770, 729, + 730, 793, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 794, 98, 99, 749, 795, 0, 101, 102, 103, 104, + 796, 797, 106, 107, 108, 0, 109, 798, 799, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 126, 448, 449, 450, 0, 1491, 130, + 1492, 1493, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 1494, 1495, 460, 0, 461, 462, + 463, 464, 0, 0, 139, 0, 465, 466, 467, 468, + 469, 470, 142, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 145, 479, 480, 0, 0, 0, + 0, 146, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 1496, 1497, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 1498, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 0, + 516, 517, 518, 519, 0, 0, 520, 0, 521, 522, + 523, 1499, 524, 0, 525, 0, 526, 163, 0, 164, + 527, 528, 529, 530, 0, 531, 0, 0, 0, 532, + 533, 0, 534, 535, 765, 536, 537, 168, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 170, 0, 0, 550, 551, 552, 1501, 1502, + 0, 1503, 0, 553, 174, 175, 554, 176, 555, 556, + 557, 558, 559, 0, 0, 560, 0, 178, 561, 179, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 1504, 185, 1505, 579, 580, 581, 582, 583, + 584, 585, 3259, 0, 586, 0, 587, 588, 190, 589, + 0, 0, 590, 1506, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 0, + 194, 601, 195, 0, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 0, 613, 0, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 1507, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 207, 646, 647, 648, 649, + 650, 0, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 1508, 667, 668, 216, 669, 670, 1509, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 0, 685, 0, 686, 687, 0, 688, 221, + 689, 690, 691, 692, 693, 0, 694, 1510, 1511, 0, + 0, 696, 697, 0, 698, 0, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 0, + 1512, 0, 717, 233, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 770, 729, 730, 793, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 794, 98, 99, 749, 795, 0, 101, 102, + 103, 104, 796, 797, 106, 107, 108, 0, 109, 798, + 799, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 126, 448, 449, 450, 0, + 1491, 130, 1492, 1493, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 1494, 1495, 460, 0, + 461, 462, 463, 464, 0, 0, 139, 0, 465, 466, + 467, 468, 469, 470, 142, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 145, 479, 480, 0, + 0, 0, 0, 146, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 1496, 1497, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 1498, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 0, 516, 517, 518, 519, 0, 0, 520, 0, + 521, 522, 523, 1499, 524, 0, 525, 0, 526, 163, + 0, 164, 527, 528, 529, 530, 0, 531, 0, 0, + 0, 532, 533, 0, 534, 535, 765, 536, 537, 168, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 170, 0, 0, 550, 551, 552, + 1501, 1502, 0, 1503, 0, 553, 174, 175, 554, 176, + 555, 556, 557, 558, 559, 0, 0, 560, 0, 178, + 561, 179, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 1504, 185, 1505, 579, 580, 581, + 582, 583, 584, 585, 4737, 0, 586, 0, 587, 588, + 190, 589, 0, 0, 590, 1506, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 0, 194, 601, 195, 0, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 0, 613, + 0, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 1507, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 207, 646, 647, + 648, 649, 650, 0, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 1508, 667, 668, 216, 669, 670, 1509, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 0, 685, 0, 686, 687, 0, + 688, 221, 689, 690, 691, 692, 693, 0, 694, 1510, + 1511, 0, 0, 696, 697, 0, 698, 0, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 0, 1512, 0, 717, 233, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 770, 729, 730, 793, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 794, 98, 99, 749, 795, 0, + 101, 102, 103, 104, 796, 797, 106, 107, 108, 0, + 109, 798, 799, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 0, 1491, 130, 1492, 1493, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 1494, 1495, + 460, 0, 461, 462, 463, 464, 0, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 0, 146, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 1496, 1497, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 1498, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 0, 516, 517, 518, 519, 0, 0, + 520, 0, 521, 522, 523, 1499, 524, 6374, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 0, 0, 0, 532, 533, 0, 534, 535, 765, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 0, 0, 550, + 551, 552, 1501, 1502, 0, 1503, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 0, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 1504, 185, 1505, 579, + 580, 581, 582, 583, 584, 585, 0, 0, 586, 0, + 587, 588, 190, 589, 0, 0, 590, 1506, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 0, 194, 601, 195, 0, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 0, 613, 0, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 1507, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 0, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 1508, 667, 668, 216, 669, 670, + 1509, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 0, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 1510, 1511, 0, 0, 696, 697, 0, 698, 0, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 0, 1512, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 770, 729, 730, 793, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 794, 98, 99, 749, + 795, 0, 101, 102, 103, 104, 796, 797, 106, 107, + 108, 0, 109, 798, 799, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 126, + 448, 449, 450, 0, 1491, 130, 1492, 1493, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 1494, 1495, 460, 0, 461, 462, 463, 464, 0, 0, + 139, 0, 465, 466, 467, 468, 469, 470, 142, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 145, 479, 480, 0, 0, 0, 0, 146, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 1496, 1497, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 1498, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 0, 516, 517, 518, 519, + 0, 0, 520, 0, 521, 522, 523, 1499, 524, 0, + 525, 0, 526, 163, 0, 164, 527, 528, 529, 530, + 0, 531, 0, 0, 0, 532, 533, 0, 534, 535, + 765, 536, 1500, 168, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 170, 0, + 0, 550, 551, 552, 1501, 1502, 0, 1503, 0, 553, + 174, 175, 554, 176, 555, 556, 557, 558, 559, 0, + 0, 560, 0, 178, 561, 179, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 1504, 185, + 1505, 579, 580, 581, 582, 583, 584, 585, 0, 0, + 586, 0, 587, 588, 190, 589, 0, 0, 590, 1506, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 0, 194, 601, 195, 0, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 0, 613, 0, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 1507, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 207, 646, 647, 648, 649, 650, 0, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 1508, 667, 668, 216, + 669, 670, 1509, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 0, 685, + 0, 686, 687, 0, 688, 221, 689, 690, 691, 692, + 693, 0, 694, 1510, 1511, 0, 0, 696, 697, 0, + 698, 0, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 0, 1512, 0, 717, 233, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 770, 729, 730, 793, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 794, 98, + 99, 749, 795, 0, 101, 102, 103, 104, 796, 797, + 106, 107, 108, 0, 109, 798, 799, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 126, 448, 449, 450, 0, 1491, 130, 1492, 1493, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 1494, 1495, 460, 0, 461, 462, 463, 464, + 0, 0, 139, 0, 465, 466, 467, 468, 469, 470, + 142, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 145, 479, 480, 0, 0, 0, 0, 146, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 1496, + 1497, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 1498, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 0, 516, 517, + 518, 519, 0, 0, 520, 0, 521, 522, 523, 1499, + 524, 0, 525, 0, 526, 163, 0, 164, 527, 528, + 529, 530, 0, 531, 0, 0, 0, 532, 533, 0, + 534, 535, 765, 536, 1561, 168, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 170, 0, 0, 550, 551, 552, 1501, 1502, 0, 1503, + 0, 553, 174, 175, 554, 176, 555, 556, 557, 558, + 559, 0, 0, 560, 0, 178, 561, 179, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 1504, 185, 1505, 579, 580, 581, 582, 583, 584, 585, + 0, 0, 586, 0, 587, 588, 190, 589, 0, 0, + 590, 1506, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 0, 194, 601, + 195, 0, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 0, 613, 0, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 1507, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 207, 646, 647, 648, 649, 650, 0, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 1508, 667, + 668, 216, 669, 670, 1509, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 0, 685, 0, 686, 687, 0, 688, 221, 689, 690, + 691, 692, 693, 0, 694, 1510, 1511, 0, 0, 696, + 697, 0, 698, 0, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 0, 1512, 0, + 717, 233, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 770, 729, + 730, 793, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 794, 98, 99, 749, 795, 0, 101, 102, 103, 104, + 796, 797, 106, 107, 108, 0, 109, 798, 799, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 126, 448, 449, 450, 0, 1491, 130, + 1492, 1493, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 1494, 1495, 460, 0, 461, 462, + 463, 464, 0, 0, 139, 0, 465, 466, 467, 468, + 469, 470, 142, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 145, 479, 480, 0, 0, 0, + 0, 146, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 1496, 1497, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 1498, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 0, + 516, 517, 518, 519, 0, 0, 520, 0, 521, 522, + 523, 1499, 524, 0, 525, 0, 526, 163, 0, 164, + 527, 528, 529, 530, 0, 531, 0, 0, 0, 532, + 533, 0, 534, 535, 765, 536, 537, 168, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 170, 0, 0, 550, 551, 552, 1501, 1502, + 0, 1503, 0, 553, 174, 175, 554, 176, 555, 556, + 557, 558, 559, 0, 0, 560, 0, 178, 561, 179, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 1504, 185, 1505, 579, 580, 581, 582, 583, + 584, 585, 0, 0, 586, 0, 587, 588, 190, 589, + 0, 0, 590, 1506, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 0, + 194, 601, 195, 0, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 0, 613, 0, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 1507, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 207, 646, 647, 648, 649, + 650, 0, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 1508, 667, 668, 216, 669, 670, 1509, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 0, 685, 0, 686, 687, 0, 688, 221, + 689, 690, 691, 692, 693, 0, 694, 1510, 1511, 0, + 0, 696, 697, 0, 698, 0, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 0, + 1512, 0, 717, 233, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 770, 729, 730, 793, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 794, 98, 99, 749, 795, 0, 101, 102, + 103, 104, 796, 797, 106, 107, 108, 0, 109, 798, + 799, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 126, 448, 449, 450, 0, + 1491, 130, 1492, 1493, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 1494, 1495, 460, 0, + 461, 462, 463, 464, 0, 0, 139, 0, 465, 466, + 467, 468, 469, 470, 142, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 145, 479, 480, 0, + 0, 0, 0, 146, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 1496, 1497, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 1498, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 0, 516, 517, 518, 519, 0, 0, 520, 0, + 521, 522, 523, 1499, 524, 0, 525, 0, 526, 163, + 0, 164, 527, 528, 529, 530, 0, 531, 0, 0, + 0, 532, 533, 0, 534, 535, 765, 536, 537, 168, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 170, 0, 0, 550, 551, 552, + 1501, 1502, 0, 1503, 0, 553, 174, 175, 554, 176, + 555, 556, 557, 558, 559, 0, 0, 560, 0, 178, + 561, 179, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 1504, 185, 1505, 579, 580, 581, + 582, 583, 584, 585, 0, 0, 586, 0, 587, 588, + 190, 589, 0, 0, 590, 1506, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 0, 194, 601, 195, 0, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 0, 613, + 0, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 1507, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 207, 646, 647, + 648, 649, 650, 0, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 3104, 667, 668, 216, 669, 670, 1509, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 0, 685, 0, 686, 687, 0, + 688, 221, 689, 690, 691, 692, 693, 0, 694, 1510, + 1511, 0, 0, 696, 697, 0, 698, 0, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 0, 1512, 0, 717, 233, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 770, 729, 730, 793, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 794, 98, 99, 749, 795, 0, + 101, 102, 103, 104, 796, 797, 106, 107, 108, 0, + 109, 798, 799, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 0, 1491, 130, 1492, 1493, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 1494, 1495, + 460, 0, 461, 462, 463, 464, 0, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 0, 146, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 1496, 1497, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 1498, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 0, 516, 517, 518, 519, 0, 0, + 520, 0, 521, 522, 523, 1499, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 0, 0, 0, 532, 533, 0, 534, 535, 765, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 0, 0, 550, + 551, 552, 1501, 1502, 0, 1503, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 0, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 1504, 185, 1505, 579, + 580, 581, 582, 583, 584, 585, 0, 0, 586, 0, + 587, 588, 190, 589, 0, 0, 590, 1506, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 0, 194, 601, 195, 0, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 0, 613, 0, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 1507, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 0, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 0, 667, 668, 216, 669, 670, + 1509, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 0, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 1510, 1511, 0, 0, 696, 697, 0, 698, 0, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 0, 1512, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 770, 729, 730, 793, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 794, 98, 99, 749, + 795, 0, 101, 102, 103, 104, 796, 797, 106, 107, + 108, 0, 109, 798, 799, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 126, + 448, 449, 450, 0, 0, 130, 0, 0, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 0, 0, 460, 0, 461, 462, 463, 464, 0, 0, + 139, 0, 465, 466, 467, 468, 469, 470, 142, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 145, 479, 480, 0, 0, 0, 0, 146, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 0, 0, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 0, 516, 517, 518, 519, + 0, 0, 520, 0, 521, 522, 523, 0, 524, 0, + 525, 0, 526, 163, 0, 164, 527, 528, 529, 530, + 0, 531, 0, 0, 0, 532, 533, 0, 534, 535, + 765, 536, 537, 168, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 170, 0, + 0, 550, 551, 552, 0, 0, 0, 0, 0, 553, + 174, 175, 554, 176, 555, 556, 557, 558, 559, 0, + 0, 560, 0, 178, 561, 179, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 0, 185, + 0, 579, 580, 581, 582, 583, 584, 585, 0, 0, + 586, 0, 587, 588, 190, 589, 0, 0, 590, 0, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 0, 194, 601, 195, 0, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 0, 613, 0, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 0, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 207, 646, 647, 648, 649, 650, 0, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 0, 667, 668, 216, + 669, 670, 0, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 0, 685, + 0, 686, 687, 0, 688, 221, 689, 690, 691, 692, + 693, 0, 694, 0, 0, 0, 0, 696, 697, 0, + 698, 0, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 0, 0, 0, 717, 233, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 770, 729, 730, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 749, 0, 0, 101, 102, 103, 104, 0, 0, 106, + 107, 108, 0, 109, 0, 0, 750, 751, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 35, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 800, 438, 439, 440, 801, 802, 803, 804, 805, + 806, 807, 441, 442, 443, 808, 444, 445, 446, 447, + 126, 448, 449, 450, 128, 129, 130, 131, 132, 809, + 451, 452, 453, 454, 455, 456, 457, 810, 811, 458, + 459, 0, 134, 460, 813, 461, 462, 463, 464, 138, + 814, 139, 815, 465, 466, 467, 468, 469, 470, 142, + 471, 472, 816, 817, 473, 474, 475, 476, 477, 478, + 818, 145, 479, 480, 0, 820, 821, 822, 146, 823, + 824, 825, 483, 484, 485, 486, 0, 487, 149, 150, + 488, 826, 489, 827, 490, 491, 492, 493, 494, 495, + 496, 828, 497, 498, 499, 500, 829, 830, 501, 502, + 503, 504, 505, 831, 506, 507, 508, 832, 509, 510, + 511, 833, 512, 513, 514, 515, 158, 516, 517, 518, + 519, 160, 834, 520, 835, 521, 522, 523, 162, 524, + 836, 525, 837, 526, 163, 838, 164, 527, 528, 529, + 530, 839, 531, 166, 840, 167, 532, 533, 841, 534, + 535, 0, 536, 537, 168, 538, 539, 540, 541, 842, + 542, 543, 544, 545, 546, 547, 548, 843, 549, 170, + 171, 0, 550, 551, 552, 0, 172, 846, 173, 847, + 553, 174, 175, 554, 176, 555, 556, 557, 558, 559, + 848, 849, 560, 177, 178, 561, 179, 850, 562, 563, + 564, 851, 852, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 0, 574, 575, 0, 576, 577, 578, 184, + 185, 186, 579, 580, 581, 582, 583, 584, 585, 187, + 188, 586, 853, 587, 588, 190, 589, 854, 191, 590, + 192, 591, 592, 593, 855, 594, 595, 856, 857, 596, + 597, 598, 858, 859, 599, 600, 193, 194, 601, 195, + 196, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 860, 611, 612, 197, 613, 198, 614, 615, 616, 861, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 200, 627, 628, 629, 630, 862, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 863, + 644, 645, 207, 646, 647, 648, 649, 650, 209, 651, + 652, 653, 654, 655, 656, 657, 0, 658, 864, 659, + 660, 661, 662, 663, 865, 665, 666, 214, 667, 668, + 216, 669, 670, 217, 671, 866, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 219, + 685, 867, 686, 687, 868, 688, 221, 689, 690, 691, + 692, 693, 869, 694, 222, 223, 0, 871, 696, 697, + 224, 698, 225, 872, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 874, 707, 708, 709, 710, 711, 875, + 876, 712, 713, 714, 715, 716, 0, 232, 878, 717, + 233, 718, 719, 720, 721, 879, 880, 722, 881, 882, + 723, 724, 725, 726, 727, 728, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 0, 729, 730, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 3140, 461, 462, 463, 464, + 138, 0, 0, 3209, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 3141, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 3210, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 3143, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 3211, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 3144, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 3145, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 3140, 461, 462, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 761, 3141, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 3210, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 3143, 526, 0, 0, 0, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 4220, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 3144, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 0, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 3145, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 0, 98, 99, 749, 0, 0, 101, 102, 103, 104, + 0, 0, 106, 107, 108, 0, 109, 0, 0, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 1156, 436, 437, 1108, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 0, 448, 449, 450, 128, 129, 0, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 760, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 0, 0, 465, 466, 467, 468, + 469, 470, 0, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 1109, 0, 479, 480, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 0, 0, 0, + 527, 528, 529, 530, 1157, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 537, 0, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 0, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 0, 0, 554, 0, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 0, 561, 0, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 0, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 0, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 0, 601, 0, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 1110, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 0, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 1111, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 0, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 0, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 769, + 232, 0, 717, 0, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 1108, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 760, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 1109, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 3913, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 537, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 1110, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 1111, 659, 660, 661, 662, 663, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 0, 0, 696, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 769, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 3140, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 3141, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 3210, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 3143, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 537, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 3144, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 3145, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 749, 0, 0, 101, + 102, 103, 104, 0, 0, 106, 107, 108, 0, 109, + 0, 0, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 429, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 759, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 0, 448, 449, 450, + 128, 129, 0, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 760, 134, 460, + 0, 461, 462, 463, 464, 138, 0, 0, 0, 465, + 466, 467, 468, 469, 470, 0, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 0, 479, 480, + 762, 0, 0, 0, 0, 0, 0, 0, 483, 484, + 485, 486, 763, 487, 149, 150, 488, 764, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 0, 520, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 0, 0, 0, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 765, 536, 537, + 0, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 0, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 0, 0, 554, + 0, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 0, 561, 0, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 184, 0, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 0, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 0, 0, 596, 597, 598, 0, 0, + 599, 600, 193, 0, 601, 0, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 0, 646, + 647, 648, 649, 650, 209, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 0, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 0, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 0, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 769, 232, 0, 717, 0, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 770, 729, 730, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 749, 0, 0, + 101, 102, 103, 104, 0, 0, 106, 107, 108, 0, + 109, 0, 0, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 1108, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 0, 448, 449, + 450, 128, 129, 0, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 760, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 0, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 1109, 0, 479, + 480, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 0, 0, 0, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 537, 0, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 0, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 0, 0, + 554, 0, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 0, 561, 0, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 184, 0, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 0, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 0, 601, 0, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 1110, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 0, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 1111, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 0, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 0, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 769, 232, 0, 717, 0, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 81, 82, 746, + 84, 85, 86, 747, 1007, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 0, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 429, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 1008, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 760, + 134, 460, 0, 461, 462, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 520, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 537, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 1009, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 646, 647, 648, 649, 650, 209, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 769, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 429, 0, 0, 37, 0, 0, 39, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 1261, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 769, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 749, 0, 0, 101, 102, 103, 104, 0, 0, 106, + 107, 108, 0, 109, 0, 0, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 2388, 438, 439, 440, 0, 0, 0, 0, 0, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 0, 448, 449, 450, 128, 129, 0, 131, 132, 0, + 451, 452, 453, 454, 455, 456, 457, 0, 0, 458, + 459, 760, 134, 460, 0, 461, 462, 463, 464, 138, + 0, 0, 0, 465, 466, 467, 468, 469, 470, 0, + 471, 472, 761, 0, 473, 474, 475, 476, 477, 478, + 0, 0, 479, 480, 0, 0, 0, 0, 0, 0, + 0, 0, 483, 484, 485, 2389, 763, 487, 149, 150, + 488, 0, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 2390, + 503, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 158, 516, 517, 518, + 519, 160, 0, 520, 0, 521, 522, 523, 162, 524, + 0, 525, 2391, 526, 0, 0, 0, 2392, 528, 529, + 530, 0, 531, 166, 0, 167, 532, 533, 0, 534, + 535, 765, 536, 537, 0, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 0, + 171, 0, 550, 551, 552, 0, 172, 0, 173, 0, + 553, 0, 0, 554, 0, 555, 556, 2393, 2394, 559, + 0, 0, 560, 177, 0, 561, 0, 0, 562, 563, + 564, 0, 0, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 184, + 0, 186, 579, 580, 581, 582, 583, 584, 585, 187, + 188, 586, 0, 587, 588, 0, 589, 0, 191, 590, + 192, 591, 592, 593, 0, 594, 595, 0, 0, 596, + 597, 598, 0, 0, 599, 600, 193, 0, 601, 0, + 196, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 197, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 2395, 621, 622, 623, 624, 625, 626, + 200, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 0, 646, 647, 648, 2396, 650, 209, 651, + 652, 653, 2397, 655, 656, 657, 768, 658, 0, 2398, + 660, 661, 662, 663, 0, 665, 666, 214, 667, 668, + 0, 669, 670, 217, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 219, + 685, 0, 686, 687, 2399, 688, 0, 2400, 690, 691, + 692, 693, 0, 694, 222, 223, 0, 0, 696, 697, + 224, 698, 225, 0, 699, 700, 2401, 702, 703, 704, + 705, 706, 0, 0, 707, 708, 709, 710, 711, 0, + 0, 712, 713, 714, 715, 716, 769, 232, 0, 717, + 0, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 770, 729, 730, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 1109, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 537, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 1110, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 1111, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 81, 82, 746, 84, 85, 86, 747, 2377, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 429, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 0, 0, 0, 527, + 528, 529, 3773, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 0, 0, + 562, 563, 3774, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 3078, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 3775, 688, 0, 689, + 3776, 691, 3777, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 3778, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 0, 98, 99, 749, 0, 0, 101, 102, 103, 104, + 0, 0, 106, 107, 108, 0, 109, 0, 0, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 429, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 786, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 0, 448, 449, 450, 128, 129, 0, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 760, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 0, 0, 465, 466, 467, 468, + 469, 470, 0, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 0, 479, 480, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 0, 0, 0, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 537, 0, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 0, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 0, 0, 554, 0, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 0, 561, 0, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 0, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 0, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 0, 601, 0, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 0, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 0, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 0, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 769, + 232, 0, 717, 0, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 429, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 760, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 764, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 537, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 0, 0, 696, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 769, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 429, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 954, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 537, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 749, 0, 0, 101, + 102, 103, 104, 0, 0, 106, 107, 108, 0, 109, + 0, 0, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 429, + 0, 0, 37, 0, 0, 39, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 0, 448, 449, 450, + 128, 129, 0, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 760, 134, 460, + 0, 461, 462, 463, 464, 138, 0, 0, 0, 465, + 466, 467, 468, 469, 470, 0, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 0, 479, 480, + 0, 0, 0, 0, 0, 0, 0, 0, 483, 484, + 485, 486, 763, 487, 149, 150, 488, 0, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 0, 520, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 0, 0, 0, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 765, 536, 537, + 0, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 0, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 0, 0, 554, + 0, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 0, 561, 0, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 184, 0, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 0, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 0, 0, 596, 597, 598, 0, 0, + 599, 600, 193, 0, 601, 0, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 0, 646, + 647, 648, 649, 650, 209, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 0, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 0, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 0, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 769, 232, 0, 717, 0, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 770, 729, 730, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 749, 0, 0, + 101, 102, 103, 104, 0, 0, 106, 107, 108, 0, + 109, 0, 0, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 1351, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 0, 448, 449, + 450, 128, 129, 0, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 760, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 0, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 0, 479, + 480, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 0, 0, 0, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 1352, 0, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 0, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 0, 0, + 554, 0, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 0, 561, 0, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 184, 0, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 0, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 1191, 596, 597, 598, 0, + 0, 599, 600, 193, 0, 601, 0, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 0, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 0, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 0, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 769, 232, 0, 717, 0, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 0, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 429, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 1474, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 760, + 134, 460, 0, 461, 462, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 520, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 537, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 646, 647, 648, 649, 650, 209, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 769, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 3992, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 3993, 0, + 712, 713, 714, 715, 716, 769, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 749, 0, 0, 101, 102, 103, 104, 0, 0, 106, + 107, 108, 0, 109, 0, 0, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 4005, 438, 439, 440, 0, 0, 0, 0, 0, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 0, 448, 449, 450, 128, 129, 0, 131, 132, 0, + 451, 452, 453, 454, 455, 456, 457, 0, 0, 458, + 459, 760, 134, 460, 0, 461, 462, 463, 464, 138, + 0, 0, 0, 465, 466, 467, 468, 469, 470, 0, + 471, 472, 761, 0, 473, 474, 475, 476, 477, 478, + 0, 0, 479, 480, 0, 0, 0, 0, 0, 0, + 0, 0, 483, 484, 485, 486, 763, 487, 149, 150, + 488, 0, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 503, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 158, 516, 517, 518, + 519, 160, 0, 520, 0, 521, 522, 523, 162, 524, + 0, 525, 0, 526, 0, 0, 0, 527, 528, 529, + 530, 0, 531, 166, 0, 167, 532, 533, 0, 534, + 535, 765, 536, 537, 0, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 0, + 171, 0, 550, 551, 552, 0, 172, 0, 173, 0, + 553, 0, 0, 554, 0, 555, 556, 557, 558, 559, + 0, 0, 560, 177, 0, 561, 0, 0, 562, 563, + 564, 0, 0, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 184, + 0, 186, 579, 580, 581, 582, 583, 584, 585, 187, + 188, 586, 0, 587, 588, 0, 589, 0, 191, 590, + 192, 591, 592, 593, 0, 594, 595, 0, 0, 596, + 597, 598, 0, 0, 599, 600, 193, 0, 601, 0, + 196, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 197, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 200, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 0, 646, 647, 648, 649, 650, 209, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 663, 0, 665, 666, 214, 667, 668, + 0, 669, 670, 217, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 219, + 685, 0, 686, 687, 0, 688, 0, 689, 690, 691, + 692, 693, 0, 694, 222, 223, 0, 0, 696, 697, + 224, 698, 225, 0, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 0, 707, 708, 709, 710, 711, 4006, + 0, 712, 713, 714, 715, 716, 769, 232, 0, 717, + 0, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 770, 729, 730, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 429, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 537, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 429, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 0, 0, 0, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 0, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 1013, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 0, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 0, 98, 99, 749, 0, 0, 101, 102, 103, 104, + 0, 0, 106, 107, 108, 0, 109, 0, 0, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 429, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 0, 448, 449, 450, 128, 129, 0, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 760, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 0, 0, 465, 466, 467, 468, + 469, 470, 0, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 0, 479, 480, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 0, 0, 0, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 537, 0, 1070, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 0, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 0, 0, 554, 0, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 0, 561, 0, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 0, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 0, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 0, 601, 0, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 0, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 0, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 0, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 769, + 232, 0, 717, 0, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 429, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 760, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 537, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 0, 0, 1126, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 769, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 537, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 1191, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 749, 0, 0, 101, + 102, 103, 104, 0, 0, 106, 107, 108, 0, 109, + 0, 0, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 1308, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 0, 448, 449, 450, + 128, 129, 0, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 760, 134, 460, + 0, 461, 462, 463, 464, 138, 0, 0, 0, 465, + 466, 467, 468, 469, 470, 0, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 0, 479, 480, + 0, 0, 0, 0, 0, 0, 0, 0, 483, 484, + 485, 486, 763, 487, 149, 150, 488, 0, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 0, 520, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 0, 0, 0, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 765, 536, 1309, + 0, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 0, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 0, 0, 554, + 0, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 0, 561, 0, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 184, 0, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 0, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 0, 0, 596, 597, 598, 0, 0, + 599, 600, 193, 0, 601, 0, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 0, 646, + 647, 648, 649, 650, 209, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 0, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 0, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 0, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 769, 232, 0, 717, 0, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 770, 729, 730, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 749, 0, 0, + 101, 102, 103, 104, 0, 0, 106, 107, 108, 0, + 109, 0, 0, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 1780, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 0, 448, 449, + 450, 128, 129, 0, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 760, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 0, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 0, 479, + 480, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 0, 0, 0, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 537, 0, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 0, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 0, 0, + 554, 0, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 0, 561, 0, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 184, 0, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 0, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 0, 601, 0, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 0, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 0, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 0, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 769, 232, 0, 717, 0, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 0, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 760, + 134, 460, 0, 461, 462, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 520, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 1963, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 1191, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 646, 647, 648, 649, 650, 209, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 769, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 2020, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 2021, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 769, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 749, 0, 0, 101, 102, 103, 104, 0, 0, 106, + 107, 108, 0, 109, 0, 0, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 0, 0, 2250, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 0, 438, 439, 440, 0, 0, 0, 0, 0, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 0, 448, 449, 450, 128, 129, 0, 131, 132, 0, + 451, 452, 453, 454, 455, 456, 457, 0, 0, 458, + 459, 760, 134, 460, 0, 461, 462, 463, 464, 138, + 0, 0, 0, 465, 466, 467, 468, 469, 470, 0, + 471, 472, 761, 0, 473, 474, 475, 476, 477, 478, + 0, 0, 479, 480, 0, 0, 0, 0, 0, 0, + 0, 0, 483, 484, 485, 486, 763, 487, 149, 150, + 488, 0, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 503, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 158, 516, 517, 518, + 519, 160, 0, 520, 0, 521, 522, 523, 162, 524, + 0, 525, 0, 526, 0, 0, 0, 527, 528, 529, + 530, 0, 531, 166, 0, 167, 532, 533, 0, 534, + 535, 765, 536, 537, 0, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 0, + 171, 0, 550, 551, 552, 0, 172, 0, 173, 0, + 553, 0, 0, 554, 0, 555, 556, 557, 558, 559, + 0, 0, 560, 177, 0, 561, 0, 0, 562, 563, + 564, 0, 0, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 184, + 0, 186, 579, 580, 581, 582, 583, 584, 585, 187, + 188, 586, 0, 587, 588, 0, 589, 0, 191, 590, + 192, 591, 592, 593, 0, 594, 595, 0, 0, 596, + 597, 598, 0, 0, 599, 600, 193, 0, 601, 0, + 196, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 197, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 200, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 0, 646, 647, 648, 649, 650, 209, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 663, 0, 665, 666, 214, 667, 668, + 0, 669, 670, 217, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 219, + 685, 0, 686, 687, 0, 688, 0, 689, 690, 691, + 692, 693, 0, 694, 222, 223, 0, 0, 696, 697, + 224, 698, 225, 0, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 0, 707, 708, 709, 710, 711, 0, + 0, 712, 713, 714, 715, 716, 769, 232, 0, 717, + 0, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 770, 729, 730, + 81, 82, 746, 84, 85, 86, 747, 2377, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 537, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 3078, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 0, 0, 0, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 0, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 0, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 0, 98, 99, 749, 0, 0, 101, 102, 103, 104, + 0, 0, 106, 107, 108, 0, 109, 0, 0, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 0, 448, 449, 450, 128, 129, 0, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 760, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 0, 0, 465, 466, 467, 468, + 469, 470, 0, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 0, 479, 480, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 0, 0, 0, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 537, 0, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 0, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 0, 0, 554, 0, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 0, 561, 0, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 0, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 0, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 0, 601, 0, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 0, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 0, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 0, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 769, + 232, 0, 717, 0, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 5116, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 760, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 537, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 0, 0, 696, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 769, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 5130, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 537, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 749, 0, 0, 101, + 102, 103, 104, 0, 0, 106, 107, 108, 0, 109, + 0, 0, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 0, 448, 449, 450, + 128, 129, 0, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 760, 134, 460, + 0, 461, 462, 463, 464, 138, 0, 0, 0, 465, + 466, 467, 468, 469, 470, 0, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 0, 479, 480, + 0, 0, 0, 0, 0, 0, 0, 0, 483, 484, + 485, 486, 763, 487, 149, 150, 488, 5225, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 0, 520, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 0, 0, 0, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 765, 536, 537, + 0, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 0, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 0, 0, 554, + 0, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 0, 561, 0, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 184, 0, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 0, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 0, 0, 596, 597, 598, 0, 0, + 599, 600, 193, 0, 601, 0, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 0, 646, + 647, 648, 649, 650, 209, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 0, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 0, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 0, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 769, 232, 0, 717, 0, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 770, 729, 730, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 749, 0, 0, + 101, 102, 103, 104, 0, 0, 106, 107, 108, 0, + 109, 0, 0, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 0, 448, 449, + 450, 128, 129, 0, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 760, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 0, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 0, 479, + 480, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 0, 0, 0, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 537, 0, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 0, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 0, 0, + 554, 0, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 0, 561, 0, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 184, 0, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 0, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 0, 601, 0, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 0, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 0, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 0, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 769, 232, 0, 717, 0, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 0, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 760, + 134, 460, 0, 461, 462, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 520, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 537, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 646, 647, 648, 649, 650, 209, 651, 652, 1138, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 769, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 1140, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 1141, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 0, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 1142, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 1143, 223, 0, 0, 1144, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 1145, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 749, 0, 0, 101, 102, 103, 104, 0, 0, 106, + 107, 108, 0, 109, 0, 0, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 1185, 438, 439, 440, 0, 0, 0, 0, 0, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 0, 448, 449, 450, 128, 129, 0, 131, 132, 0, + 451, 452, 453, 454, 455, 456, 457, 0, 0, 458, + 459, 1141, 134, 460, 0, 461, 462, 463, 464, 138, + 0, 0, 0, 465, 466, 467, 468, 469, 470, 0, + 471, 472, 0, 0, 473, 474, 475, 476, 477, 478, + 0, 0, 479, 480, 0, 0, 0, 0, 0, 0, + 0, 0, 483, 484, 485, 486, 763, 487, 149, 150, + 488, 0, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 503, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 158, 516, 517, 518, + 519, 160, 0, 520, 0, 521, 522, 523, 162, 524, + 0, 525, 0, 526, 0, 0, 0, 527, 528, 529, + 530, 0, 531, 166, 0, 167, 532, 533, 0, 534, + 535, 765, 536, 537, 0, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 0, + 171, 0, 550, 551, 552, 0, 172, 0, 173, 0, + 553, 0, 0, 554, 0, 555, 556, 557, 558, 559, + 0, 0, 560, 177, 0, 561, 0, 0, 562, 563, + 564, 0, 0, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 184, + 0, 186, 579, 580, 581, 582, 583, 584, 585, 187, + 188, 586, 0, 587, 588, 0, 589, 0, 191, 590, + 192, 591, 592, 593, 0, 594, 595, 0, 0, 596, + 597, 598, 0, 0, 599, 600, 193, 0, 601, 0, + 196, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 197, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 200, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 0, 646, 647, 648, 649, 650, 209, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 1186, 0, 665, 666, 214, 667, 668, + 0, 669, 670, 217, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 219, + 685, 0, 686, 687, 0, 688, 0, 689, 690, 691, + 692, 693, 0, 694, 1187, 223, 0, 0, 1188, 697, + 224, 698, 225, 0, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 0, 707, 708, 709, 710, 711, 0, + 0, 712, 713, 714, 715, 716, 1145, 232, 0, 717, + 0, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 770, 729, 730, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 537, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 1204, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 0, 0, 0, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 1333, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 0, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 0, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 0, 98, 99, 749, 0, 0, 101, 102, 103, 104, + 0, 0, 106, 107, 108, 0, 109, 0, 0, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 0, 448, 449, 450, 128, 129, 0, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 760, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 0, 0, 465, 466, 467, 468, + 469, 470, 0, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 0, 479, 480, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 0, 0, 0, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 1343, 0, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 0, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 0, 0, 554, 0, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 0, 561, 0, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 0, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 0, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 0, 601, 0, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 0, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 0, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 0, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 769, + 232, 0, 717, 0, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 760, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 1346, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 0, 0, 696, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 769, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 1362, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 749, 0, 0, 101, + 102, 103, 104, 0, 0, 106, 107, 108, 0, 109, + 0, 0, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 0, 448, 449, 450, + 128, 129, 0, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 760, 134, 460, + 0, 461, 462, 463, 464, 138, 0, 0, 0, 465, + 466, 467, 468, 469, 470, 0, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 0, 479, 480, + 0, 0, 0, 0, 0, 0, 0, 0, 483, 484, + 485, 486, 763, 487, 149, 150, 488, 0, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 0, 520, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 0, 0, 0, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 765, 536, 1418, + 0, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 0, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 0, 0, 554, + 0, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 0, 561, 0, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 184, 0, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 0, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 0, 0, 596, 597, 598, 0, 0, + 599, 600, 193, 0, 601, 0, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 0, 646, + 647, 648, 649, 650, 209, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 0, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 0, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 0, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 769, 232, 0, 717, 0, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 770, 729, 730, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 749, 0, 0, + 101, 102, 103, 104, 0, 0, 106, 107, 108, 0, + 109, 0, 0, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 0, 448, 449, + 450, 128, 129, 0, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 760, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 0, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 0, 479, + 480, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 0, 0, 0, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 1423, 0, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 0, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 0, 0, + 554, 0, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 0, 561, 0, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 184, 0, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 0, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 0, 601, 0, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 0, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 0, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 0, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 769, 232, 0, 717, 0, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 0, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 760, + 134, 460, 0, 461, 462, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 520, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 1439, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 646, 647, 648, 649, 650, 209, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 769, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 1442, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 769, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 749, 0, 0, 101, 102, 103, 104, 0, 0, 106, + 107, 108, 0, 109, 0, 0, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 0, 438, 439, 440, 0, 0, 0, 0, 0, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 0, 448, 449, 450, 128, 129, 0, 131, 132, 0, + 451, 452, 453, 454, 455, 456, 457, 0, 0, 458, + 459, 760, 134, 460, 0, 461, 462, 463, 464, 138, + 0, 0, 0, 465, 466, 467, 468, 469, 470, 0, + 471, 472, 761, 0, 473, 474, 475, 476, 477, 478, + 0, 0, 479, 480, 0, 0, 0, 0, 0, 0, + 0, 0, 483, 484, 485, 486, 763, 487, 149, 150, + 488, 0, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 503, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 158, 516, 517, 518, + 519, 160, 0, 520, 0, 521, 522, 523, 162, 524, + 0, 525, 0, 526, 0, 0, 0, 527, 528, 529, + 530, 0, 531, 166, 0, 167, 532, 533, 0, 534, + 535, 765, 536, 1444, 0, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 0, + 171, 0, 550, 551, 552, 0, 172, 0, 173, 0, + 553, 0, 0, 554, 0, 555, 556, 557, 558, 559, + 0, 0, 560, 177, 0, 561, 0, 0, 562, 563, + 564, 0, 0, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 184, + 0, 186, 579, 580, 581, 582, 583, 584, 585, 187, + 188, 586, 0, 587, 588, 0, 589, 0, 191, 590, + 192, 591, 592, 593, 0, 594, 595, 0, 0, 596, + 597, 598, 0, 0, 599, 600, 193, 0, 601, 0, + 196, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 197, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 200, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 0, 646, 647, 648, 649, 650, 209, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 663, 0, 665, 666, 214, 667, 668, + 0, 669, 670, 217, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 219, + 685, 0, 686, 687, 0, 688, 0, 689, 690, 691, + 692, 693, 0, 694, 222, 223, 0, 0, 696, 697, + 224, 698, 225, 0, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 0, 707, 708, 709, 710, 711, 0, + 0, 712, 713, 714, 715, 716, 769, 232, 0, 717, + 0, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 770, 729, 730, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 1489, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 0, 0, 0, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 1555, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 0, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 0, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 0, 98, 99, 749, 0, 0, 101, 102, 103, 104, + 0, 0, 106, 107, 108, 0, 109, 0, 0, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 0, 448, 449, 450, 128, 129, 0, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 760, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 0, 0, 465, 466, 467, 468, + 469, 470, 0, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 0, 479, 480, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 0, 0, 0, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 1557, 0, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 0, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 0, 0, 554, 0, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 0, 561, 0, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 0, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 0, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 0, 601, 0, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 0, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 0, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 0, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 769, + 232, 0, 717, 0, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 760, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 1567, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 0, 0, 696, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 769, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 1570, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 749, 0, 0, 101, + 102, 103, 104, 0, 0, 106, 107, 108, 0, 109, + 0, 0, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 0, 448, 449, 450, + 128, 129, 0, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 760, 134, 460, + 0, 461, 462, 463, 464, 138, 0, 0, 0, 465, + 466, 467, 468, 469, 470, 0, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 0, 479, 480, + 0, 0, 0, 0, 0, 0, 0, 0, 483, 484, + 485, 486, 763, 487, 149, 150, 488, 0, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 0, 520, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 0, 0, 0, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 765, 536, 1573, + 0, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 0, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 0, 0, 554, + 0, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 0, 561, 0, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 184, 0, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 0, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 0, 0, 596, 597, 598, 0, 0, + 599, 600, 193, 0, 601, 0, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 0, 646, + 647, 648, 649, 650, 209, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 0, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 0, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 0, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 769, 232, 0, 717, 0, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 770, 729, 730, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 749, 0, 0, + 101, 102, 103, 104, 0, 0, 106, 107, 108, 0, + 109, 0, 0, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 1791, 448, 449, + 450, 128, 129, 0, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 1170, 459, 1141, 134, + 1792, 0, 461, 462, 463, 464, 138, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 0, 471, 472, 0, + 0, 473, 474, 475, 476, 477, 478, 0, 0, 479, + 480, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 0, 0, 0, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 537, 0, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 0, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 0, 0, + 554, 0, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 0, 561, 0, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 1174, 184, 0, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 0, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 0, 601, 0, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 0, + 1175, 647, 648, 649, 650, 209, 651, 652, 653, 1176, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 1784, 0, 665, 666, 214, 667, 668, 0, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 0, 689, 690, 691, 692, 693, 0, + 694, 1178, 223, 0, 0, 1179, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 1145, 232, 0, 717, 0, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 1180, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 1911, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 0, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 760, + 134, 460, 0, 461, 462, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 761, 0, 473, 474, 1912, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 520, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 537, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 646, 647, 648, 649, 650, 209, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 769, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 1140, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 1141, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 0, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 1145, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 749, 0, 0, 101, 102, 103, 104, 0, 0, 106, + 107, 108, 0, 109, 0, 0, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 0, 438, 439, 440, 0, 0, 0, 0, 0, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 0, 448, 449, 450, 128, 129, 0, 131, 132, 0, + 451, 452, 453, 454, 455, 456, 457, 0, 0, 458, + 459, 760, 134, 460, 0, 461, 462, 463, 464, 138, + 0, 0, 0, 465, 466, 467, 468, 469, 470, 0, + 471, 472, 761, 0, 473, 474, 475, 476, 477, 478, + 0, 0, 479, 480, 0, 0, 0, 0, 0, 0, + 0, 0, 483, 484, 485, 486, 763, 487, 149, 150, + 488, 0, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 503, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 158, 516, 517, 518, + 519, 160, 0, 520, 0, 521, 522, 523, 162, 524, + 0, 525, 0, 526, 0, 0, 0, 527, 528, 529, + 530, 0, 531, 166, 0, 167, 532, 533, 0, 534, + 535, 765, 536, 2199, 0, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 0, + 171, 0, 550, 551, 552, 0, 172, 0, 173, 0, + 553, 0, 0, 554, 0, 555, 556, 557, 558, 559, + 0, 0, 560, 177, 0, 561, 0, 0, 562, 563, + 564, 0, 0, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 184, + 0, 186, 579, 580, 581, 582, 583, 584, 585, 187, + 188, 586, 0, 587, 588, 0, 589, 0, 191, 590, + 192, 591, 592, 593, 0, 594, 595, 0, 0, 596, + 597, 598, 0, 0, 599, 600, 193, 0, 601, 0, + 196, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 197, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 200, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 0, 646, 647, 648, 649, 650, 209, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 663, 0, 665, 666, 214, 667, 668, + 0, 669, 670, 217, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 219, + 685, 0, 686, 687, 0, 688, 0, 689, 690, 691, + 692, 693, 0, 694, 222, 223, 0, 0, 696, 697, + 224, 698, 225, 0, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 0, 707, 708, 709, 710, 711, 0, + 0, 712, 713, 714, 715, 716, 769, 232, 0, 717, + 0, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 770, 729, 730, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 2233, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 0, 0, 0, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 2235, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 0, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 0, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 0, 98, 99, 749, 0, 0, 101, 102, 103, 104, + 0, 0, 106, 107, 108, 0, 109, 0, 0, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 0, 448, 449, 450, 128, 129, 0, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 760, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 0, 0, 465, 466, 467, 468, + 469, 470, 0, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 0, 479, 480, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 0, 0, 0, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 2311, 0, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 0, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 0, 0, 554, 0, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 0, 561, 0, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 0, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 0, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 0, 601, 0, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 0, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 0, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 0, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 769, + 232, 0, 717, 0, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 760, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 2313, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 0, 0, 696, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 769, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 2315, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 749, 0, 0, 101, + 102, 103, 104, 0, 0, 106, 107, 108, 0, 109, + 0, 0, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 0, 448, 449, 450, + 128, 129, 0, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 760, 134, 460, + 0, 461, 462, 463, 464, 138, 0, 0, 0, 465, + 466, 467, 468, 469, 470, 0, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 0, 479, 480, + 0, 0, 0, 0, 0, 0, 0, 0, 483, 484, + 485, 486, 763, 487, 149, 150, 488, 0, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 0, 520, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 0, 0, 0, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 765, 536, 537, + 0, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 0, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 0, 0, 554, + 0, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 0, 561, 0, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 184, 0, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 0, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 0, 0, 596, 597, 598, 0, 0, + 599, 600, 193, 0, 601, 0, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 0, 646, + 647, 648, 649, 650, 209, 651, 652, 2428, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 0, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 0, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 0, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 769, 232, 0, 717, 0, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 770, 729, 730, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 749, 0, 0, + 101, 102, 103, 104, 0, 0, 106, 107, 108, 0, + 109, 0, 0, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 3043, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 0, 448, 449, + 450, 128, 129, 0, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 760, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 0, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 0, 479, + 480, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 0, 0, 0, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 537, 0, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 0, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 0, 0, + 554, 0, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 0, 561, 0, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 184, 0, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 0, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 0, 601, 0, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 0, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 0, 666, 214, 667, 668, 0, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 0, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 769, 232, 0, 717, 0, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 0, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 760, + 134, 460, 0, 461, 462, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 761, 0, 473, 474, 475, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 520, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 3479, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 578, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 646, 647, 648, 649, 650, 209, 651, 652, 653, + 654, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 769, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 760, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 761, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 3483, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 769, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 749, 0, 0, 101, 102, 103, 104, 0, 0, 106, + 107, 108, 0, 109, 0, 0, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 0, 438, 439, 440, 0, 0, 0, 0, 0, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 0, 448, 449, 450, 128, 129, 0, 131, 132, 0, + 451, 452, 453, 454, 455, 456, 457, 0, 0, 458, + 459, 760, 134, 460, 0, 461, 462, 463, 464, 138, + 0, 0, 0, 465, 466, 467, 468, 469, 470, 0, + 471, 472, 761, 0, 473, 474, 475, 476, 477, 478, + 0, 0, 479, 480, 0, 0, 0, 0, 0, 0, + 0, 0, 483, 484, 485, 486, 763, 487, 149, 150, + 488, 0, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 503, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 158, 516, 517, 518, + 519, 160, 0, 520, 0, 521, 522, 523, 162, 524, + 0, 525, 0, 526, 0, 0, 0, 527, 528, 529, + 530, 0, 531, 166, 0, 167, 532, 533, 0, 534, + 535, 765, 536, 3568, 0, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 0, + 171, 0, 550, 551, 552, 0, 172, 0, 173, 0, + 553, 0, 0, 554, 0, 555, 556, 557, 558, 559, + 0, 0, 560, 177, 0, 561, 0, 0, 562, 563, + 564, 0, 0, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 578, 184, + 0, 186, 579, 580, 581, 582, 583, 584, 585, 187, + 188, 586, 0, 587, 588, 0, 589, 0, 191, 590, + 192, 591, 592, 593, 0, 594, 595, 0, 0, 596, + 597, 598, 0, 0, 599, 600, 193, 0, 601, 0, + 196, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 197, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 200, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 0, 646, 647, 648, 649, 650, 209, 651, + 652, 653, 654, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 663, 0, 665, 666, 214, 667, 668, + 0, 669, 670, 217, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 219, + 685, 0, 686, 687, 0, 688, 0, 689, 690, 691, + 692, 693, 0, 694, 222, 223, 0, 0, 696, 697, + 224, 698, 225, 0, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 0, 707, 708, 709, 710, 711, 0, + 0, 712, 713, 714, 715, 716, 769, 232, 0, 717, + 0, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 728, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 770, 729, 730, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 458, 459, 760, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 761, 0, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 3924, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 578, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 646, 647, 648, 649, 650, 209, + 651, 652, 653, 654, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 663, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 222, 223, 0, 0, 696, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 769, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 728, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 760, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 761, 0, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 0, 0, 0, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 3981, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 0, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 578, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 0, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 769, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 0, 98, 99, 749, 0, 0, 101, 102, 103, 104, + 0, 0, 106, 107, 108, 0, 109, 0, 0, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 0, 448, 449, 450, 128, 129, 0, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 760, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 0, 0, 465, 466, 467, 468, + 469, 470, 0, 471, 472, 761, 0, 473, 474, 475, + 476, 477, 478, 0, 0, 479, 480, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 0, 0, 0, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 3995, 0, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 0, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 0, 0, 554, 0, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 0, 561, 0, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 578, 184, 0, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 0, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 0, 601, 0, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 0, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 0, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 0, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 769, + 232, 0, 717, 0, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 760, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 761, 0, 473, 474, + 475, 476, 477, 478, 0, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 3997, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 578, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 663, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 0, 0, 696, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 769, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 765, 536, 4141, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 81, 82, 746, 84, 85, + 86, 747, 0, 748, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 749, 0, 0, 101, + 102, 103, 104, 0, 0, 106, 107, 108, 0, 109, + 0, 0, 750, 751, 0, 0, 0, 752, 753, 0, + 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, + 0, 0, 755, 0, 756, 0, 757, 758, 35, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 0, 448, 449, 450, + 128, 129, 0, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 760, 134, 460, + 0, 461, 462, 463, 464, 138, 0, 0, 0, 465, + 466, 467, 468, 469, 470, 0, 471, 472, 761, 0, + 473, 474, 475, 476, 477, 478, 0, 0, 479, 480, + 0, 0, 0, 0, 0, 0, 0, 0, 483, 484, + 485, 486, 763, 487, 149, 150, 488, 0, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 4181, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 0, 520, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 0, 0, 0, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 765, 536, 537, + 0, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 0, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 0, 0, 554, + 0, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 0, 561, 0, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 766, 574, + 575, 767, 576, 577, 578, 184, 0, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 0, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 0, 0, 596, 597, 598, 0, 0, + 599, 600, 193, 0, 601, 0, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 0, 646, + 647, 648, 649, 650, 209, 651, 652, 653, 654, 655, + 656, 657, 768, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 0, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 0, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 0, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 769, 232, 0, 717, 0, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 770, 729, 730, 81, 82, 746, 84, + 85, 86, 747, 0, 748, 89, 0, 0, 92, 93, + 94, 95, 96, 97, 0, 98, 99, 749, 0, 0, + 101, 102, 103, 104, 0, 0, 106, 107, 108, 0, + 109, 0, 0, 750, 751, 0, 0, 0, 752, 753, + 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, + 0, 0, 0, 755, 0, 756, 0, 757, 758, 35, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 0, 448, 449, + 450, 128, 129, 0, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 760, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 0, 471, 472, 761, + 0, 473, 474, 475, 476, 477, 478, 0, 0, 479, + 480, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 484, 485, 486, 763, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 0, 0, 0, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 765, 536, + 5403, 0, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 0, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 0, 0, + 554, 0, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 0, 561, 0, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 766, + 574, 575, 767, 576, 577, 578, 184, 0, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 0, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 0, 601, 0, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 0, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 768, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 0, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 0, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 769, 232, 0, 717, 0, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 770, 729, 730, 81, 82, 746, + 84, 85, 86, 747, 0, 748, 89, 0, 0, 92, + 93, 94, 95, 96, 97, 0, 98, 99, 749, 0, + 0, 101, 102, 103, 104, 0, 0, 106, 107, 108, + 0, 109, 0, 0, 750, 751, 0, 0, 0, 752, + 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, + 0, 0, 0, 0, 755, 0, 756, 0, 757, 758, + 35, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 0, 448, + 449, 450, 128, 129, 0, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 1170, 459, 1141, + 134, 460, 0, 461, 462, 463, 464, 138, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 0, 471, 472, + 0, 0, 473, 474, 475, 476, 477, 478, 0, 0, + 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 763, 487, 149, 150, 488, 0, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 0, 520, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 0, 0, 0, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 765, + 536, 537, 0, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 0, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 0, + 0, 554, 0, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 0, 561, 0, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 766, 574, 575, 767, 576, 577, 1174, 184, 0, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 0, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 0, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 0, 601, 0, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 0, 1175, 647, 648, 649, 650, 209, 651, 652, 653, + 1176, 655, 656, 657, 768, 658, 0, 659, 660, 661, + 662, 1784, 0, 665, 666, 214, 667, 668, 0, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 0, 689, 690, 691, 692, 693, + 0, 694, 1178, 223, 0, 0, 1179, 697, 224, 698, + 225, 0, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 1145, 232, 0, 717, 0, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 1180, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 770, 729, 730, 81, 82, + 746, 84, 85, 86, 747, 0, 748, 89, 0, 0, + 92, 93, 94, 95, 96, 97, 0, 98, 99, 749, + 0, 0, 101, 102, 103, 104, 0, 0, 106, 107, + 108, 0, 109, 0, 0, 750, 751, 0, 0, 0, + 752, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, + 758, 35, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 0, + 448, 449, 450, 128, 129, 0, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 1141, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 0, 0, 465, 466, 467, 468, 469, 470, 0, 471, + 472, 0, 0, 473, 474, 475, 476, 477, 478, 0, + 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 484, 485, 486, 763, 487, 149, 150, 488, + 0, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 0, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 0, 0, 0, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 765, 536, 537, 0, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 0, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 0, 0, 554, 0, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 0, 561, 0, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 766, 574, 575, 767, 576, 577, 578, 184, 0, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 0, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 0, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 0, 601, 0, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 0, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 768, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 0, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 0, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 0, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 1145, 232, 0, 717, 0, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 770, 729, 730, 81, + 82, 746, 84, 85, 86, 747, 0, 748, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 749, 0, 0, 101, 102, 103, 104, 0, 0, 106, + 107, 108, 0, 109, 0, 0, 750, 751, 0, 0, + 0, 752, 753, 0, 0, 0, 0, 754, 0, 0, + 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, + 757, 758, 35, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 430, 431, 432, 433, 434, 435, 436, + 437, 0, 438, 439, 440, 0, 0, 0, 0, 0, + 0, 0, 441, 442, 443, 0, 444, 445, 446, 447, + 0, 448, 449, 450, 128, 129, 0, 131, 132, 0, + 451, 452, 453, 454, 455, 456, 457, 0, 0, 1170, + 459, 1141, 134, 460, 0, 461, 462, 463, 464, 138, + 0, 0, 0, 465, 466, 467, 468, 469, 470, 0, + 471, 472, 0, 0, 473, 474, 475, 476, 477, 478, + 0, 0, 479, 480, 0, 0, 0, 0, 0, 0, + 0, 0, 483, 484, 485, 486, 763, 487, 149, 150, + 488, 0, 489, 0, 490, 491, 492, 493, 494, 495, + 496, 0, 497, 498, 499, 500, 0, 0, 501, 502, + 503, 504, 505, 0, 506, 507, 508, 0, 509, 510, + 511, 0, 512, 513, 514, 515, 158, 516, 517, 518, + 519, 160, 0, 520, 0, 521, 522, 523, 162, 524, + 0, 525, 0, 526, 0, 0, 0, 527, 528, 529, + 530, 0, 531, 166, 0, 167, 532, 533, 0, 534, + 535, 765, 536, 537, 0, 538, 539, 540, 541, 0, + 542, 543, 544, 545, 546, 547, 548, 0, 549, 0, + 171, 0, 550, 551, 552, 0, 172, 0, 173, 0, + 553, 0, 0, 554, 0, 555, 556, 557, 558, 559, + 0, 0, 560, 177, 0, 561, 0, 0, 562, 563, + 564, 0, 0, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 766, 574, 575, 767, 576, 577, 1174, 184, + 0, 186, 579, 580, 581, 582, 583, 584, 585, 187, + 188, 586, 0, 587, 588, 0, 589, 0, 191, 590, + 192, 591, 592, 593, 0, 594, 595, 0, 0, 596, + 597, 598, 0, 0, 599, 600, 193, 0, 601, 0, + 196, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 611, 612, 197, 613, 198, 614, 615, 616, 0, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 200, 627, 628, 629, 630, 0, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 0, + 644, 645, 0, 1175, 647, 648, 649, 650, 209, 651, + 652, 653, 1176, 655, 656, 657, 768, 658, 0, 659, + 660, 661, 662, 1784, 0, 665, 666, 214, 667, 668, + 0, 669, 670, 217, 671, 0, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 219, + 685, 0, 686, 687, 0, 688, 0, 3127, 690, 691, + 692, 693, 0, 694, 1178, 223, 0, 0, 1179, 697, + 224, 698, 225, 0, 699, 700, 701, 702, 703, 704, + 705, 706, 0, 0, 707, 708, 709, 710, 711, 0, + 0, 712, 713, 714, 715, 716, 1145, 232, 0, 717, + 0, 718, 719, 720, 721, 0, 0, 722, 0, 0, + 723, 724, 725, 726, 727, 1180, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 770, 729, 730, + 81, 82, 746, 84, 85, 86, 747, 0, 748, 89, + 0, 0, 92, 93, 94, 95, 96, 97, 0, 98, + 99, 749, 0, 0, 101, 102, 103, 104, 0, 0, + 106, 107, 108, 0, 109, 0, 0, 750, 751, 0, + 0, 0, 752, 753, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, + 0, 757, 758, 35, 0, 0, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 430, 431, 432, 433, 434, 435, + 436, 437, 0, 438, 439, 440, 0, 0, 0, 0, + 0, 0, 0, 441, 442, 443, 0, 444, 445, 446, + 447, 0, 448, 449, 450, 128, 129, 0, 131, 132, + 0, 451, 452, 453, 454, 455, 456, 457, 0, 0, + 1170, 459, 1141, 134, 460, 0, 461, 462, 463, 464, + 138, 0, 0, 0, 465, 466, 467, 468, 469, 470, + 0, 471, 472, 0, 0, 473, 474, 475, 476, 477, + 478, 0, 0, 479, 480, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 484, 485, 486, 763, 487, 149, + 150, 488, 0, 489, 0, 490, 491, 492, 493, 494, + 495, 496, 0, 497, 498, 499, 500, 0, 0, 501, + 502, 503, 504, 505, 0, 506, 507, 508, 0, 509, + 510, 511, 0, 512, 513, 514, 515, 158, 516, 517, + 518, 519, 160, 0, 520, 0, 521, 522, 523, 162, + 524, 0, 525, 0, 526, 0, 0, 0, 527, 528, + 529, 530, 0, 531, 166, 0, 167, 532, 533, 0, + 534, 535, 765, 536, 537, 0, 538, 539, 540, 541, + 0, 542, 543, 544, 545, 546, 547, 548, 0, 549, + 0, 171, 0, 550, 551, 552, 0, 172, 0, 173, + 0, 553, 0, 0, 554, 0, 555, 556, 557, 558, + 559, 0, 0, 560, 177, 0, 561, 0, 0, 562, + 563, 564, 0, 0, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 766, 574, 575, 767, 576, 577, 1174, + 184, 0, 186, 579, 580, 581, 582, 583, 584, 585, + 187, 188, 586, 0, 587, 588, 0, 589, 0, 191, + 590, 192, 591, 592, 593, 0, 594, 595, 0, 0, + 596, 597, 598, 0, 0, 599, 600, 193, 0, 601, + 0, 196, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 611, 612, 197, 613, 198, 614, 615, 616, + 0, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 200, 627, 628, 629, 630, 0, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 0, 644, 645, 0, 1175, 647, 648, 649, 650, 209, + 651, 652, 653, 3192, 655, 656, 657, 768, 658, 0, + 659, 660, 661, 662, 3193, 0, 665, 666, 214, 667, + 668, 0, 669, 670, 217, 671, 0, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 219, 685, 0, 686, 687, 0, 688, 0, 689, 690, + 691, 692, 693, 0, 694, 1178, 223, 0, 0, 3194, + 697, 224, 698, 225, 0, 699, 700, 701, 702, 703, + 704, 705, 706, 0, 0, 707, 708, 709, 710, 711, + 0, 0, 712, 713, 714, 715, 716, 1145, 232, 0, + 717, 0, 718, 719, 720, 721, 0, 0, 722, 0, + 0, 723, 724, 725, 726, 727, 1180, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 770, 729, + 730, 81, 82, 746, 84, 85, 86, 747, 0, 748, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 749, 0, 0, 101, 102, 103, 104, 0, + 0, 106, 107, 108, 0, 109, 0, 0, 750, 751, + 0, 0, 0, 752, 753, 0, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, + 756, 0, 757, 758, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 0, 448, 449, 450, 128, 129, 0, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 1170, 459, 1141, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 0, 0, 465, 466, 467, 468, 469, + 470, 0, 471, 472, 0, 0, 473, 474, 475, 476, + 477, 478, 0, 0, 479, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 483, 484, 485, 486, 763, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 0, 0, 0, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 765, 536, 537, 0, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 0, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 0, 0, 554, 0, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 0, 561, 0, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 766, 574, 575, 767, 576, 577, + 1174, 184, 0, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 0, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 0, + 601, 0, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 0, 1175, 647, 648, 649, 650, + 209, 651, 652, 653, 3269, 655, 656, 657, 768, 658, + 0, 659, 660, 661, 662, 3193, 0, 665, 666, 214, + 667, 668, 0, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 0, 689, + 690, 691, 692, 693, 0, 694, 1178, 223, 0, 0, + 3194, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 1145, 232, + 0, 717, 0, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 1180, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 770, + 729, 730, 81, 82, 746, 84, 85, 86, 747, 0, + 748, 89, 0, 0, 92, 93, 94, 95, 96, 97, + 0, 98, 99, 749, 0, 0, 101, 102, 103, 104, + 0, 0, 106, 107, 108, 0, 109, 0, 0, 750, + 751, 0, 0, 0, 752, 753, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 755, + 0, 756, 0, 757, 758, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 0, 0, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 0, 448, 449, 450, 128, 129, 0, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 1170, 459, 1141, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 0, 0, 465, 466, 467, 468, + 469, 470, 0, 471, 472, 0, 0, 473, 474, 475, + 476, 477, 478, 0, 0, 479, 480, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 484, 485, 486, 763, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 0, 0, 0, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 765, 536, 537, 0, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 0, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 0, 0, 554, 0, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 0, 561, 0, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 766, 574, 575, 767, 576, + 577, 1174, 184, 0, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 0, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 0, 601, 0, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 0, 1175, 647, 648, 649, + 650, 209, 651, 652, 653, 3286, 655, 656, 657, 768, + 658, 0, 659, 660, 661, 662, 3193, 0, 665, 666, + 214, 667, 668, 0, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 0, 688, 0, + 689, 690, 691, 692, 693, 0, 694, 1178, 223, 0, + 0, 3194, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 1145, + 232, 0, 717, 0, 718, 719, 720, 721, 0, 0, + 722, 0, 0, 723, 724, 725, 726, 727, 1180, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 770, 729, 730, 81, 82, 746, 84, 85, 86, 747, + 0, 748, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 749, 0, 0, 101, 102, 103, + 104, 0, 0, 106, 107, 108, 0, 109, 0, 0, + 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, + 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, + 755, 0, 756, 0, 757, 758, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 0, 448, 449, 450, 128, 129, + 0, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 1170, 459, 1141, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 0, 0, 465, 466, 467, + 468, 469, 470, 0, 471, 472, 0, 0, 473, 474, + 475, 476, 477, 478, 0, 0, 479, 480, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 484, 485, 486, + 763, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 0, 0, + 0, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 765, 536, 537, 0, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 0, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 0, 0, 554, 0, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 0, 561, + 0, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 766, 574, 575, 767, + 576, 577, 1174, 184, 0, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 0, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 0, 601, 0, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 0, 1175, 647, 648, + 649, 650, 209, 651, 652, 653, 1176, 655, 656, 657, + 768, 658, 0, 659, 660, 661, 662, 3193, 0, 665, + 666, 214, 667, 668, 0, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 0, 689, 690, 691, 692, 693, 0, 694, 1178, 223, + 0, 0, 3194, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 1145, 232, 0, 717, 0, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 1180, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 770, 729, 730, 81, 82, 746, 84, 85, 86, + 747, 0, 748, 89, 0, 0, 92, 93, 94, 95, + 96, 97, 0, 98, 99, 749, 0, 0, 101, 102, + 103, 104, 0, 0, 106, 107, 108, 0, 109, 0, + 0, 750, 751, 0, 0, 0, 752, 753, 0, 0, + 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, + 0, 755, 0, 756, 0, 757, 758, 35, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 0, 448, 449, 450, 128, + 129, 0, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 760, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 0, 0, 465, 466, + 467, 468, 469, 470, 0, 471, 472, 761, 0, 473, + 474, 475, 476, 477, 478, 0, 0, 479, 480, 0, + 0, 0, 0, 0, 0, 0, 0, 483, 484, 485, + 486, 763, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 0, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 0, + 0, 0, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 0, 533, 0, 534, 535, 765, 536, 537, 0, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 0, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 0, 0, 554, 0, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 0, + 561, 0, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 766, 574, 575, + 767, 576, 577, 578, 184, 0, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 0, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 0, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 0, 601, 0, 196, 602, 603, 604, 605, + 606, 607, 0, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 0, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 0, 646, 647, + 648, 649, 650, 209, 0, 652, 653, 654, 655, 656, + 657, 768, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 0, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 0, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 0, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 769, 232, 0, 717, 0, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 770, 729, 730, 81, 82, 0, 84, 85, + 86, 0, 0, 0, 89, 0, 0, 92, 93, 94, + 95, 96, 97, 0, 98, 99, 0, 0, 0, 101, + 102, 103, 104, 0, 105, 106, 107, 108, -3220, 109, + 110, 111, 0, 0, 0, 0, 0, 114, 115, 0, + 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, + 0, 0, 117, 0, 118, 0, 119, 120, 35, 0, + 424, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, + 128, 129, 130, 131, 132, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, + 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, + 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, + 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 149, 150, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, + 0, 0, 158, 0, 0, 0, 0, 160, 0, 0, + 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, + 163, 0, 164, 0, 0, 0, 0, 0, 0, 166, + 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, + 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 171, 0, 0, 0, + 0, 0, 172, 0, 173, 0, 0, 174, 175, 0, + 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, + 178, 0, 179, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 184, 185, 186, 0, 0, + 0, 0, 0, 0, 0, 187, 188, 0, 0, 0, + 0, 190, 0, 0, 191, 0, 192, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 193, 194, 0, 195, 196, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, + 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, + 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 214, 0, 0, 216, 0, 0, 217, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, + 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, + 222, 223, 0, 0, 0, 0, 224, 0, 225, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 81, 82, 0, 84, 85, 86, 0, + 0, 0, 89, 0, 0, 92, 93, 94, 95, 96, + 97, 0, 98, 99, 0, 0, 0, 101, 102, 103, + 104, 0, 105, 106, 107, 108, -3221, 109, 110, 111, + 0, 0, 0, 0, 0, 114, 115, 0, 0, 0, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 0, 118, 0, 119, 120, 35, 0, 1256, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 0, 0, 0, 128, 129, + 130, 131, 132, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, + 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, + 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, + 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 149, 150, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, + 158, 0, 0, 0, 0, 160, 0, 0, 0, 0, + 0, 0, 162, 0, 0, 0, 0, 0, 163, 0, + 164, 0, 0, 0, 0, 0, 0, 166, 0, 167, + 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 170, 171, 0, 0, 0, 0, 0, + 172, 0, 173, 0, 0, 174, 175, 0, 176, 0, + 0, 0, 0, 0, 0, 0, 0, 177, 178, 0, + 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 184, 185, 186, 0, 0, 0, 0, + 0, 0, 0, 187, 188, 0, 0, 0, 0, 190, + 0, 0, 191, 0, 192, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 193, 194, 0, 195, 196, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 197, 0, 198, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, + 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 214, 0, 0, 216, 0, 0, 217, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, + 221, 0, 0, 0, 0, 0, 0, 0, 222, 223, + 0, 0, 0, 0, 224, 0, 225, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 81, 82, 0, 84, 85, 86, 0, 0, 0, + 89, 0, 0, 92, 93, 94, 95, 96, 97, 0, + 98, 99, 0, 0, 0, 101, 102, 103, 104, 0, + 105, 106, 107, 108, 0, 109, 110, 111, 0, 0, + 0, 0, 0, 114, 115, 0, 0, 0, 0, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, + 118, 0, 119, 0, 35, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 126, 0, 0, 0, 128, 129, 130, 131, + 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, + 0, 138, 0, 139, 0, 0, 0, 0, 0, 0, + 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, + 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 149, 150, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 156, 0, 0, 0, 0, 0, 0, 0, 158, 0, + 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, + 162, 0, 0, 0, 0, 0, 163, 0, 164, 0, + 0, 0, 0, 0, 0, 166, 0, 167, 0, 0, + 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 170, 171, 0, 0, 0, 0, 0, 172, 0, + 173, 0, 0, 174, 175, 0, 176, 0, 0, 0, + 0, 0, 0, 0, 0, 177, 178, 0, 179, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 184, 185, 186, 0, 0, 0, 0, 0, 0, + 0, 187, 188, 0, 0, 0, 0, 190, 0, 0, + 191, 0, 192, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 193, 194, + 0, 195, 196, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 197, 0, 198, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, + 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, + 0, 0, 216, 0, 0, 217, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 219, 0, 0, 0, 0, 0, 0, 221, 0, + 0, 0, 0, 0, 0, 0, 222, 223, 0, 0, + 0, 0, 224, 0, 225, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, + 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 81, + 82, 0, 84, 85, 86, 0, 0, 0, 89, 0, + 0, 92, 93, 94, 95, 96, 97, 0, 98, 99, + 0, 0, 0, 101, 102, 103, 104, 0, 105, 106, + 107, 108, 0, 109, 110, 111, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 35, 0, 0, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 126, 0, 0, 0, 128, 129, 130, 131, 132, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 134, 0, 0, 0, 0, 0, 0, 138, + 0, 139, 0, 0, 0, 0, 0, 0, 0, 142, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 145, 0, 0, 0, 0, 0, 0, 146, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 149, 150, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, + 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, + 0, 160, 0, 0, 0, 0, 0, 0, 162, 0, + 0, 0, 0, 0, 163, 0, 164, 0, 0, 0, + 0, 0, 0, 166, 0, 167, 0, 0, 0, 0, + 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, + 171, 0, 0, 0, 0, 0, 172, 0, 173, 0, + 0, 174, 175, 0, 176, 0, 0, 0, 0, 0, + 0, 0, 0, 177, 178, 0, 179, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, + 185, 186, 0, 0, 0, 0, 0, 0, 0, 187, + 188, 0, 0, 0, 0, 190, 0, 0, 191, 0, + 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 193, 194, 0, 195, + 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 197, 0, 198, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 207, 0, 0, 0, 0, 0, 209, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, + 216, 0, 0, 217, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, + 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, + 0, 0, 0, 0, 222, 223, 0, 0, 0, 0, + 224, 0, 225, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, + 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 35, 429, 0, + 0, 37, 0, 38, 39, 0, 0, 0, 0, 40, + 0, 0, 0, 0, 0, 0, 0, 0, 430, 431, + 432, 433, 434, 435, 436, 437, 0, 438, 439, 440, + 0, 0, 0, 0, 0, 0, 0, 441, 442, 443, + 0, 444, 445, 446, 447, 126, 448, 449, 450, 128, + 129, 130, 131, 132, 0, 451, 452, 453, 454, 455, + 456, 457, 0, 0, 458, 459, 0, 134, 460, 0, + 461, 462, 463, 464, 138, 0, 139, 0, 465, 466, + 467, 468, 469, 470, 142, 471, 472, 0, 0, 473, + 474, 475, 476, 477, 478, 0, 145, 479, 480, 0, + 0, 0, 0, 146, 0, 0, 0, 483, 484, 485, + 486, 0, 487, 149, 150, 488, 0, 489, 0, 490, + 491, 492, 493, 494, 495, 496, 0, 497, 498, 499, + 500, 0, 0, 501, 502, 503, 504, 505, 0, 506, + 507, 508, 0, 509, 510, 511, 0, 512, 513, 514, + 515, 158, 516, 517, 518, 519, 160, 2156, 520, 0, + 521, 522, 523, 162, 524, 0, 525, 0, 526, 163, + 0, 164, 527, 528, 529, 530, 0, 531, 166, 0, + 167, 532, 533, 0, 534, 535, 0, 536, 537, 168, + 538, 539, 540, 541, 0, 542, 543, 544, 545, 546, + 547, 548, 0, 549, 170, 171, 0, 550, 551, 552, + 0, 172, 0, 173, 0, 553, 174, 175, 554, 176, + 555, 556, 557, 558, 559, 0, 0, 560, 177, 178, + 561, 179, 0, 562, 563, 564, 0, 0, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 0, 574, 575, + 0, 576, 577, 578, 184, 185, 186, 579, 580, 581, + 582, 583, 584, 585, 187, 188, 586, 0, 587, 588, + 190, 589, 0, 191, 590, 192, 591, 592, 593, 0, + 594, 595, 2157, 0, 596, 597, 598, 0, 0, 599, + 600, 193, 194, 601, 195, 196, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 611, 612, 197, 613, + 198, 614, 615, 616, 0, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 200, 627, 628, 629, 630, + 0, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 0, 644, 645, 207, 646, 647, + 648, 649, 650, 209, 651, 652, 653, 654, 655, 656, + 657, 0, 658, 0, 659, 660, 661, 662, 663, 0, + 665, 666, 214, 667, 668, 216, 669, 670, 217, 671, + 0, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 219, 685, 0, 686, 687, 0, + 688, 221, 689, 690, 691, 692, 693, 0, 694, 222, + 223, 0, 0, 696, 697, 224, 698, 225, 2158, 699, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 707, + 708, 709, 710, 711, 0, 0, 712, 713, 714, 715, + 716, 0, 232, 0, 717, 233, 718, 719, 720, 721, + 0, 0, 722, 0, 0, 723, 724, 725, 726, 727, + 728, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 0, 729, 730, 35, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, 1869, 1870, 6136, 0, + 0, 0, 0, 0, 0, 6137, 430, 431, 432, 433, + 434, 435, 436, 437, 0, 438, 439, 440, 123, 124, + 0, 0, 0, 0, 0, 441, 442, 443, 0, 444, + 445, 446, 447, 126, 448, 449, 450, 128, 129, 130, + 131, 132, 0, 451, 452, 453, 454, 455, 456, 457, + 0, 0, 458, 459, 0, 134, 460, 0, 461, 462, + 463, 464, 138, 0, 139, 0, 465, 466, 467, 468, + 469, 470, 142, 471, 472, 0, 0, 473, 474, 475, + 476, 477, 478, 0, 145, 479, 480, 0, 0, 0, + 0, 146, 0, 0, 0, 483, 484, 485, 486, 0, + 487, 149, 150, 488, 0, 489, 0, 490, 491, 492, + 493, 494, 495, 496, 0, 497, 498, 499, 500, 0, + 0, 501, 502, 503, 504, 505, 0, 506, 507, 508, + 0, 509, 510, 511, 0, 512, 513, 514, 515, 158, + 516, 517, 518, 519, 160, 0, 520, 0, 521, 522, + 523, 162, 524, 0, 525, 0, 526, 163, 0, 164, + 527, 528, 529, 530, 0, 531, 166, 0, 167, 532, + 533, 0, 534, 535, 0, 536, 537, 168, 538, 539, + 540, 541, 0, 542, 543, 544, 545, 546, 547, 548, + 0, 549, 170, 171, 0, 550, 551, 552, 0, 172, + 0, 173, 0, 553, 174, 175, 554, 176, 555, 556, + 557, 558, 559, 0, 0, 560, 177, 178, 561, 179, + 0, 562, 563, 564, 0, 0, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 0, 574, 575, 0, 576, + 577, 578, 184, 185, 186, 579, 580, 581, 582, 583, + 584, 585, 187, 188, 586, 0, 587, 588, 190, 589, + 0, 191, 590, 192, 591, 592, 593, 0, 594, 595, + 0, 0, 596, 597, 598, 0, 0, 599, 600, 193, + 194, 601, 195, 196, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 611, 612, 197, 613, 198, 614, + 615, 616, 0, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 200, 627, 628, 629, 630, 0, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 0, 644, 645, 207, 646, 647, 648, 649, + 650, 209, 651, 652, 653, 654, 655, 656, 657, 0, + 658, 212, 659, 660, 661, 662, 663, 0, 665, 666, + 214, 667, 668, 216, 669, 670, 217, 671, 0, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 219, 685, 0, 686, 687, 220, 688, 221, + 689, 690, 691, 692, 693, 0, 694, 222, 223, 0, + 0, 696, 697, 224, 698, 225, 0, 699, 700, 701, + 702, 703, 704, 705, 706, 0, 0, 707, 708, 709, + 710, 711, 0, 0, 712, 713, 714, 715, 716, 231, + 232, 0, 717, 233, 718, 719, 720, 721, 0, 0, + 722, 0, 234, 723, 724, 725, 726, 727, 728, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 0, 729, 730, 0, 0, 246, 35, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 2480, 0, 0, + 2481, 0, 0, 247, 2482, 2483, 2484, 2485, 2486, 2487, + 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, + 2498, 2499, 2500, 0, 2501, 2502, 2503, 2504, 2505, 2506, + 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, + 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, + 2527, 2528, 2529, 2530, 2531, 0, 0, 2532, 2533, 2534, + 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, + 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, + 2555, 2556, 2557, 2558, 0, 2559, 2560, 2561, 2562, 2563, + 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, + 0, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, + 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, + 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, + 2603, 2604, 2605, 2606, 2607, 0, 2608, 2609, 2610, 2611, + 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 0, 0, + 2620, 2621, 2622, 2623, 0, 2624, 2625, 2626, 2627, 0, + 2628, 2629, 2630, 2631, 2632, 0, 2633, 2634, 0, 2635, + 2636, 2637, 0, 2638, 2639, 0, 2640, 2641, 2642, 2643, + 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, + 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, + 2664, 0, 2665, 0, 2666, 2667, 2668, 2669, 2670, 2671, + 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, + 2682, 0, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, + 2691, 2692, 2693, 2694, 2695, 2696, 0, 2697, 2698, 0, + 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, + 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, + 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 0, 2727, + 2728, 0, 2729, 2730, 2731, 2732, 2733, 0, 2734, 2735, + 2736, 2737, 0, 0, 2738, 2739, 2740, 2741, 2742, 2743, + 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 0, + 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, + 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, + 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, + 2783, 2784, 2785, 0, 2786, 2787, 2788, 2789, 2790, 2791, + 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, + 0, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, + 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, + 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, + 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, + 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, + 0, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, + 2860, 2861, 2862, 2863, 2864, 2865, 0, 2866, 2867, 2868, + 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, + 2879, 2880, 2881, 0, 2882, 2883, 2884, 2885, 2886, 2887, + 0, 2888, 0, 0, 0, 0, 2889, 2890, 2891, 2892, + 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, + 2903, 0, 2904, 2905, 2906, 0, 0, 0, 0, 0, + 0, 0, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, + 2915, 35, 429, 0, 0, 37, 0, 38, 39, 0, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, + 0, 0, 430, 431, 432, 433, 434, 435, 436, 437, + 0, 438, 439, 440, 0, 0, 0, 0, 0, 0, + 0, 441, 442, 443, 0, 444, 445, 446, 447, 126, + 448, 449, 450, 128, 129, 130, 131, 132, 0, 451, + 452, 453, 454, 455, 456, 457, 0, 0, 458, 459, + 0, 134, 460, 0, 461, 462, 463, 464, 138, 0, + 139, 0, 465, 466, 467, 468, 469, 470, 142, 471, + 472, 0, 0, 473, 474, 475, 476, 477, 478, 0, + 145, 479, 480, 0, 0, 0, 0, 146, 0, 0, + 0, 483, 484, 485, 486, 0, 487, 149, 150, 488, + 2969, 489, 0, 490, 491, 492, 493, 494, 495, 496, + 0, 497, 498, 499, 500, 0, 0, 501, 502, 503, + 504, 505, 0, 506, 507, 508, 0, 509, 510, 511, + 0, 512, 513, 514, 515, 158, 516, 517, 518, 519, + 160, 2156, 520, 0, 521, 522, 523, 162, 524, 0, + 525, 0, 526, 163, 0, 164, 527, 528, 529, 530, + 0, 531, 166, 0, 167, 532, 533, 0, 534, 535, + 0, 536, 537, 168, 538, 539, 540, 541, 0, 542, + 543, 544, 545, 546, 547, 548, 0, 549, 170, 171, + 0, 550, 551, 552, 0, 172, 0, 173, 0, 553, + 174, 175, 554, 176, 555, 556, 557, 558, 559, 0, + 0, 560, 177, 178, 561, 179, 0, 562, 563, 564, + 0, 0, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 0, 574, 575, 0, 576, 577, 578, 184, 185, + 186, 579, 580, 581, 582, 583, 584, 585, 187, 188, + 586, 0, 587, 588, 190, 589, 0, 191, 590, 192, + 591, 592, 593, 0, 594, 595, 2157, 0, 596, 597, + 598, 0, 0, 599, 600, 193, 194, 601, 195, 196, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 611, 612, 197, 613, 198, 614, 615, 616, 0, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 200, + 627, 628, 629, 630, 0, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 0, 644, + 645, 207, 646, 647, 648, 649, 650, 209, 651, 652, + 653, 654, 655, 656, 657, 0, 658, 0, 659, 660, + 661, 662, 663, 0, 665, 666, 214, 667, 668, 216, + 669, 670, 217, 671, 0, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 219, 685, + 0, 686, 687, 0, 688, 221, 689, 690, 691, 692, + 693, 0, 694, 222, 223, 0, 0, 696, 697, 224, + 698, 225, 2158, 699, 700, 701, 702, 703, 704, 705, + 706, 0, 0, 707, 708, 709, 710, 711, 0, 0, + 712, 713, 714, 715, 716, 0, 232, 0, 717, 233, + 718, 719, 720, 721, 0, 0, 722, 0, 0, 723, + 724, 725, 726, 727, 728, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 0, 729, 730, 0, + 35, 429, 0, 0, 37, 0, 38, 39, 0, 0, + 1869, 1870, 40, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 437, 0, + 438, 439, 440, 0, 0, 0, 0, 0, 0, 0, + 441, 442, 443, 0, 444, 445, 446, 447, 126, 448, + 449, 450, 128, 129, 130, 131, 132, 0, 451, 452, + 453, 454, 455, 456, 457, 0, 0, 458, 459, 0, + 134, 460, 0, 461, 462, 463, 464, 138, 0, 139, + 0, 465, 466, 467, 468, 469, 470, 142, 471, 472, + 0, 0, 473, 474, 475, 476, 477, 478, 0, 145, + 479, 480, 0, 0, 0, 0, 146, 0, 0, 0, + 483, 484, 485, 486, 0, 487, 149, 150, 488, 2974, + 489, 0, 490, 491, 492, 493, 494, 495, 496, 0, + 497, 498, 499, 500, 0, 0, 501, 502, 503, 504, + 505, 0, 506, 507, 508, 0, 509, 510, 511, 0, + 512, 513, 514, 515, 158, 516, 517, 518, 519, 160, + 2156, 520, 0, 521, 522, 523, 162, 524, 0, 525, + 0, 526, 163, 0, 164, 527, 528, 529, 530, 0, + 531, 166, 0, 167, 532, 533, 0, 534, 535, 0, + 536, 537, 168, 538, 539, 540, 541, 0, 542, 543, + 544, 545, 546, 547, 548, 0, 549, 170, 171, 0, + 550, 551, 552, 0, 172, 0, 173, 0, 553, 174, + 175, 554, 176, 555, 556, 557, 558, 559, 0, 0, + 560, 177, 178, 561, 179, 0, 562, 563, 564, 0, + 0, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 0, 574, 575, 0, 576, 577, 578, 184, 185, 186, + 579, 580, 581, 582, 583, 584, 585, 187, 188, 586, + 0, 587, 588, 190, 589, 0, 191, 590, 192, 591, + 592, 593, 0, 594, 595, 2157, 0, 596, 597, 598, + 0, 0, 599, 600, 193, 194, 601, 195, 196, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 611, + 612, 197, 613, 198, 614, 615, 616, 0, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 200, 627, + 628, 629, 630, 0, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 0, 644, 645, + 207, 646, 647, 648, 649, 650, 209, 651, 652, 653, + 654, 655, 656, 657, 0, 658, 0, 659, 660, 661, + 662, 663, 0, 665, 666, 214, 667, 668, 216, 669, + 670, 217, 671, 0, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 219, 685, 0, + 686, 687, 0, 688, 221, 689, 690, 691, 692, 693, + 0, 694, 222, 223, 0, 0, 696, 697, 224, 698, + 225, 2158, 699, 700, 701, 702, 703, 704, 705, 706, + 0, 0, 707, 708, 709, 710, 711, 0, 0, 712, + 713, 714, 715, 716, 0, 232, 0, 717, 233, 718, + 719, 720, 721, 0, 0, 722, 0, 0, 723, 724, + 725, 726, 727, 728, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 0, 729, 730, 0, 35, + 429, 0, 0, 37, 0, 38, 39, 0, 0, 1869, + 1870, 40, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 129, 130, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 0, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 0, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 0, 146, 0, 0, 0, 483, + 484, 485, 486, 0, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 2156, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 0, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 0, + 574, 575, 0, 576, 577, 578, 184, 185, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 190, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 2157, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 0, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 216, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 2158, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 0, 232, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 0, 729, 730, 0, 35, 429, + 0, 0, 37, 0, 0, 39, 0, 0, 1869, 1870, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 430, + 431, 432, 433, 434, 435, 436, 437, 0, 438, 439, + 440, 0, 0, 0, 0, 0, 0, 0, 441, 442, + 443, 0, 444, 445, 446, 447, 126, 448, 449, 450, + 128, 129, 130, 131, 132, 0, 451, 452, 453, 454, + 455, 456, 457, 0, 0, 458, 459, 0, 134, 460, + 0, 461, 462, 463, 464, 138, 0, 139, 0, 465, + 466, 467, 468, 469, 470, 142, 471, 472, 0, 0, + 473, 474, 475, 476, 477, 478, 0, 145, 479, 480, + 0, 0, 0, 0, 146, 0, 0, 0, 483, 484, + 485, 486, 0, 487, 149, 150, 488, 3906, 489, 0, + 490, 491, 492, 493, 494, 495, 496, 0, 497, 498, + 499, 500, 0, 0, 501, 502, 503, 504, 505, 0, + 506, 507, 508, 0, 509, 510, 511, 0, 512, 513, + 514, 515, 158, 516, 517, 518, 519, 160, 2156, 520, + 0, 521, 522, 523, 162, 524, 0, 525, 0, 526, + 163, 0, 164, 527, 528, 529, 530, 0, 531, 166, + 0, 167, 532, 533, 0, 534, 535, 0, 536, 537, + 168, 538, 539, 540, 541, 0, 542, 543, 544, 545, + 546, 547, 548, 0, 549, 170, 171, 0, 550, 551, + 552, 0, 172, 0, 173, 0, 553, 174, 175, 554, + 176, 555, 556, 557, 558, 559, 0, 0, 560, 177, + 178, 561, 179, 0, 562, 563, 564, 0, 0, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 0, 574, + 575, 0, 576, 577, 578, 184, 185, 186, 579, 580, + 581, 582, 583, 584, 585, 187, 188, 586, 0, 587, + 588, 190, 589, 0, 191, 590, 192, 591, 592, 593, + 0, 594, 595, 2157, 0, 596, 597, 598, 0, 0, + 599, 600, 193, 194, 601, 195, 196, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 611, 612, 197, + 613, 198, 614, 615, 616, 0, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 200, 627, 628, 629, + 630, 0, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 0, 644, 645, 207, 646, + 647, 648, 649, 650, 209, 651, 652, 653, 654, 655, + 656, 657, 0, 658, 0, 659, 660, 661, 662, 663, + 0, 665, 666, 214, 667, 668, 216, 669, 670, 217, + 671, 0, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 219, 685, 0, 686, 687, + 0, 688, 221, 689, 690, 691, 692, 693, 0, 694, + 222, 223, 0, 0, 696, 697, 224, 698, 225, 2158, + 699, 700, 701, 702, 703, 704, 705, 706, 0, 0, + 707, 708, 709, 710, 711, 0, 0, 712, 713, 714, + 715, 716, 0, 232, 0, 717, 233, 718, 719, 720, + 721, 0, 0, 722, 0, 0, 723, 724, 725, 726, + 727, 728, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 0, 729, 730, 35, 429, 0, 0, + 37, 0, 0, 39, 0, 0, 0, 1099, 1100, 0, + 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, + 433, 434, 435, 436, 437, 0, 438, 439, 440, 0, + 0, 0, 0, 0, 0, 0, 441, 442, 443, 0, + 444, 445, 446, 447, 126, 448, 449, 450, 128, 129, + 130, 131, 132, 0, 451, 452, 453, 454, 455, 456, + 457, 0, 0, 458, 459, 0, 134, 460, 0, 461, + 462, 463, 464, 138, 0, 139, 0, 465, 466, 467, + 468, 469, 470, 142, 471, 472, 0, 0, 473, 474, + 475, 476, 477, 478, 0, 145, 479, 480, 0, 0, + 0, 481, 146, 0, 0, 482, 483, 484, 485, 486, + 0, 487, 149, 150, 488, 0, 489, 0, 490, 491, + 492, 493, 494, 495, 496, 0, 497, 498, 499, 500, + 0, 0, 501, 502, 503, 504, 505, 0, 506, 507, + 508, 0, 509, 510, 511, 0, 512, 513, 514, 515, + 158, 516, 517, 518, 519, 160, 0, 520, 0, 521, + 522, 523, 162, 524, 0, 525, 0, 526, 163, 0, + 164, 527, 528, 529, 530, 0, 531, 166, 0, 167, + 532, 533, 0, 534, 535, 0, 536, 537, 168, 538, + 539, 540, 541, 0, 542, 543, 544, 545, 546, 547, + 548, 0, 549, 170, 171, 0, 550, 551, 552, 0, + 172, 0, 173, 0, 553, 174, 175, 554, 176, 555, + 556, 557, 558, 559, 0, 0, 560, 177, 178, 561, + 179, 0, 562, 563, 564, 0, 0, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 0, 574, 575, 0, + 576, 577, 578, 184, 185, 186, 579, 580, 581, 582, + 583, 584, 585, 187, 188, 586, 0, 587, 588, 190, + 589, 0, 191, 590, 192, 591, 592, 593, 0, 594, + 595, 0, 0, 596, 597, 598, 0, 0, 599, 600, + 193, 194, 601, 195, 196, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 611, 612, 197, 613, 198, + 614, 615, 616, 0, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 200, 627, 628, 629, 630, 0, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 0, 644, 645, 207, 646, 647, 648, + 649, 650, 209, 651, 652, 653, 654, 655, 656, 657, + 0, 658, 0, 659, 660, 661, 662, 663, 664, 665, + 666, 214, 667, 668, 216, 669, 670, 217, 671, 0, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 219, 685, 0, 686, 687, 0, 688, + 221, 689, 690, 691, 692, 693, 0, 694, 222, 223, + 695, 0, 696, 697, 224, 698, 225, 0, 699, 700, + 701, 702, 703, 704, 705, 706, 0, 0, 707, 708, + 709, 710, 711, 0, 0, 712, 713, 714, 715, 716, + 0, 232, 0, 717, 233, 718, 719, 720, 721, 0, + 0, 722, 0, 0, 723, 724, 725, 726, 727, 728, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 0, 729, 730, 35, 429, 0, 0, 37, 0, + 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 0, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 139, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 0, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 0, 0, 481, + 146, 0, 0, 482, 483, 484, 485, 486, 0, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 0, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 178, 561, 179, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 0, 574, 575, 0, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 190, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 0, 658, + 0, 659, 660, 661, 662, 663, 664, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 0, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 35, + 729, 730, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 1337, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 129, 130, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 0, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 0, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 481, 146, 0, 0, 482, 483, + 484, 485, 486, 0, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 0, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 0, + 574, 575, 0, 576, 577, 578, 184, 185, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 190, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 0, 658, 0, 659, 660, 661, 662, + 663, 664, 665, 666, 214, 667, 668, 216, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 0, 232, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 35, 729, 730, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 1358, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 0, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 139, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 0, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 0, 0, 481, + 146, 0, 0, 482, 483, 484, 485, 486, 0, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 0, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 178, 561, 179, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 1359, + 570, 571, 572, 573, 0, 574, 575, 0, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 190, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 0, 658, + 0, 659, 660, 661, 662, 663, 664, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 0, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 35, + 729, 730, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 129, 130, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 0, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 0, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 481, 146, 0, 0, 482, 483, + 484, 485, 486, 0, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 0, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 0, + 574, 575, 0, 576, 577, 578, 184, 185, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 190, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 0, 658, 0, 659, 660, 661, 662, + 663, 664, 665, 666, 214, 667, 668, 216, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 3357, 0, 712, 713, + 714, 715, 716, 0, 232, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 35, 729, 730, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 0, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 139, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 0, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 0, 0, 481, + 146, 0, 0, 482, 483, 484, 485, 486, 0, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 166, 4380, 167, 532, 533, + 0, 534, 535, 0, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 178, 561, 179, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 0, 574, 575, 0, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 190, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 0, 658, + 0, 659, 660, 661, 662, 663, 664, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 0, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 35, + 729, 730, 0, 37, 0, 0, 39, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 129, 130, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 0, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 0, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 0, 146, 0, 0, 0, 483, + 484, 485, 486, 0, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 2156, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 0, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 0, + 574, 575, 0, 576, 577, 578, 184, 185, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 190, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 2157, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 0, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 216, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 2158, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 0, 232, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 35, 729, 730, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 0, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 139, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 0, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 0, 0, 481, + 146, 0, 0, 482, 483, 484, 485, 486, 0, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 0, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 178, 561, 179, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 0, 574, 575, 0, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 190, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 0, 658, + 0, 659, 660, 661, 662, 663, 664, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 0, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 35, + 729, 730, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 129, 130, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 0, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 0, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 481, 146, 0, 0, 482, 483, + 484, 485, 486, 0, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 0, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 1450, 570, 571, 572, 573, 0, + 574, 575, 0, 576, 577, 578, 184, 185, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 190, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 0, 658, 0, 659, 660, 661, 662, + 663, 664, 665, 666, 214, 667, 668, 216, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 0, 232, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 35, 729, 730, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 0, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 139, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 0, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 0, 0, 481, + 146, 0, 0, 482, 483, 484, 485, 486, 0, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 0, 536, 1538, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 178, 561, 179, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 0, 574, 575, 0, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 190, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 0, 658, + 0, 659, 660, 661, 662, 663, 664, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 0, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 35, + 729, 730, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 129, 130, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 0, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 0, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 481, 146, 0, 0, 482, 483, + 484, 485, 486, 0, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 0, 536, + 1551, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 0, + 574, 575, 0, 576, 577, 578, 184, 185, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 190, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 0, 658, 0, 659, 660, 661, 662, + 663, 664, 665, 666, 214, 667, 668, 216, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 0, 232, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 35, 729, 730, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 0, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 139, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 0, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 0, 0, 481, + 146, 0, 0, 482, 483, 484, 485, 486, 0, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 0, 536, 1563, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 178, 561, 179, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 1564, + 570, 571, 572, 573, 0, 574, 575, 0, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 190, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 0, 658, + 0, 659, 660, 661, 662, 663, 664, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 0, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 35, + 729, 730, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 123, 124, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 129, 130, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 0, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 0, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 0, 146, 0, 0, 0, 483, + 484, 485, 486, 0, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 0, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 0, + 574, 575, 0, 576, 577, 578, 184, 185, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 190, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 0, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 216, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 0, 232, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 35, 729, 730, 0, 37, 0, + 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 0, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 139, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 0, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 0, 0, 0, + 146, 0, 0, 0, 483, 484, 485, 486, 0, 487, + 149, 150, 488, 2954, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 0, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 178, 561, 179, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 0, 574, 575, 0, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 190, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 0, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 0, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 35, + 729, 730, 0, 37, 0, 0, 39, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 431, 432, 433, 434, 435, 436, 437, 0, 438, + 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, + 442, 443, 0, 444, 445, 446, 447, 126, 448, 449, + 450, 128, 129, 130, 131, 132, 0, 451, 452, 453, + 454, 455, 456, 457, 0, 0, 458, 459, 0, 134, + 460, 0, 461, 462, 463, 464, 138, 0, 139, 0, + 465, 466, 467, 468, 469, 470, 142, 471, 472, 0, + 0, 473, 474, 475, 476, 477, 478, 0, 145, 479, + 480, 0, 0, 0, 0, 146, 0, 0, 0, 483, + 484, 485, 486, 0, 487, 149, 150, 488, 0, 489, + 0, 490, 491, 492, 493, 494, 495, 496, 0, 497, + 498, 499, 500, 0, 0, 501, 502, 503, 504, 505, + 0, 506, 507, 508, 0, 509, 510, 511, 0, 512, + 513, 514, 515, 158, 516, 517, 518, 519, 160, 0, + 520, 0, 521, 522, 523, 162, 524, 0, 525, 0, + 526, 163, 0, 164, 527, 528, 529, 530, 0, 531, + 166, 0, 167, 532, 533, 0, 534, 535, 0, 536, + 537, 168, 538, 539, 540, 541, 0, 542, 543, 544, + 545, 546, 547, 548, 0, 549, 170, 171, 0, 550, + 551, 552, 0, 172, 0, 173, 0, 553, 174, 175, + 554, 176, 555, 556, 557, 558, 559, 0, 0, 560, + 177, 178, 561, 179, 0, 562, 563, 564, 0, 0, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 0, + 574, 575, 0, 576, 577, 578, 184, 185, 186, 579, + 580, 581, 582, 583, 584, 585, 187, 188, 586, 0, + 587, 588, 190, 589, 0, 191, 590, 192, 591, 592, + 593, 0, 594, 595, 0, 0, 596, 597, 598, 0, + 0, 599, 600, 193, 194, 601, 195, 196, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 611, 612, + 197, 613, 198, 614, 615, 616, 0, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 200, 627, 628, + 629, 630, 0, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 0, 644, 645, 207, + 646, 647, 648, 649, 650, 209, 651, 652, 653, 654, + 655, 656, 657, 0, 658, 0, 659, 660, 661, 662, + 663, 0, 665, 666, 214, 667, 668, 216, 669, 670, + 217, 671, 0, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 219, 685, 0, 686, + 687, 0, 688, 221, 689, 690, 691, 692, 693, 0, + 694, 222, 223, 0, 0, 696, 697, 224, 698, 225, + 0, 699, 700, 701, 702, 703, 704, 705, 706, 0, + 0, 707, 708, 709, 710, 711, 0, 0, 712, 713, + 714, 715, 716, 0, 232, 0, 717, 233, 718, 719, + 720, 721, 0, 0, 722, 0, 0, 723, 724, 725, + 726, 727, 728, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 35, 729, 730, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, + 435, 436, 437, 0, 438, 439, 440, 0, 0, 0, + 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, + 446, 447, 126, 448, 449, 450, 128, 129, 130, 131, + 132, 0, 451, 452, 453, 454, 455, 456, 457, 0, + 0, 458, 459, 0, 134, 460, 0, 461, 462, 463, + 464, 138, 0, 139, 0, 465, 466, 467, 468, 469, + 470, 142, 471, 472, 0, 0, 473, 474, 475, 476, + 477, 478, 0, 145, 479, 480, 0, 0, 0, 0, + 146, 0, 0, 0, 483, 484, 485, 486, 0, 487, + 149, 150, 488, 0, 489, 0, 490, 491, 492, 493, + 494, 495, 496, 0, 497, 498, 499, 500, 0, 0, + 501, 502, 503, 504, 505, 0, 506, 507, 508, 0, + 509, 510, 511, 0, 512, 513, 514, 515, 158, 516, + 517, 518, 519, 160, 0, 520, 0, 521, 522, 523, + 162, 524, 0, 525, 0, 526, 163, 0, 164, 527, + 528, 529, 530, 0, 531, 166, 0, 167, 532, 533, + 0, 534, 535, 0, 536, 537, 168, 538, 539, 540, + 541, 0, 542, 543, 544, 545, 546, 547, 548, 0, + 549, 170, 171, 0, 550, 551, 552, 0, 172, 0, + 173, 0, 553, 174, 175, 554, 176, 555, 556, 557, + 558, 559, 0, 0, 560, 177, 178, 561, 179, 0, + 562, 563, 564, 0, 0, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 0, 574, 575, 0, 576, 577, + 578, 184, 185, 186, 579, 580, 581, 582, 583, 584, + 585, 187, 188, 586, 0, 587, 588, 190, 589, 0, + 191, 590, 192, 591, 592, 593, 0, 594, 595, 0, + 0, 596, 597, 598, 0, 0, 599, 600, 193, 194, + 601, 195, 196, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 611, 612, 197, 613, 198, 614, 615, + 616, 0, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 200, 627, 628, 629, 630, 0, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 0, 644, 645, 207, 646, 647, 648, 649, 650, + 209, 651, 652, 653, 654, 655, 656, 657, 0, 658, + 0, 659, 660, 661, 662, 663, 0, 665, 666, 214, + 667, 668, 216, 669, 670, 217, 671, 0, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 219, 685, 0, 686, 687, 0, 688, 221, 689, + 690, 691, 692, 693, 0, 694, 222, 223, 0, 0, + 696, 697, 224, 698, 225, 0, 699, 700, 701, 702, + 703, 704, 705, 706, 0, 0, 707, 708, 709, 710, + 711, 0, 0, 712, 713, 714, 715, 716, 0, 232, + 0, 717, 233, 718, 719, 720, 721, 0, 0, 722, + 0, 0, 723, 724, 725, 726, 727, 728, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 0, + 729, 730 +}; + +static const yytype_int16 yycheck[] = +{ + 2, 1373, 247, 73, 73, 73, 73, 73, 73, 73, + 110, 73, 73, 73, 957, 73, 73, 73, 1189, 73, + 161, 73, 79, 73, 73, 1222, 73, 914, 73, 978, + 73, 220, 1344, 88, 1381, 922, 79, 206, 925, 1172, + 375, 1167, 183, 919, 226, 1541, 392, 1508, 392, 148, + 2072, 1377, 151, 110, 1921, 1250, 156, 2, 1293, 1109, + 1110, 1111, 1216, 1064, 1218, 1115, 1949, 2011, 1345, 1023, + 125, 1194, 1511, 1995, 1195, 3426, 1371, 1496, 1497, 2351, + 1023, 83, 1137, 1445, 791, 90, 1656, 1506, 3632, 1179, + 159, 1046, 147, 148, 159, 100, 151, 1988, 1361, 156, + 199, 3492, 157, 1434, 110, 1060, 1344, 3108, 3109, 3788, + 905, 919, 1995, 3985, 2000, 1353, 1311, 2229, 1449, 4258, + 3609, 1988, 1072, 1526, 2416, 1363, 3324, 1269, 228, 3842, + 2943, 136, 165, 1076, 3958, 1310, 4285, 2433, 2140, 1269, + 133, 4011, 1269, 4013, 199, 147, 151, 1203, 4307, 915, + 156, 153, 4582, 125, 3454, 792, 3439, 1420, 924, 4638, + 1335, 1424, 2106, 2107, 3345, 1340, 1429, 1863, 1864, 1865, + 978, 228, 938, 206, 110, 1438, 363, 4681, 122, 181, + 2286, 1621, 1305, 959, 377, 3851, 1381, 1059, 1451, 4207, + 4634, 1075, 1135, 1927, 1044, 4537, 1978, 1047, 377, 205, + 4921, 4905, 205, 1101, 4543, 213, 4867, 213, 110, 215, + 976, 4904, 215, 4917, 2100, 4909, 982, 1858, 1859, 246, + 156, 1175, 228, 3816, 5434, 2337, 2937, 1490, 994, 3712, + 5567, 161, 1175, 1041, 4716, 5733, 5442, 3391, 2984, 3393, + 3394, 2127, 5384, 3023, 3398, 3399, 3400, 4908, 3402, 3403, + 3404, 3025, 2034, 183, 156, 5227, 3002, 1302, 1201, 1579, + 3884, 4272, 1385, 1494, 1495, 3739, 1685, 1686, 4604, 2051, + 1213, 5194, 20, 5769, 1505, 5583, 1715, 5585, 5781, 1604, + 5763, 1219, 13, 1219, 29, 9, 1705, 5648, 4340, 1067, + 1335, 5433, 228, 1528, 4542, 1340, 4544, 1264, 1265, 123, + 1007, 5061, 76, 76, 1961, 6000, 83, 76, 107, 76, + 70, 85, 86, 383, 383, 383, 383, 383, 383, 383, + 76, 383, 383, 383, 13, 383, 228, 383, 5689, 383, + 76, 383, 76, 383, 383, 392, 383, 132, 383, 70, + 13, 85, 86, 76, 75, 76, 163, 78, 79, 392, + 81, 76, 85, 86, 5010, 5011, 5012, 76, 5014, 5015, + 5016, 5017, 5018, 76, 1414, 94, 116, 116, 1266, 1267, + 427, 1091, 3855, 428, 76, 1095, 1096, 1097, 76, 76, + 2455, 76, 76, 5983, 427, 1105, 899, 3454, 85, 86, + 85, 86, 76, 98, 4898, 112, 83, 70, 104, 76, + 132, 112, 76, 1458, 147, 76, 242, 79, 70, 242, + 242, 149, 98, 75, 76, 149, 237, 1588, 154, 81, + 266, 188, 188, 132, 132, 101, 69, 114, 286, 242, + 73, 3960, 132, 69, 70, 286, 190, 73, 1381, 75, + 76, 70, 4924, 1674, 1675, 81, 75, 76, 70, 78, + 79, 98, 81, 75, 98, 242, 1940, 5429, 105, 81, + 147, 105, 1169, 242, 360, 1827, 141, 5696, 5697, 1700, + 98, 286, 137, 354, 270, 242, 132, 105, 70, 208, + 96, 99, 3782, 1809, 355, 1435, 70, 5885, 193, 81, + 374, 75, 393, 251, 6359, 149, 355, 81, 410, 6194, + 215, 1796, 111, 119, 244, 1392, 6002, 242, 190, 1396, + 425, 1398, 94, 442, 83, 400, 159, 6428, 6429, 1395, + 83, 244, 160, 429, 132, 471, 104, 234, 242, 3282, + 132, 1587, 132, 192, 242, 132, 290, 149, 425, 5900, + 483, 234, 3842, 98, 219, 114, 5854, 83, 160, 191, + 242, 507, 188, 21, 339, 901, 370, 901, 7, 344, + 5770, 10, 11, 425, 239, 69, 70, 69, 70, 70, + 213, 73, 21, 22, 23, 280, 25, 26, 147, 81, + 81, 30, 31, 32, 6184, 339, 1757, 1395, 243, 1644, + 149, 1386, 274, 1548, 408, 457, 413, 2058, 160, 1794, + 1771, 160, 70, 296, 1799, 1800, 149, 242, 3361, 394, + 149, 567, 1735, 83, 526, 190, 149, 249, 505, 414, + 262, 567, 36, 330, 38, 161, 208, 570, 287, 272, + 1801, 1802, 6543, 356, 519, 335, 1513, 549, 249, 1762, + 695, 570, 396, 6338, 222, 744, 745, 183, 203, 285, + 390, 195, 567, 335, 6519, 264, 507, 339, 570, 1536, + 531, 567, 420, 281, 1990, 281, 567, 526, 210, 1546, + 335, 307, 1627, 1550, 570, 471, 259, 1554, 1734, 1556, + 395, 120, 414, 567, 193, 1562, 567, 4216, 1643, 744, + 745, 1568, 507, 695, 1571, 94, 483, 6193, 4716, 182, + 286, 1599, 1657, 6101, 483, 414, 1604, 1661, 2192, 1593, + 2041, 386, 570, 442, 414, 181, 483, 222, 1661, 5423, + 571, 429, 453, 4741, 570, 83, 1964, 6422, 98, 286, + 435, 567, 181, 376, 483, 411, 791, 570, 570, 4878, + 459, 460, 442, 567, 933, 483, 567, 516, 101, 483, + 92, 468, 512, 570, 567, 427, 114, 468, 414, 507, + 2091, 497, 512, 512, 453, 5727, 2138, 2139, 567, 4641, + 5109, 1966, 5532, 1286, 2431, 570, 505, 483, 5120, 4918, + 453, 1976, 5124, 5993, 2022, 471, 563, 270, 512, 147, + 557, 557, 565, 567, 567, 1851, 569, 897, 567, 1577, + 505, 2078, 569, 6498, 2067, 452, 414, 2070, 452, 208, + 518, 567, 414, 561, 414, 528, 570, 414, 1819, 6419, + 565, 567, 565, 567, 452, 500, 569, 558, 559, 483, + 528, 1076, 5168, 6329, 567, 570, 549, 1791, 570, 6342, + 897, 2136, 567, 2339, 901, 6328, 6541, 2022, 1791, 5505, + 488, 549, 567, 567, 567, 498, 1799, 1800, 901, 6357, + 5108, 570, 5110, 506, 2059, 567, 509, 2062, 2063, 567, + 567, 483, 567, 567, 1594, 324, 563, 1597, 570, 221, + 1600, 187, 1602, 567, 2303, 1605, 3887, 1222, 3889, 1609, + 567, 897, 1079, 567, 2390, 963, 567, 559, 963, 963, + 6129, 963, 963, 4101, 4102, 2401, 4924, 1845, 4106, 1845, + 1009, 1878, 567, 6274, 570, 4404, 4968, 4969, 4970, 4971, + 4972, 483, 558, 559, 483, 339, 6287, 5889, 6424, 558, + 559, 6239, 1121, 382, 509, 570, 558, 559, 570, 183, + 483, 1986, 526, 2383, 483, 3051, 429, 1088, 2145, 1090, + 483, 1092, 1007, 242, 1009, 5878, 4828, 1098, 960, 570, + 4243, 897, 570, 507, 4438, 549, 558, 559, 570, 167, + 570, 370, 4983, 570, 558, 559, 415, 2172, 3791, 6189, + 522, 1122, 1123, 569, 567, 3091, 6192, 470, 471, 3095, + 2035, 560, 561, 562, 563, 897, 505, 560, 561, 562, + 563, 6497, 4626, 4827, 183, 471, 1195, 2052, 378, 408, + 1075, 132, 69, 570, 258, 1070, 73, 522, 1211, 1074, + 69, 1023, 1024, 193, 73, 181, 5998, 76, 2348, 6171, + 76, 4185, 1211, 107, 76, 6396, 193, 1226, 145, 2364, + 254, 3821, 242, 442, 493, 2370, 6188, 181, 3822, 0, + 248, 2282, 2283, 236, 80, 129, 24, 83, 411, 3805, + 443, 87, 88, 89, 97, 1067, 266, 437, 1073, 343, + 254, 355, 425, 6571, 427, 319, 2479, 121, 322, 258, + 2029, 141, 28, 425, 567, 1090, 286, 1092, 558, 559, + 560, 561, 562, 563, 360, 157, 76, 1102, 221, 5760, + 335, 24, 159, 445, 157, 475, 180, 477, 5721, 182, + 280, 510, 1301, 192, 1169, 254, 1171, 1122, 1123, 4602, + 6330, 335, 1067, 280, 1126, 6462, 483, 160, 188, 4953, + 388, 221, 69, 6339, 183, 488, 73, 6099, 200, 1196, + 319, 3852, 6104, 322, 5623, 183, 319, 200, 4741, 322, + 2476, 335, 6349, 1196, 181, 212, 354, 242, 1160, 13, + 1090, 442, 1092, 76, 286, 1173, 218, 1173, 1170, 1177, + 76, 1177, 1174, 1175, 1176, 449, 4889, 1204, 73, 485, + 286, 266, 5664, 2354, 567, 1961, 246, 254, 2238, 433, + 13, 181, 1122, 1123, 483, 269, 335, 270, 381, 1171, + 558, 559, 560, 561, 562, 563, 4207, 80, 287, 258, + 83, 244, 2155, 570, 87, 88, 89, 261, 416, 2275, + 258, 2029, 266, 529, 6430, 1295, 425, 286, 6434, 5568, + 5572, 370, 284, 141, 4534, 5577, 335, 4537, 5580, 354, + 6437, 3108, 526, 317, 354, 352, 320, 106, 294, 5753, + 242, 188, 160, 310, 433, 102, 103, 188, 239, 303, + 433, 335, 1264, 1265, 159, 2398, 2399, 1269, 557, 408, + 319, 5965, 471, 322, 266, 1375, 511, 167, 5417, 339, + 569, 319, 5431, 567, 344, 237, 374, 3209, 5992, 570, + 6496, 6012, 3178, 414, 286, 369, 5455, 511, 5991, 4300, + 544, 5995, 344, 5964, 570, 1250, 6010, 507, 360, 567, + 372, 219, 360, 370, 282, 471, 5188, 193, 1375, 372, + 167, 491, 445, 567, 1269, 188, 386, 511, 526, 188, + 356, 239, 278, 5994, 5947, 505, 6542, 471, 4638, 413, + 187, 2342, 402, 1349, 1350, 335, 1349, 1350, 505, 349, + 2473, 24, 247, 6550, 2309, 445, 429, 390, 248, 282, + 6566, 34, 436, 6569, 344, 544, 1311, 3253, 2323, 1375, + 568, 571, 511, 571, 374, 222, 2432, 2433, 3380, 1381, + 243, 2336, 456, 2439, 433, 507, 3120, 571, 2389, 2445, + 2446, 2447, 2393, 266, 427, 433, 2397, 470, 471, 2400, + 2456, 507, 339, 447, 280, 2461, 69, 344, 339, 2281, + 73, 3052, 439, 3054, 476, 288, 3198, 474, 80, 476, + 2307, 83, 5936, 476, 5938, 87, 88, 89, 5942, 5943, + 183, 344, 5876, 94, 355, 2312, 1381, 167, 344, 1375, + 500, 526, 2318, 2320, 511, 107, 545, 499, 507, 3471, + 565, 94, 243, 486, 569, 488, 2306, 187, 410, 492, + 80, 5, 2334, 83, 354, 138, 2364, 87, 88, 89, + 2265, 2321, 2370, 1375, 2324, 2359, 5980, 340, 386, 567, + 24, 6185, 377, 356, 104, 5989, 83, 442, 383, 1734, + 34, 507, 222, 523, 568, 544, 159, 242, 429, 349, + 5166, 360, 191, 167, 2453, 258, 4995, 401, 5850, 2317, + 2318, 5381, 138, 139, 80, 507, 5005, 83, 507, 94, + 568, 266, 570, 1467, 374, 100, 416, 157, 1593, 555, + 556, 557, 558, 559, 560, 561, 562, 563, 6042, 354, + 570, 286, 2392, 4934, 359, 2395, 2396, 208, 114, 212, + 147, 567, 1088, 244, 1090, 121, 1092, 404, 2930, 435, + 355, 1907, 1098, 1907, 442, 208, 319, 567, 171, 322, + 200, 4638, 190, 262, 1576, 1577, 242, 1579, 567, 571, + 258, 147, 373, 253, 248, 1640, 1122, 1123, 435, 4889, + 4890, 1596, 500, 1598, 138, 76, 1601, 313, 1603, 3490, + 266, 1606, 1607, 1608, 94, 526, 2932, 3682, 3683, 282, + 2936, 201, 3687, 6092, 1619, 570, 188, 349, 512, 3486, + 286, 211, 5771, 3490, 471, 160, 288, 1814, 1633, 505, + 1635, 1576, 1577, 208, 1579, 1637, 526, 1830, 1831, 349, + 1833, 319, 374, 3104, 507, 2453, 5664, 310, 251, 3724, + 3725, 1830, 1831, 188, 1833, 2431, 4854, 448, 1847, 1661, + 442, 247, 4816, 207, 374, 356, 513, 4821, 288, 6173, + 517, 94, 6102, 188, 404, 313, 193, 100, 568, 526, + 433, 571, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 208, 570, 4891, 356, 261, 3802, 358, 557, 470, + 266, 6215, 549, 292, 133, 435, 565, 370, 567, 568, + 569, 570, 141, 429, 1250, 4716, 4897, 567, 208, 2356, + 567, 307, 1777, 1778, 98, 395, 344, 370, 1264, 1265, + 316, 526, 335, 1269, 1736, 506, 356, 303, 282, 190, + 4741, 471, 372, 1745, 340, 408, 335, 6335, 6336, 412, + 108, 412, 413, 237, 429, 433, 426, 1759, 474, 485, + 80, 218, 507, 83, 248, 408, 961, 87, 88, 89, + 461, 98, 344, 190, 442, 1311, 203, 471, 205, 442, + 370, 442, 266, 513, 104, 208, 3133, 503, 570, 1791, + 356, 544, 1794, 1795, 319, 370, 526, 1799, 1800, 442, + 1857, 1858, 1859, 529, 339, 1777, 1778, 2978, 400, 156, + 231, 474, 528, 476, 567, 1858, 1859, 109, 408, 549, + 5120, 1876, 6326, 4890, 5124, 152, 571, 1927, 155, 203, + 245, 123, 3528, 408, 161, 567, 474, 567, 6268, 290, + 198, 507, 231, 5982, 436, 1381, 476, 304, 237, 1794, + 1907, 567, 6001, 368, 1799, 1800, 445, 567, 1915, 160, + 231, 266, 189, 526, 1907, 503, 383, 442, 94, 369, + 1927, 1066, 1915, 290, 100, 3070, 1878, 480, 307, 471, + 370, 447, 408, 304, 412, 483, 233, 179, 339, 475, + 528, 477, 567, 555, 556, 557, 558, 559, 560, 561, + 562, 563, 570, 3036, 1876, 571, 316, 2096, 433, 505, + 483, 6499, 339, 6417, 442, 304, 505, 503, 408, 246, + 435, 1927, 339, 4924, 1869, 1870, 420, 519, 335, 567, + 351, 1937, 259, 304, 418, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 271, 396, 247, 370, 3090, 1894, + 1895, 369, 442, 5497, 6433, 1857, 471, 483, 180, 557, + 3090, 413, 351, 3090, 218, 127, 1161, 370, 288, 270, + 3208, 569, 1978, 2043, 5798, 369, 358, 231, 2048, 396, + 3292, 547, 208, 237, 557, 408, 369, 279, 370, 6493, + 442, 1927, 558, 559, 560, 561, 562, 563, 513, 191, + 451, 408, 109, 408, 370, 408, 307, 412, 75, 424, + 3341, 526, 506, 156, 81, 430, 123, 3884, 293, 442, + 360, 1966, 437, 385, 442, 1927, 408, 3894, 2034, 1076, + 284, 1976, 5383, 435, 549, 197, 356, 442, 6187, 442, + 3536, 385, 313, 335, 517, 2051, 6205, 238, 442, 517, + 304, 2121, 567, 80, 3292, 2125, 83, 472, 359, 442, + 87, 88, 89, 190, 4086, 242, 188, 6546, 963, 471, + 262, 5422, 179, 5617, 2076, 5619, 442, 104, 220, 494, + 231, 272, 2084, 244, 3975, 228, 237, 485, 1135, 266, + 2190, 3329, 432, 5963, 567, 317, 526, 351, 320, 567, + 188, 3296, 243, 225, 3435, 2982, 360, 5407, 3975, 3304, + 237, 513, 3307, 5792, 2059, 2, 277, 2062, 2063, 5402, + 292, 526, 121, 485, 4420, 3363, 268, 3458, 3459, 3460, + 3461, 458, 3463, 2190, 461, 276, 518, 259, 247, 431, + 570, 485, 141, 6015, 549, 94, 427, 274, 101, 237, + 291, 3272, 3273, 304, 1201, 3276, 155, 3488, 429, 370, + 301, 6534, 4164, 335, 567, 567, 1213, 529, 4170, 3344, + 408, 245, 279, 5371, 475, 128, 477, 3374, 3375, 3376, + 1075, 1076, 6331, 370, 2190, 529, 73, 488, 427, 567, + 3133, 5345, 79, 5347, 5348, 5349, 83, 408, 307, 500, + 351, 412, 503, 474, 442, 6344, 370, 488, 335, 208, + 159, 6584, 339, 6037, 2216, 149, 571, 339, 2220, 2408, + 2043, 408, 4108, 110, 396, 2048, 160, 2172, 335, 528, + 571, 442, 503, 370, 6106, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 408, 499, 133, 3510, 4360, 488, + 549, 3206, 201, 429, 2190, 442, 2425, 528, 1794, 208, + 147, 288, 211, 1799, 1800, 5565, 5945, 4153, 567, 156, + 83, 408, 5572, 445, 6423, 5988, 570, 5577, 419, 149, + 5580, 3168, 458, 3170, 3171, 526, 4578, 218, 2190, 5661, + 160, 400, 507, 3169, 2359, 162, 567, 313, 2121, 313, + 231, 114, 2125, 526, 237, 442, 237, 313, 549, 5609, + 313, 565, 526, 3434, 568, 569, 1211, 391, 205, 3320, + 168, 3322, 5811, 5623, 431, 3326, 213, 260, 215, 356, + 313, 5144, 5704, 505, 147, 549, 80, 4281, 205, 83, + 5407, 228, 1878, 87, 88, 89, 2348, 570, 2416, 2351, + 424, 2416, 2416, 284, 2416, 2416, 2361, 571, 2363, 180, + 104, 3169, 2367, 437, 2369, 573, 475, 2372, 477, 528, + 3165, 2376, 329, 304, 4449, 4450, 4451, 4452, 3085, 526, + 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, + 549, 2424, 3795, 408, 503, 243, 353, 39, 472, 6271, + 80, 2501, 549, 2348, 3599, 6544, 2351, 87, 88, 89, + 519, 370, 6091, 429, 370, 429, 141, 238, 526, 282, + 351, 370, 147, 429, 571, 526, 429, 442, 276, 360, + 1966, 3481, 313, 483, 5632, 160, 49, 4512, 4513, 3205, + 1976, 549, 2444, 291, 2501, 404, 429, 412, 123, 408, + 237, 272, 408, 301, 67, 404, 3512, 507, 474, 408, + 474, 396, 570, 188, 388, 190, 18, 19, 474, 570, + 5622, 474, 313, 260, 409, 370, 3895, 442, 5630, 327, + 557, 5781, 3922, 442, 117, 37, 442, 503, 40, 503, + 3440, 474, 569, 442, 169, 2501, 317, 503, 5565, 320, + 503, 80, 104, 438, 83, 392, 354, 140, 87, 88, + 89, 354, 528, 408, 528, 3281, 359, 107, 6390, 194, + 503, 246, 528, 2059, 15, 528, 2062, 2063, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 212, 528, 129, + 427, 216, 5609, 435, 288, 528, 316, 442, 429, 274, + 5850, 567, 425, 567, 427, 5709, 5623, 348, 2035, 549, + 237, 567, 96, 238, 567, 2501, 241, 488, 499, 339, + 565, 419, 3627, 3628, 526, 2052, 571, 567, 130, 471, + 413, 256, 519, 260, 567, 119, 80, 3784, 429, 83, + 180, 565, 432, 474, 3360, 3596, 2211, 549, 572, 2501, + 568, 3796, 565, 571, 567, 203, 569, 205, 294, 442, + 1339, 163, 356, 6485, 339, 488, 2231, 341, 562, 344, + 114, 513, 503, 567, 33, 569, 6017, 121, 3684, 1358, + 3507, 229, 1361, 474, 526, 567, 2172, 2983, 3515, 2983, + 3696, 558, 559, 560, 561, 562, 313, 528, 318, 1335, + 3885, 568, 204, 147, 1340, 3532, 246, 549, 567, 507, + 5229, 386, 503, 5664, 488, 3542, 4688, 5236, 3545, 344, + 3547, 3548, 3728, 410, 3551, 567, 356, 402, 3555, 269, + 3557, 5879, 432, 3560, 3961, 562, 567, 528, 5988, 5887, + 567, 5902, 569, 526, 270, 107, 5907, 5908, 1593, 316, + 565, 69, 570, 3793, 569, 73, 574, 316, 6387, 288, + 3987, 435, 570, 571, 5781, 3771, 549, 129, 568, 394, + 570, 6265, 216, 475, 3962, 477, 567, 317, 350, 400, + 320, 80, 354, 331, 332, 333, 334, 570, 571, 164, + 338, 339, 4686, 155, 4688, 335, 344, 471, 331, 332, + 333, 334, 3639, 6053, 3641, 3642, 4678, 3634, 572, 4626, + 570, 475, 429, 477, 574, 436, 566, 261, 180, 181, + 570, 4846, 266, 1668, 70, 500, 188, 356, 4664, 369, + 568, 566, 570, 5784, 203, 570, 205, 4899, 3695, 513, + 3697, 3698, 6092, 1688, 568, 2465, 3745, 571, 2468, 4037, + 471, 457, 526, 560, 561, 562, 457, 474, 695, 303, + 229, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 567, 457, 569, 413, 1719, 549, 568, 488, 570, 6508, + 4270, 85, 86, 4403, 246, 4721, 503, 318, 565, 1734, + 567, 3636, 260, 567, 568, 156, 436, 571, 519, 568, + 568, 570, 570, 3796, 102, 103, 568, 269, 570, 570, + 571, 528, 356, 526, 519, 528, 456, 168, 567, 475, + 569, 477, 128, 4204, 3581, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 568, 432, 570, 4249, 475, 294, + 477, 6191, 490, 203, 568, 205, 570, 4336, 4337, 5171, + 567, 573, 568, 501, 570, 317, 517, 6586, 320, 425, + 426, 3912, 331, 332, 333, 334, 2985, 354, 568, 338, + 570, 81, 568, 335, 570, 344, 2983, 339, 568, 568, + 570, 570, 425, 426, 107, 1830, 1831, 3745, 1833, 568, + 2983, 570, 243, 568, 568, 570, 570, 4210, 568, 568, + 570, 570, 567, 447, 3909, 3910, 129, 369, 568, 2961, + 570, 558, 559, 560, 561, 562, 3135, 4911, 3137, 566, + 526, 567, 528, 3041, 6325, 276, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 3939, 6053, 568, 3177, 570, + 291, 568, 3133, 570, 429, 3052, 3939, 3054, 425, 426, + 301, 413, 568, 568, 570, 570, 570, 180, 3816, 3052, + 897, 3054, 128, 568, 901, 570, 519, 568, 905, 570, + 3120, 425, 426, 4906, 436, 6092, 327, 914, 915, 568, + 3085, 570, 568, 156, 570, 922, 4927, 924, 925, 568, + 117, 570, 6342, 568, 456, 570, 458, 546, 3925, 461, + 568, 938, 570, 547, 568, 568, 570, 570, 4113, 568, + 4927, 570, 290, 3120, 558, 559, 560, 561, 562, 563, + 957, 490, 3074, 568, 526, 570, 528, 3022, 3023, 568, + 354, 570, 501, 3272, 3273, 6234, 6235, 3276, 3090, 976, + 569, 3093, 3094, 6365, 6366, 982, 269, 357, 568, 4054, + 570, 237, 568, 80, 570, 357, 83, 994, 340, 341, + 87, 88, 89, 568, 3120, 570, 354, 4072, 419, 3996, + 568, 3998, 570, 546, 6191, 3070, 1013, 6427, 568, 117, + 570, 3133, 568, 6433, 570, 568, 1023, 570, 357, 546, + 3240, 1028, 290, 560, 317, 3090, 1033, 320, 3093, 3094, + 1037, 1038, 568, 241, 570, 567, 5125, 1044, 5127, 1046, + 1047, 80, 335, 3263, 83, 4491, 567, 570, 87, 88, + 89, 69, 1059, 1060, 368, 73, 568, 568, 3319, 3236, + 1067, 128, 242, 3240, 3120, 568, 4236, 570, 286, 1076, + 3192, 568, 3198, 570, 567, 114, 369, 95, 560, 4639, + 4640, 571, 121, 435, 4623, 568, 3263, 570, 568, 568, + 570, 570, 568, 568, 570, 570, 4411, 568, 3120, 570, + 568, 5243, 570, 568, 568, 570, 570, 568, 147, 570, + 3236, 568, 282, 570, 3240, 568, 568, 570, 570, 471, + 413, 435, 568, 573, 570, 3434, 6546, 568, 1135, 570, + 568, 568, 570, 570, 3354, 567, 4257, 3263, 4212, 4136, + 4214, 159, 568, 436, 570, 4142, 4387, 3269, 568, 4212, + 570, 4214, 4227, 3279, 4229, 6342, 4571, 471, 573, 1166, + 1167, 513, 483, 456, 3286, 4611, 1173, 568, 1175, 570, + 1177, 568, 483, 570, 526, 107, 568, 3354, 570, 483, + 3236, 5223, 483, 568, 3240, 570, 568, 483, 570, 1196, + 568, 288, 570, 214, 1201, 213, 1203, 549, 128, 513, + 3420, 568, 568, 570, 570, 282, 1213, 3263, 568, 568, + 570, 570, 526, 288, 3236, 567, 483, 568, 3240, 570, + 569, 568, 261, 570, 568, 4299, 570, 266, 3354, 567, + 3352, 3296, 568, 530, 570, 549, 4299, 567, 567, 3304, + 6427, 3263, 3307, 3420, 408, 568, 6433, 570, 266, 568, + 568, 570, 570, 567, 272, 4376, 266, 1264, 1265, 356, + 568, 568, 570, 570, 303, 223, 569, 3389, 4444, 3391, + 223, 3393, 3394, 568, 354, 570, 3398, 3399, 3400, 4207, + 3402, 3403, 3404, 568, 568, 570, 570, 568, 1295, 570, + 568, 568, 570, 570, 3420, 568, 567, 570, 3354, 266, + 354, 4656, 4478, 4546, 4687, 568, 408, 570, 223, 223, + 266, 223, 354, 237, 408, 223, 571, 356, 302, 3684, + 190, 507, 354, 5518, 348, 567, 237, 4402, 568, 141, + 339, 107, 3354, 339, 530, 3457, 567, 354, 237, 339, + 117, 3454, 1349, 1350, 2359, 117, 339, 493, 4524, 339, + 159, 4348, 519, 4350, 370, 4352, 519, 488, 376, 6546, + 3482, 237, 389, 3728, 3420, 572, 1373, 1374, 1375, 223, + 223, 223, 567, 516, 1381, 567, 567, 382, 223, 1386, + 106, 530, 567, 223, 1391, 1392, 223, 570, 223, 1396, + 4950, 1398, 223, 223, 223, 1402, 223, 223, 3420, 237, + 223, 2416, 420, 223, 3526, 4802, 3581, 223, 447, 223, + 1417, 354, 223, 471, 3070, 567, 107, 302, 3074, 237, + 237, 354, 567, 76, 76, 567, 4741, 567, 567, 237, + 567, 567, 567, 567, 3090, 567, 76, 567, 567, 567, + 567, 4824, 567, 567, 567, 567, 76, 567, 76, 567, + 567, 469, 1459, 567, 1461, 1462, 567, 567, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 5454, 567, 567, + 527, 567, 567, 366, 3776, 3777, 3778, 3133, 567, 567, + 498, 3846, 286, 3703, 570, 570, 107, 171, 506, 3709, + 286, 509, 5073, 288, 107, 4812, 302, 570, 237, 237, + 351, 1508, 349, 442, 560, 433, 570, 282, 547, 322, + 187, 506, 557, 13, 567, 570, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 571, 3703, 570, 137, 567, + 567, 483, 3709, 483, 3599, 429, 483, 518, 483, 429, + 569, 1548, 483, 483, 304, 429, 483, 483, 483, 557, + 160, 429, 223, 354, 434, 299, 483, 80, 483, 344, + 83, 196, 483, 354, 87, 88, 89, 474, 506, 1576, + 1577, 374, 1579, 567, 483, 425, 349, 3703, 483, 259, + 1587, 104, 567, 3709, 160, 196, 370, 570, 266, 223, + 507, 114, 483, 196, 507, 483, 483, 471, 121, 471, + 483, 483, 182, 196, 483, 324, 483, 128, 483, 128, + 483, 358, 483, 393, 483, 483, 483, 483, 483, 393, + 1627, 5816, 483, 393, 147, 483, 474, 483, 374, 374, + 80, 116, 2647, 83, 1641, 116, 1643, 87, 88, 89, + 3296, 483, 483, 572, 570, 568, 288, 3703, 3304, 483, + 1657, 3307, 288, 3709, 1661, 354, 288, 288, 354, 288, + 493, 288, 288, 3319, 114, 1672, 288, 567, 288, 3782, + 288, 121, 107, 483, 3796, 223, 4991, 223, 354, 339, + 188, 3703, 507, 526, 223, 223, 518, 3709, 223, 354, + 339, 5137, 339, 310, 339, 1702, 107, 147, 107, 294, + 237, 431, 106, 567, 567, 565, 223, 569, 567, 223, + 567, 223, 481, 481, 507, 507, 5162, 483, 483, 565, + 223, 13, 483, 1730, 1731, 1732, 570, 1734, 343, 3842, + 324, 3796, 348, 242, 522, 324, 83, 232, 261, 1746, + 481, 483, 570, 266, 251, 567, 567, 1754, 567, 242, + 485, 284, 557, 568, 259, 3820, 3821, 259, 445, 355, + 292, 107, 5765, 570, 507, 288, 289, 33, 570, 9, + 570, 570, 363, 128, 568, 429, 507, 292, 568, 568, + 303, 567, 292, 344, 1791, 344, 483, 1794, 4716, 483, + 483, 237, 1799, 1800, 344, 117, 567, 4872, 4873, 354, + 451, 354, 425, 339, 302, 302, 302, 354, 483, 196, + 474, 261, 570, 4741, 354, 260, 266, 3939, 408, 342, + 5884, 483, 483, 354, 354, 1832, 396, 439, 442, 1836, + 1837, 360, 5392, 356, 4011, 4012, 4013, 107, 288, 289, + 568, 288, 294, 392, 1851, 557, 223, 237, 507, 507, + 1857, 1858, 1859, 303, 107, 349, 519, 239, 567, 393, + 439, 6056, 223, 567, 4985, 4986, 4987, 4988, 4989, 223, + 472, 1878, 223, 222, 349, 339, 526, 107, 339, 96, + 354, 354, 507, 5059, 294, 4011, 4012, 4013, 561, 349, + 257, 257, 342, 237, 107, 4017, 238, 565, 568, 568, + 1907, 568, 546, 546, 322, 294, 356, 237, 1915, 339, + 354, 5157, 568, 568, 1921, 439, 266, 95, 266, 5234, + 1927, 266, 570, 266, 447, 266, 530, 483, 249, 570, + 1937, 570, 242, 1940, 567, 321, 128, 1944, 526, 354, + 348, 242, 366, 3599, 375, 242, 570, 338, 4070, 568, + 523, 365, 316, 505, 312, 4011, 4012, 4013, 483, 546, + 568, 568, 568, 568, 128, 548, 523, 568, 568, 568, + 5353, 1978, 570, 570, 354, 567, 2991, 270, 354, 4288, + 557, 1988, 4979, 568, 568, 4982, 4206, 568, 570, 4011, + 4012, 4013, 570, 568, 568, 567, 4924, 447, 567, 567, + 567, 567, 513, 557, 568, 568, 571, 567, 223, 567, + 5007, 483, 483, 483, 354, 278, 344, 4139, 2025, 357, + 226, 483, 339, 223, 547, 155, 3041, 2034, 434, 4206, + 442, 6018, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 223, 223, 302, 2051, 270, 434, 226, 354, 434, + 483, 2058, 507, 557, 4273, 226, 304, 570, 376, 226, + 376, 504, 483, 4185, 483, 4520, 458, 483, 314, 314, + 483, 314, 429, 429, 196, 4197, 4198, 429, 4387, 5148, + 4206, 483, 483, 483, 483, 4207, 4274, 483, 483, 483, + 4212, 223, 4214, 429, 116, 339, 4284, 547, 4273, 483, + 483, 568, 483, 4322, 288, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 568, 2122, 442, 568, 566, 288, + 254, 358, 493, 237, 117, 181, 568, 568, 237, 568, + 570, 2138, 2139, 2140, 4322, 567, 570, 107, 223, 568, + 3796, 4263, 4207, 223, 483, 5220, 237, 4322, 2155, 254, + 4206, 349, 557, 4518, 507, 223, 237, 429, 429, 566, + 2167, 429, 429, 357, 567, 6307, 439, 429, 221, 567, + 507, 2178, 4537, 570, 221, 288, 4298, 4299, 288, 214, + 288, 288, 288, 2190, 4206, 2192, 288, 2194, 288, 288, + 288, 5312, 5313, 565, 5315, 83, 570, 242, 366, 568, + 568, 338, 5372, 568, 518, 568, 2213, 567, 5205, 568, + 523, 242, 251, 416, 2221, 480, 512, 549, 4340, 158, + 5148, 237, 2229, 107, 4526, 4527, 4528, 4529, 5303, 493, + 557, 507, 507, 568, 557, 1837, 570, 570, 567, 570, + 2247, 483, 294, 568, 278, 128, 474, 223, 458, 5246, + 5247, 246, 493, 226, 434, 2262, 483, 483, 2265, 483, + 483, 2268, 483, 429, 4484, 568, 429, 408, 2275, 568, + 6465, 526, 128, 568, 2281, 6470, 131, 567, 474, 513, + 237, 354, 147, 223, 181, 493, 2293, 568, 288, 288, + 288, 288, 273, 567, 483, 530, 292, 354, 567, 2306, + 2307, 107, 2309, 2310, 374, 354, 5922, 4484, 5924, 567, + 570, 166, 5603, 5587, 2321, 352, 2323, 2324, 568, 570, + 567, 493, 113, 483, 80, 5400, 2333, 2334, 5888, 2336, + 2337, 570, 568, 80, 567, 566, 83, 248, 5335, 5336, + 181, 2348, 439, 242, 2351, 2, 4411, 288, 568, 568, + 242, 128, 568, 366, 524, 291, 568, 568, 4484, 524, + 567, 570, 364, 568, 291, 567, 567, 114, 128, 473, + 361, 4493, 227, 255, 121, 568, 493, 480, 349, 242, + 557, 526, 483, 147, 260, 2392, 267, 272, 2395, 2396, + 4578, 260, 344, 4578, 4578, 344, 4578, 4578, 557, 128, + 147, 483, 474, 141, 483, 483, 223, 226, 263, 570, + 288, 568, 570, 567, 483, 195, 244, 188, 107, 507, + 266, 4534, 439, 349, 4537, 2432, 2433, 567, 4484, 107, + 507, 2438, 2439, 339, 239, 439, 222, 2444, 2445, 2446, + 2447, 349, 526, 2450, 299, 2452, 128, 2454, 2455, 2456, + 2457, 2458, 2459, 153, 2461, 474, 2463, 2464, 107, 526, + 2467, 94, 4484, 242, 354, 237, 5933, 100, 403, 216, + 357, 5468, 5763, 567, 2481, 2482, 2483, 2484, 570, 275, + 335, 568, 5479, 5480, 339, 286, 512, 4748, 242, 5742, + 455, 567, 2499, 568, 2501, 4715, 567, 4717, 4759, 5496, + 374, 4967, 568, 4967, 161, 567, 291, 567, 432, 568, + 525, 204, 145, 160, 261, 370, 371, 354, 5835, 266, + 4740, 567, 402, 483, 568, 4638, 183, 6087, 107, 223, + 483, 223, 237, 4710, 567, 567, 107, 567, 4715, 567, + 4717, 344, 567, 567, 270, 315, 567, 567, 439, 223, + 568, 4207, 181, 408, 107, 5624, 303, 412, 568, 358, + 493, 242, 417, 4740, 453, 568, 237, 453, 201, 557, + 128, 426, 107, 150, 180, 208, 474, 567, 211, 434, + 567, 512, 567, 259, 4710, 6145, 6146, 442, 507, 4715, + 5665, 4717, 237, 335, 4716, 474, 354, 474, 567, 454, + 568, 76, 230, 567, 426, 238, 426, 5676, 463, 356, + 530, 141, 467, 357, 4740, 141, 571, 204, 5933, 4741, + 209, 526, 526, 80, 567, 567, 522, 4749, 107, 567, + 4752, 234, 4754, 570, 234, 2642, 511, 242, 570, 272, + 512, 474, 442, 344, 399, 272, 5822, 354, 354, 567, + 439, 4716, 107, 107, 4710, 357, 267, 567, 357, 4715, + 244, 4717, 244, 222, 567, 567, 521, 568, 5675, 3684, + 6137, 523, 567, 483, 568, 2682, 4741, 570, 4800, 128, + 5676, 128, 128, 193, 4740, 76, 462, 505, 4710, 439, + 209, 425, 219, 4715, 4816, 4717, 5624, 568, 361, 4821, + 447, 567, 335, 107, 93, 409, 339, 567, 567, 425, + 104, 242, 5719, 3728, 344, 483, 349, 570, 4740, 570, + 567, 362, 5843, 6155, 567, 358, 2733, 4915, 425, 150, + 222, 453, 453, 5854, 526, 3750, 5664, 370, 188, 526, + 6300, 5917, 5918, 244, 244, 507, 567, 383, 5676, 5791, + 3438, 3766, 568, 2124, 3796, 4411, 1307, 4715, 3248, 1800, + 3329, 4690, 3987, 6291, 1350, 3355, 3409, 3782, 4198, 5717, + 4835, 4836, 6135, 6404, 4870, 408, 4889, 4890, 411, 412, + 5765, 5362, 4688, 5741, 3916, 3586, 6270, 1349, 5623, 6164, + 4967, 6393, 6163, 6310, 6427, 3920, 4984, 4919, 5407, 4890, + 547, 4916, 4924, 4901, 4967, 5926, 6109, 4860, 3423, 442, + 3423, 558, 559, 560, 561, 562, 563, 80, 4710, 4247, + 83, 4012, 5401, 1345, 6384, 6385, 4885, 3842, 5748, 4293, + 6030, 3846, 4952, 6509, 6602, 6591, 4206, 5732, 4923, 5678, + 6323, 2202, 6118, 5905, 5681, 154, 4968, 4969, 4970, 4971, + 4972, 114, 183, 2455, 4994, 5875, 5919, 6505, 121, 4924, + 3440, 2463, 2245, 959, 1628, 3109, 4927, 3894, 4304, 2242, + 5933, 2262, 5791, 6018, 6050, 2317, 1024, 510, 2419, 2419, + 5877, 1057, 4140, 3354, 147, 6349, 6550, 5009, 5010, 5011, + 5012, 6067, 5014, 5015, 5016, 5017, 5018, 5186, 6074, 4740, + 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 1944, + 2917, 1190, 4958, 4960, 80, 3385, 2155, 83, 5605, 3003, + 2927, 5161, 6264, 2930, 4608, 3813, 4991, 3039, 3570, 1818, + 1840, 5928, 1771, 6103, 3828, 1839, 4550, 6404, 3013, 6255, + 6379, 5142, 3038, 6064, 1590, 1842, 4537, 5109, 114, 5851, + 4534, 1847, 6053, 216, 6052, 121, 4534, 4609, 5126, 6557, + 6373, 6468, 6242, 5820, 4486, 5591, 6256, 5228, 6257, 2924, + 2457, 5159, 5160, 3750, 3652, 3384, 2983, 5238, 3748, 2986, + 2927, 147, 695, 2990, 4319, 1471, 2993, 3500, 2995, 2255, + 6225, 2998, 3074, 393, 3790, 1069, 1287, 3090, 261, 3049, + 4615, 3082, 94, 266, 1859, 3083, 3013, 5120, 100, 5143, + 1267, 5124, 4616, 1267, 4575, 3022, 3023, 1853, 1774, 5141, + 426, 3582, 5144, 5145, 3094, 2381, 2, 5603, -1, -1, + -1, 6100, 1576, 1857, -1, -1, 1101, 6328, -1, -1, + 303, -1, -1, -1, -1, 3052, 6043, 3054, -1, 5171, + 216, -1, -1, 145, -1, -1, -1, -1, -1, -1, + 4716, -1, -1, -1, -1, -1, -1, 3074, -1, 1640, + -1, -1, -1, -1, 6137, 6251, -1, 6253, -1, 5144, + -1, -1, -1, -1, -1, 4741, 3093, 3094, -1, -1, + 3097, 6583, 4748, 356, -1, 261, -1, 3104, -1, -1, + 266, 3108, 3109, 4759, -1, -1, 5171, -1, 3115, 201, + -1, -1, -1, 3120, 3121, -1, 208, -1, 3125, 211, + -1, -1, -1, -1, -1, -1, 3133, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 303, -1, -1, + -1, -1, -1, -1, 3151, -1, 238, 3154, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3165, -1, + 3167, 3168, -1, 3170, 3171, -1, 3173, -1, -1, 5234, + -1, -1, 6100, -1, -1, -1, -1, -1, 3185, -1, + 272, -1, -1, -1, 447, -1, -1, -1, -1, -1, + 356, 3198, -1, -1, -1, -1, -1, -1, 3205, 3206, + -1, -1, -1, -1, 5381, -1, -1, 3214, -1, -1, + 5332, 5333, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5345, -1, 5347, 5348, 5349, 6291, 3236, + 3237, 94, -1, 3240, -1, -1, -1, 100, -1, -1, + -1, -1, -1, 335, -1, -1, -1, 339, -1, -1, + -1, -1, 115, -1, 3261, 5381, 3263, 349, -1, 4274, + 3267, -1, -1, -1, -1, -1, 358, 3274, 4924, 4284, + -1, 6278, 3279, -1, 3281, 3282, 6593, 3284, 370, -1, + -1, 447, 145, 3290, 547, -1, -1, -1, -1, 80, + -1, 5413, 83, -1, 5407, 558, 559, 560, 561, 562, + 563, -1, -1, 3310, -1, -1, -1, 4322, -1, 3316, + -1, -1, 6488, -1, -1, -1, 3323, -1, -1, 411, + 412, -1, -1, 114, -1, 5381, -1, -1, -1, 3336, + 121, 5453, -1, -1, -1, 4991, 199, -1, 201, -1, + -1, 6404, 3349, 6350, 6351, 208, -1, 3354, 211, -1, + 442, -1, -1, 3360, 3361, -1, 147, -1, -1, 5381, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3378, 3379, 3380, -1, 238, -1, 3384, -1, -1, + -1, 547, -1, 5505, -1, -1, -1, -1, -1, -1, + -1, 6388, 558, 559, 560, 561, 562, 563, -1, -1, + -1, -1, -1, -1, 3411, 3412, -1, -1, -1, 272, + 1067, 3013, -1, 3420, -1, -1, -1, -1, 510, -1, + 3427, -1, -1, -1, -1, 216, -1, -1, -1, -1, + 3437, 1088, -1, 1090, -1, 1092, -1, -1, -1, -1, + -1, 1098, 1099, 1100, -1, -1, -1, 3454, -1, -1, + -1, -1, 5565, -1, -1, -1, -1, -1, -1, 5572, + 3467, -1, -1, -1, 5577, 1122, 1123, 5580, -1, -1, + 261, 5780, 335, -1, -1, 266, 339, 5602, -1, 3486, + -1, -1, -1, 3490, -1, -1, 349, -1, -1, -1, + -1, -1, -1, -1, 5714, 358, 5609, -1, -1, -1, + -1, -1, -1, 4518, -1, 3512, -1, 370, -1, -1, + 5623, -1, 303, -1, -1, -1, -1, -1, -1, 4534, + -1, -1, 4537, -1, -1, -1, -1, -1, 5593, -1, + -1, -1, -1, -1, -1, -1, -1, 5714, -1, 5758, + -1, -1, 5664, -1, -1, 408, -1, -1, 411, 412, + -1, -1, -1, -1, -1, -1, -1, -1, 5746, -1, + -1, -1, -1, 4578, -1, 356, -1, -1, -1, -1, + -1, 5759, 5228, -1, -1, -1, -1, -1, 5234, 442, + -1, -1, 5238, 5758, -1, -1, -1, 5709, 5714, 5777, + 6597, 6598, -1, 1250, -1, -1, 5718, -1, -1, 5664, + 3607, 5791, 5791, 5791, 5791, 5791, 5791, 5791, -1, 5791, + 5791, 5791, 1269, 5791, -1, 5791, 3623, 5791, 3625, 5791, + -1, 5791, 5791, -1, 5791, 3632, 5791, -1, -1, 3636, + -1, 3638, 3639, -1, 3641, 3642, 3643, -1, -1, -1, + -1, -1, -1, -1, 3651, -1, -1, 510, -1, 3656, + -1, -1, -1, -1, 1311, -1, 447, -1, 5714, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5781, -1, + -1, -1, -1, -1, -1, 3682, 3683, 3684, -1, -1, + 3687, -1, -1, -1, -1, -1, -1, -1, 3695, 3696, + 3697, 3698, 5714, -1, -1, 80, 3703, 112, 83, -1, + -1, 3708, 3709, -1, 3711, -1, 3713, -1, -1, 6074, + -1, -1, -1, -1, -1, -1, -1, 3724, 3725, -1, + -1, 3728, -1, -1, 1381, -1, -1, -1, -1, 114, + -1, -1, -1, -1, -1, -1, 121, 5850, -1, -1, + 3747, -1, 3749, -1, 3751, -1, -1, -1, -1, -1, + -1, -1, 167, -1, -1, -1, 547, -1, -1, -1, + -1, -1, 147, -1, 3771, -1, -1, 558, 559, 560, + 561, 562, 563, -1, -1, 3782, -1, -1, -1, 94, + -1, -1, -1, -1, 80, 100, 5963, 83, -1, 3796, + -1, 87, 88, 89, -1, -1, -1, -1, -1, -1, + 115, -1, 5990, 218, -1, -1, 3813, -1, 104, -1, + -1, 5933, -1, -1, -1, 5937, 231, -1, 114, -1, + -1, 3828, 237, -1, -1, 121, -1, 242, -1, -1, + 145, 216, -1, 248, -1, 3842, 251, 5963, -1, -1, + 255, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 147, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5933, 284, + -1, 286, -1, -1, 4889, 5988, 261, 3884, -1, -1, + 3887, 266, 3889, -1, 199, -1, 201, 3894, -1, 304, + -1, -1, -1, 208, -1, -1, 211, -1, -1, -1, + 4915, 6089, 3909, 3910, -1, -1, -1, 5963, 3915, -1, + -1, -1, -1, -1, -1, 6135, -1, -1, 303, 1576, + 1577, -1, 1579, 238, -1, -1, -1, -1, -1, 3936, + -1, -1, 3939, -1, -1, 3942, 351, -1, -1, 354, + 6053, 5963, -1, 3950, -1, 360, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 272, 6135, -1, + -1, -1, -1, -1, -1, 261, -1, -1, 3975, 4984, + 266, 356, -1, -1, -1, -1, -1, -1, -1, 6092, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 288, 289, -1, -1, -1, 83, -1, -1, + -1, 416, -1, -1, 4011, 4012, 4013, 303, 5664, 6135, + -1, -1, -1, -1, -1, 6137, -1, -1, -1, 6141, + 335, 6143, -1, 6243, 339, 6147, 6148, -1, 4035, -1, + -1, -1, -1, -1, 349, -1, -1, 4044, -1, 4046, + -1, -1, -1, 358, -1, -1, 342, 4054, -1, -1, + -1, -1, -1, 468, -1, 370, -1, -1, -1, -1, + 356, -1, 447, 359, -1, 4072, 6243, -1, -1, -1, + -1, -1, 6437, -1, -1, -1, -1, -1, 6191, 6135, + 3682, 3683, -1, -1, 499, 3687, -1, -1, -1, -1, + -1, -1, -1, 408, -1, -1, 411, 412, -1, -1, + -1, -1, -1, -1, -1, 5120, -1, -1, 523, 5124, + 525, 526, -1, 6135, -1, -1, -1, 6243, -1, -1, + -1, -1, 3724, 3725, -1, -1, -1, 442, -1, -1, + 4137, -1, -1, -1, -1, -1, 6324, 1794, -1, -1, + -1, -1, 1799, 1800, 5159, 5160, -1, -1, -1, -1, + -1, 447, 4159, 568, -1, 570, 571, 4164, -1, -1, + -1, 6349, 547, 4170, 6349, 6349, -1, 6349, 6349, -1, + -1, -1, 4179, 558, 559, 560, 561, 562, 563, -1, + -1, -1, -1, -1, -1, -1, -1, 6243, -1, -1, + -1, -1, -1, -1, -1, 510, -1, -1, -1, 4206, + 4207, -1, -1, -1, -1, 4212, -1, 4214, -1, -1, + 1867, -1, 1869, 1870, -1, -1, -1, -1, -1, -1, + 4227, 6243, 4229, -1, -1, -1, -1, -1, -1, 6342, + 4237, 1888, -1, -1, -1, -1, -1, 1894, 1895, -1, + -1, -1, -1, 4250, -1, -1, -1, -1, -1, 6437, + -1, 547, 6437, 6437, -1, 6437, 6437, -1, -1, 555, + 556, 557, 558, 559, 560, 561, 562, 563, -1, -1, + -1, 4278, 568, -1, 570, -1, -1, 5933, -1, -1, + -1, -1, 6404, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4299, 4300, -1, -1, -1, -1, -1, -1, + -1, -1, 107, -1, -1, -1, -1, -1, -1, 1966, + -1, -1, -1, -1, 6427, -1, -1, 4324, -1, 1976, + 6433, -1, -1, -1, -1, -1, 131, -1, -1, -1, + -1, -1, -1, 6553, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4360, -1, -1, -1, -1, -1, -1, + -1, 166, 6550, -1, 131, 6550, 6550, -1, 6550, 6550, + -1, 6591, -1, 4380, -1, -1, 6553, -1, -1, -1, + -1, -1, 6602, -1, 6040, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4402, -1, -1, 4405, 166, + -1, -1, 2059, -1, -1, 2062, 2063, -1, -1, -1, + -1, -1, -1, -1, 6591, 4422, -1, -1, 4425, -1, + -1, -1, 227, -1, 4431, 6602, -1, 6553, -1, -1, + -1, 6553, 4439, 6546, 4441, -1, -1, 4444, 1033, 6561, + -1, 4448, 4449, 4450, 4451, 4452, -1, -1, 4455, 4456, + 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 263, -1, + 227, 4468, 4469, 4470, 1059, 6591, 4473, -1, -1, 6591, + -1, 4478, -1, -1, -1, 4482, 6602, 4484, -1, 4486, + 6602, -1, -1, 6605, -1, 107, -1, 4494, 6553, 294, + 4497, -1, 4499, -1, 299, -1, 263, 6553, -1, -1, + -1, -1, 4509, -1, -1, 4512, 4513, -1, -1, 131, + 4517, 4518, -1, -1, -1, 2172, -1, 4524, -1, -1, + -1, -1, -1, -1, -1, -1, 6591, 4534, -1, -1, + 4537, 6553, 299, -1, 339, 6591, -1, 6602, -1, -1, + 4547, -1, -1, -1, 166, -1, 6602, -1, -1, -1, + -1, 80, -1, -1, 83, -1, -1, 5572, 87, 88, + 89, -1, 5577, -1, -1, 5580, 371, -1, -1, 6591, + -1, -1, 339, -1, -1, 104, -1, -1, -1, -1, + 6602, -1, -1, -1, -1, 114, -1, 4594, -1, -1, + -1, -1, 121, -1, -1, -1, 2253, -1, -1, -1, + -1, -1, -1, 4610, 371, 227, -1, 412, -1, -1, + -1, -1, 417, -1, -1, -1, -1, -1, 147, 4626, + -1, 426, 2279, -1, -1, -1, -1, -1, -1, 434, + -1, 4638, 2289, -1, 2291, -1, -1, 442, -1, -1, + 2297, 263, -1, -1, 2301, 412, -1, 414, -1, 454, + 417, -1, 4659, -1, -1, -1, -1, -1, 463, 426, + -1, -1, 467, -1, -1, -1, -1, 434, -1, -1, + -1, -1, 294, -1, -1, 442, -1, 299, -1, -1, + -1, 486, -1, -1, -1, -1, -1, 454, -1, -1, + -1, 2348, -1, -1, 2351, -1, 463, -1, -1, -1, + 467, -1, -1, 4710, -1, -1, -1, -1, 4715, 4716, + 4717, -1, -1, -1, -1, -1, 521, 339, -1, -1, + 525, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5746, 261, 4740, 4741, -1, -1, 266, -1, -1, + -1, -1, -1, -1, 5759, -1, -1, -1, -1, 371, + -1, -1, -1, -1, 521, -1, -1, -1, -1, 288, + 289, -1, 5777, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4779, -1, 303, 4782, 5791, -1, -1, -1, + 94, -1, -1, -1, 2441, 2442, 100, -1, -1, -1, + 412, 2448, 2449, -1, -1, 417, 1391, -1, -1, -1, + -1, 115, -1, -1, 426, -1, -1, 1402, -1, -1, + -1, -1, 434, 342, -1, -1, -1, -1, -1, -1, + 442, 2478, 1417, -1, -1, -1, -1, 356, -1, 915, + 359, 145, 454, -1, -1, 5850, -1, -1, 924, 4846, + -1, 463, -1, -1, -1, 467, -1, 4449, 4450, 4451, + 4452, -1, 938, 4455, 4456, 4457, 4458, 4459, 4460, 4461, + 4462, 4463, 4464, -1, 486, 4872, 4873, 73, -1, 4876, + -1, -1, -1, 79, -1, 4882, -1, 83, -1, -1, + 4482, -1, 4889, 4890, -1, -1, -1, 201, -1, -1, + 976, -1, 4899, -1, 208, -1, 982, 211, -1, 521, + -1, -1, -1, 525, 110, -1, -1, -1, 994, -1, + 4512, 4513, -1, -1, -1, -1, 4923, 4924, 447, -1, + 4927, 4928, 4929, -1, 238, -1, -1, -1, 80, -1, + -1, 83, 4939, -1, -1, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 156, -1, 104, -1, -1, -1, -1, -1, 272, -1, + 4967, -1, 114, -1, -1, -1, -1, -1, -1, 121, + -1, -1, -1, 5988, -1, 5990, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4994, -1, -1, + -1, -1, -1, -1, -1, 147, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5020, -1, -1, -1, -1, 547, -1, + -1, 335, 228, -1, 5031, 339, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 349, -1, -1, -1, -1, + -1, 570, -1, -1, 358, -1, 1641, -1, -1, -1, + -1, -1, 5059, -1, -1, 5062, 370, -1, -1, 6074, + -1, -1, -1, 5070, 5071, -1, 5073, -1, -1, -1, + 5077, 5078, -1, -1, 6089, 5082, -1, -1, -1, 5086, + -1, -1, 5089, 5090, -1, -1, -1, 5094, -1, -1, + -1, -1, -1, 5100, 408, -1, -1, 411, 412, -1, + -1, -1, -1, -1, -1, 5112, -1, -1, -1, 261, + -1, -1, -1, 5120, 266, -1, -1, 5124, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 442, -1, + -1, -1, -1, -1, -1, -1, 288, 289, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5157, 303, -1, -1, -1, 92, -1, -1, -1, -1, + 97, -1, -1, -1, 5171, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1264, 1265, + -1, -1, 5189, -1, -1, -1, 392, -1, -1, -1, + 342, -1, -1, -1, -1, -1, 510, -1, 135, -1, + 5207, -1, -1, -1, 356, -1, -1, 359, -1, -1, + -1, 148, -1, 5220, -1, -1, -1, -1, -1, -1, + -1, 427, -1, -1, -1, -1, -1, 164, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5245, -1, + -1, -1, -1, -1, 4846, 182, -1, 92, -1, -1, + -1, -1, 97, -1, -1, 5262, -1, -1, -1, -1, + 5267, -1, -1, -1, -1, -1, -1, 5274, -1, 206, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 217, -1, -1, 5290, -1, -1, 2943, -1, -1, 226, + -1, -1, -1, -1, -1, 447, 5303, -1, -1, -1, + -1, -1, 239, 148, 149, -1, 133, 244, -1, 6324, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 164, + -1, -1, -1, -1, -1, -1, -1, 5334, -1, -1, + -1, -1, -1, 270, 6349, -1, -1, 182, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5360, -1, -1, -1, -1, -1, -1, + -1, 206, -1, -1, -1, 3022, 3023, -1, -1, 5376, + -1, -1, 217, -1, 5381, -1, -1, -1, -1, 316, + -1, 226, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5400, 239, 547, -1, -1, -1, 244, + 5407, -1, -1, 555, 556, 557, 558, 559, 560, 561, + 562, 563, -1, 3070, -1, -1, -1, -1, 570, 356, + -1, -1, 6437, -1, -1, 270, -1, -1, -1, -1, + 2025, -1, -1, 3090, -1, -1, 3093, 3094, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5454, -1, 5456, + 295, -1, 389, 390, -1, -1, 393, -1, -1, -1, + 5062, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, -1, -1, -1, 3133, -1, -1, -1, + -1, 94, -1, 420, -1, -1, 423, 100, -1, -1, + 5497, -1, 429, -1, -1, -1, -1, 80, -1, 436, + 83, -1, 439, -1, 87, 88, 89, -1, 5515, -1, + 5112, 5518, -1, -1, 5521, 5522, 5523, -1, -1, -1, + -1, 458, -1, -1, -1, -1, -1, -1, 465, -1, + -1, 114, 145, -1, 471, 6550, -1, 474, 121, 5546, + 5547, 478, -1, 5550, 389, 390, -1, -1, 393, 486, + -1, -1, -1, -1, -1, -1, 493, -1, 5565, -1, + 3217, -1, -1, -1, 147, 5572, -1, -1, -1, -1, + 5577, -1, 2167, 5580, 5581, 420, -1, -1, 423, -1, + -1, 5588, 519, 2178, 429, -1, -1, -1, 201, -1, + -1, 436, -1, -1, 439, 208, 131, -1, 211, 2194, + -1, -1, 5609, -1, 5611, -1, -1, -1, -1, -1, + 5617, -1, 5619, 458, -1, -1, 5623, -1, -1, -1, + 465, -1, -1, -1, -1, 238, 471, -1, -1, 474, + -1, 166, -1, 478, -1, -1, -1, -1, -1, 3296, + -1, -1, -1, -1, -1, -1, -1, 3304, 493, -1, + 3307, -1, 2247, -1, -1, -1, -1, 5664, 5665, 272, + -1, -1, 3319, -1, -1, -1, -1, -1, 5675, -1, + -1, -1, -1, 2268, 519, -1, -1, -1, 261, -1, + -1, -1, -1, 266, -1, -1, 2281, -1, -1, -1, + -1, 897, 227, -1, -1, 901, -1, -1, 2293, -1, + -1, -1, -1, -1, -1, 288, 289, 5714, 914, 915, + -1, -1, 5719, -1, -1, -1, 922, -1, 924, 925, + 303, -1, 335, -1, -1, -1, 339, -1, 263, -1, + -1, -1, 938, -1, -1, -1, 349, -1, 2333, 2334, + -1, -1, -1, -1, -1, 358, -1, -1, -1, -1, + -1, 957, -1, -1, -1, -1, -1, 370, -1, 342, + -1, -1, -1, -1, 299, -1, -1, -1, -1, -1, + 976, -1, -1, 356, 5781, -1, 982, 5784, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 994, -1, + -1, -1, 1878, -1, -1, 408, -1, -1, 411, 412, + 335, -1, -1, -1, 339, -1, 94, -1, -1, 5816, + -1, -1, 100, 5820, -1, 5822, -1, 1023, 80, -1, + -1, 83, -1, -1, -1, 87, 88, 89, -1, 442, + -1, 1037, 1038, 5840, -1, 370, 371, -1, 1044, 5846, + 1046, 1047, 104, 5850, -1, -1, -1, -1, -1, 5856, + 5857, -1, 114, -1, 1060, -1, -1, 145, -1, 121, + -1, -1, -1, -1, 447, -1, -1, -1, 3525, 3526, + 1076, -1, -1, 408, -1, -1, -1, 412, -1, -1, + -1, -1, 417, -1, -1, 147, 2481, -1, -1, -1, + -1, 426, -1, -1, -1, 5902, -1, 510, -1, 434, + 5907, 5908, -1, -1, -1, 5912, -1, 442, -1, -1, + 5917, 5918, 5919, 201, -1, -1, 5518, -1, -1, 454, + 208, -1, -1, 211, -1, -1, 5933, -1, 463, 1135, + -1, -1, 467, -1, 73, -1, -1, -1, -1, -1, + 79, -1, 3599, -1, 83, -1, 5953, -1, -1, -1, + 238, -1, -1, 5960, -1, -1, 5963, -1, -1, -1, + -1, -1, -1, -1, 547, -1, -1, -1, -1, 1175, + -1, 110, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 5988, -1, -1, 272, -1, 521, -1, -1, -1, + 1196, -1, -1, -1, -1, 1201, -1, -1, -1, 261, + -1, -1, 94, -1, 266, -1, -1, 1213, 100, -1, + -1, 6018, 6019, -1, -1, -1, -1, 156, -1, -1, + -1, -1, -1, -1, -1, -1, 288, 289, -1, -1, + -1, -1, -1, 6040, -1, -1, 2122, 6044, -1, -1, + -1, 303, -1, 6050, -1, -1, 6053, 335, -1, 6056, + -1, 339, -1, 145, -1, -1, -1, -1, 1264, 1265, + 6067, 349, -1, -1, -1, -1, 205, 6074, -1, -1, + 358, -1, -1, -1, 213, -1, 215, -1, 905, -1, + 342, -1, 370, -1, -1, 6092, -1, 914, -1, 228, + -1, -1, -1, -1, 356, 922, -1, 359, 925, -1, + -1, -1, -1, 6110, -1, -1, -1, -1, -1, 201, + -1, -1, -1, -1, -1, -1, 208, -1, -1, 211, + 408, -1, -1, 411, 412, -1, -1, 2213, 6135, -1, + 6137, -1, -1, -1, 3791, 2221, -1, 3794, -1, 3796, + -1, -1, -1, 2229, -1, -1, 238, -1, 80, -1, + -1, 83, -1, -1, 442, 87, 88, 89, -1, -1, + -1, -1, -1, 3820, 3821, -1, -1, -1, -1, 1375, + -1, -1, 104, -1, -1, 1381, -1, -1, -1, -1, + 272, -1, 114, -1, 6191, 447, 1392, -1, -1, 121, + 1396, -1, 1398, -1, -1, -1, -1, -1, -1, -1, + -1, 1028, -1, -1, -1, -1, -1, -1, -1, -1, + 1037, -1, -1, -1, 5816, 147, -1, 1044, -1, -1, + 1047, -1, 510, -1, 2310, -1, 6233, 6234, 6235, -1, + -1, -1, -1, -1, -1, 6242, 6243, -1, 5840, 6246, + -1, -1, -1, 335, 6251, -1, 6253, 339, 6255, -1, + -1, 2337, -1, 392, -1, -1, -1, 349, 6265, -1, + -1, -1, -1, -1, -1, -1, 358, -1, -1, -1, + -1, 6278, -1, -1, -1, -1, -1, -1, 370, -1, + -1, -1, -1, -1, 6291, 547, -1, -1, 427, -1, + -1, -1, -1, 555, 556, 557, 558, 559, 560, 561, + 562, 563, -1, -1, -1, -1, 568, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 408, -1, -1, 411, + 412, -1, -1, -1, -1, 6332, -1, -1, -1, 261, + -1, -1, -1, -1, 266, 6342, -1, -1, -1, -1, + -1, -1, 1548, 6350, 6351, -1, -1, -1, -1, 6356, + 442, -1, 6359, -1, -1, -1, 288, 289, -1, -1, + -1, -1, 6369, -1, -1, -1, -1, -1, 6375, -1, + -1, 303, 6379, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 6404, -1, -1, + -1, -1, -1, -1, -1, -1, 83, -1, -1, -1, + 342, -1, -1, -1, -1, -1, -1, -1, 510, -1, + 6427, 1627, -1, -1, 356, -1, 6433, 359, -1, -1, + -1, -1, -1, 110, -1, -1, -1, 1643, -1, -1, + -1, -1, -1, 6450, -1, -1, -1, -1, -1, -1, + -1, 1657, -1, -1, 6056, 1661, -1, -1, 6465, -1, + -1, 6468, -1, 6470, -1, -1, -1, -1, -1, -1, + -1, 131, -1, -1, -1, -1, 6483, -1, -1, 156, + -1, 6488, -1, -1, -1, 80, -1, -1, 83, -1, + -1, -1, 87, 88, 89, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 166, -1, -1, 104, + -1, -1, 6519, -1, -1, 447, -1, -1, -1, 114, + -1, -1, -1, 6530, -1, -1, 121, 6534, 205, -1, + -1, -1, -1, -1, -1, -1, 213, -1, 215, 6546, + -1, -1, -1, -1, -1, -1, 6553, -1, -1, -1, + 4207, 228, 147, -1, -1, -1, 94, -1, -1, 1386, + -1, -1, 100, -1, -1, 1392, -1, 227, -1, 1396, + -1, 1398, 3167, 4230, -1, -1, 6583, 6584, 3173, -1, + 6587, -1, -1, -1, 6591, 1791, -1, -1, -1, -1, + 6597, 6598, -1, 1799, 1800, 6602, -1, -1, -1, -1, + -1, -1, -1, 263, -1, -1, -1, 145, -1, -1, + -1, -1, -1, -1, -1, 547, -1, -1, -1, 3214, + -1, -1, -1, 555, 556, 557, 558, 559, 560, 561, + 562, 563, 1459, -1, 1461, 1462, 568, -1, -1, 299, + 6242, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1857, 1858, 1859, 167, -1, -1, -1, -1, -1, + -1, -1, -1, 201, -1, -1, 261, -1, -1, -1, + 208, 266, 1878, 211, -1, 335, 4333, -1, 80, 339, + -1, 83, -1, 4340, -1, 87, 88, 89, -1, -1, + -1, -1, -1, 288, 289, -1, -1, -1, -1, -1, + 238, 1907, 104, -1, -1, 218, -1, -1, 303, 1915, + 370, 371, 114, -1, -1, -1, -1, -1, 231, 121, + -1, 1927, -1, -1, 237, -1, -1, -1, -1, 242, + -1, -1, -1, -1, 272, 248, -1, -1, 251, -1, + -1, -1, 255, -1, -1, 147, -1, 342, 408, -1, + -1, -1, 412, -1, 4411, -1, -1, 417, 897, -1, + -1, 356, 901, -1, 359, -1, 426, 6369, -1, -1, + -1, 284, -1, -1, 434, -1, 915, -1, -1, -1, + -1, -1, 442, -1, -1, 924, -1, -1, -1, -1, + -1, 304, -1, -1, 454, -1, -1, 335, -1, 938, + -1, 339, -1, 463, -1, -1, -1, 467, -1, -1, + -1, 349, -1, -1, -1, -1, -1, 3412, 957, -1, + 358, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 370, -1, -1, -1, -1, 976, 351, -1, + -1, 354, -1, 982, -1, -1, -1, 360, -1, -1, + -1, -1, 447, -1, -1, 994, -1, -1, -1, 261, + -1, 521, -1, 6465, 266, -1, -1, -1, 6470, -1, + 408, -1, -1, 411, 412, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1023, -1, 288, 289, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1038, + -1, 303, -1, 416, 442, -1, -1, 1046, -1, -1, + -1, -1, -1, -1, -1, -1, 2122, -1, -1, -1, + -1, 1060, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1076, -1, -1, + 342, -1, -1, -1, -1, -1, -1, -1, -1, 2155, + -1, -1, 547, -1, 356, 4612, -1, 359, 471, -1, + 555, 556, 557, 558, 559, 560, 561, 562, 563, -1, + -1, -1, 510, 568, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2190, -1, 499, -1, 3074, -1, + -1, -1, -1, -1, -1, -1, 1135, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2213, -1, -1, + 523, 3097, 525, 526, -1, 2221, -1, -1, -1, -1, + -1, -1, -1, 2229, -1, -1, -1, -1, 3623, 3115, + -1, -1, -1, -1, 1173, 3121, 1175, -1, 1177, 3125, + -1, -1, -1, 3638, -1, 447, -1, -1, 3643, -1, + -1, -1, 565, -1, -1, 568, 569, 1196, 571, 4716, + -1, -1, 1201, -1, -1, 3151, -1, -1, -1, -1, + -1, -1, -1, 80, 1213, -1, 83, -1, -1, -1, + 87, 88, 89, -1, 4741, -1, -1, -1, -1, -1, + -1, 4748, -1, -1, -1, -1, -1, 104, -1, 3185, + 2306, 2307, 4759, 2309, 2310, -1, -1, 114, -1, -1, + -1, -1, -1, -1, 121, 2321, -1, 2323, 2324, 3205, + -1, -1, -1, -1, -1, 1264, 1265, -1, -1, -1, + 2336, 2337, -1, -1, -1, -1, -1, -1, -1, -1, + 147, -1, -1, -1, -1, 547, -1, -1, -1, -1, + -1, 3237, -1, 555, 556, 557, 558, 559, 560, 561, + 562, 563, -1, -1, -1, -1, 568, -1, -1, -1, + -1, -1, -1, -1, -1, 3261, -1, -1, 4835, 4836, + -1, 3267, -1, -1, -1, -1, 2392, -1, 3274, 2395, + 2396, -1, -1, -1, -1, 3281, -1, -1, 3284, 80, + -1, -1, 83, -1, 3290, -1, 87, 88, 89, 94, + 1349, 1350, -1, -1, -1, 100, -1, -1, -1, -1, + 897, -1, -1, 104, 3310, -1, -1, -1, -1, -1, + 3316, -1, -1, 114, -1, -1, 1375, 3323, 915, -1, + 121, -1, 1381, -1, -1, -1, -1, 924, -1, -1, + 3336, -1, -1, -1, 261, -1, -1, -1, -1, 266, + 145, 938, -1, 3349, -1, -1, 147, 4924, -1, -1, + -1, -1, -1, -1, 3360, -1, -1, -1, -1, -1, + 957, 288, 289, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2501, 303, -1, -1, 976, + -1, -1, -1, -1, -1, 982, -1, -1, -1, -1, + -1, 4968, 4969, 4970, 4971, 4972, 201, 994, -1, -1, + -1, -1, -1, 208, 80, -1, 211, 83, -1, -1, + -1, 87, 88, 89, 4991, 342, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1023, 3942, 104, 356, + -1, -1, 359, 238, -1, 3950, -1, -1, 114, -1, + -1, 1038, -1, -1, -1, 121, -1, -1, -1, 1046, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 261, -1, -1, 1060, -1, 266, -1, 272, -1, -1, + -1, 147, -1, -1, -1, -1, -1, -1, -1, 1076, + -1, -1, -1, -1, -1, -1, -1, 288, 289, 1548, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 303, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2262, -1, -1, 2265, -1, + 447, -1, -1, -1, -1, -1, -1, -1, -1, 4044, + 335, 4046, -1, -1, 339, -1, -1, -1, 1135, -1, + -1, 342, -1, -1, 349, -1, 94, -1, -1, -1, + -1, -1, 100, 358, -1, 356, -1, -1, 359, 2306, + 2307, -1, -1, -1, -1, 370, -1, 5144, 1627, -1, + -1, -1, -1, -1, 2321, -1, 1173, 2324, 1175, -1, + 1177, -1, -1, -1, 1643, 261, -1, -1, -1, -1, + 266, -1, -1, -1, 5171, -1, -1, 145, 1657, -1, + -1, 3607, 1661, 408, 1201, -1, 411, 412, -1, -1, + -1, -1, 288, 289, -1, -1, 1213, -1, -1, 3625, + 547, -1, 4137, -1, -1, -1, 3632, 303, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 442, -1, -1, + -1, 568, -1, -1, -1, 2392, 447, -1, 2395, 2396, + -1, 5228, -1, 201, -1, -1, -1, 5234, -1, -1, + 208, 5238, -1, 211, 4179, -1, 342, 1264, 1265, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 356, -1, -1, 359, -1, -1, -1, -1, 5265, 5266, + 238, -1, -1, 5270, 5271, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 510, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 272, -1, -1, -1, -1, -1, + -1, -1, 1791, -1, -1, -1, -1, -1, -1, -1, + 1799, 1800, -1, -1, -1, -1, 547, -1, -1, -1, + -1, -1, 1349, 1350, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 4278, -1, -1, -1, 568, -1, -1, + -1, 447, -1, -1, -1, -1, -1, -1, 1375, -1, + -1, -1, -1, -1, 1381, -1, -1, 335, -1, -1, + -1, 339, -1, -1, -1, -1, -1, -1, 1857, 1858, + 1859, 349, -1, -1, -1, -1, -1, -1, -1, 4324, + 358, -1, -1, -1, -1, -1, -1, -1, -1, 1878, + -1, -1, 370, -1, -1, -1, -1, -1, 80, -1, + -1, 83, -1, -1, -1, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1907, -1, + -1, -1, 104, -1, -1, -1, 1915, 2983, -1, -1, + 408, -1, 114, 411, 412, -1, -1, -1, 1927, 121, + -1, 547, -1, -1, -1, -1, -1, -1, 1937, 555, + 556, 557, 558, 559, 560, 561, 562, 563, -1, -1, + 80, -1, 568, 83, 442, 147, -1, 87, 88, 89, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4425, -1, -1, -1, 104, -1, -1, -1, -1, 1978, + -1, -1, -1, -1, 114, -1, 3052, -1, 3054, -1, + 3936, 121, -1, 4448, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3074, -1, + -1, 1548, -1, -1, -1, -1, -1, 147, 4473, -1, + -1, -1, 510, -1, -1, -1, -1, -1, -1, -1, + -1, 3097, -1, -1, -1, 2034, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3115, + -1, -1, 2051, -1, 3120, 3121, -1, -1, -1, 3125, + -1, -1, -1, -1, -1, -1, -1, 3133, -1, 261, + -1, -1, -1, -1, 266, -1, 5593, -1, -1, -1, + -1, -1, -1, -1, -1, 3151, -1, -1, -1, 4035, + 1627, -1, -1, -1, -1, -1, 288, 289, -1, -1, + -1, -1, 3168, -1, 3170, 3171, 1643, -1, -1, -1, + -1, 303, -1, -1, -1, -1, -1, -1, -1, 3185, + 1657, -1, -1, 2122, 1661, -1, -1, -1, -1, -1, + -1, 261, -1, -1, -1, -1, 266, -1, -1, 3205, + 3206, -1, -1, -1, -1, -1, -1, 5664, -1, -1, + 342, -1, -1, -1, -1, -1, 2155, -1, 288, 289, + -1, -1, -1, -1, 356, -1, -1, 359, -1, -1, + 3236, 3237, -1, 303, 3240, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2190, -1, -1, -1, 3261, -1, 3263, -1, -1, + -1, 3267, -1, -1, -1, -1, -1, -1, 3274, -1, + -1, -1, 342, 4159, 2213, 3281, -1, -1, 3284, -1, + -1, -1, 2221, -1, 3290, -1, 356, -1, -1, 359, + 2229, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3310, -1, -1, -1, -1, -1, + 3316, -1, -1, -1, 1791, 447, -1, 3323, -1, -1, + -1, -1, 1799, 1800, -1, -1, 80, -1, -1, 83, + 3336, -1, -1, 87, 88, 89, -1, -1, -1, -1, + -1, -1, -1, 3349, -1, -1, -1, -1, 3354, -1, + 104, -1, -1, -1, 3360, -1, -1, -1, -1, -1, + 114, -1, -1, -1, -1, -1, -1, 121, -1, -1, + 2309, 2310, -1, -1, -1, -1, -1, 447, -1, -1, + 1857, -1, -1, -1, 2323, -1, -1, -1, -1, -1, + 92, -1, -1, 147, -1, 97, -1, 2336, 2337, -1, + -1, 1878, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3420, 547, -1, -1, -1, -1, + -1, -1, -1, 555, 556, 557, 558, 559, 560, 561, + 562, 563, -1, 135, -1, -1, 568, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 148, 149, -1, -1, + 1927, -1, -1, -1, -1, -1, -1, -1, 160, -1, + 1937, -1, 164, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4360, -1, 5933, 547, -1, -1, + 182, 4876, -1, -1, -1, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 4380, -1, -1, -1, 568, -1, + -1, 1978, -1, -1, 206, -1, -1, 261, -1, -1, + -1, -1, 266, -1, -1, 217, -1, -1, -1, 4405, + -1, -1, 167, -1, 226, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 288, 289, -1, 239, 3165, -1, + -1, 3168, 244, 3170, 3171, -1, -1, -1, -1, 303, + -1, -1, -1, -1, -1, -1, -1, 2034, -1, -1, + -1, -1, 2501, -1, -1, -1, -1, -1, 270, -1, + -1, -1, -1, 218, 2051, -1, -1, -1, -1, -1, + -1, -1, -1, 6040, -1, -1, 231, -1, 342, -1, + -1, -1, 237, 295, -1, -1, -1, 242, -1, -1, + -1, 3607, 356, 248, -1, 359, 251, -1, -1, -1, + 255, -1, -1, -1, 316, -1, -1, -1, -1, 3625, + -1, -1, -1, -1, -1, -1, 3632, -1, -1, -1, + -1, -1, -1, 3639, -1, 3641, 3642, -1, -1, 284, + -1, -1, -1, -1, -1, 2122, -1, -1, -1, -1, + -1, -1, -1, -1, 356, -1, -1, -1, -1, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 6127, -1, -1, -1, -1, -1, -1, 379, 2155, -1, + -1, -1, -1, -1, -1, -1, -1, 389, 390, -1, + -1, 393, -1, 447, -1, -1, -1, 3703, -1, -1, + -1, -1, -1, 3709, -1, -1, 351, -1, -1, 354, + -1, -1, -1, 2190, -1, 360, -1, -1, 420, -1, + -1, 423, -1, -1, -1, 427, -1, 429, -1, -1, + -1, -1, -1, -1, 436, -1, 2213, 439, -1, -1, + -1, -1, -1, -1, 2221, -1, -1, -1, -1, -1, + -1, -1, 2229, -1, -1, -1, 458, -1, -1, -1, + -1, -1, -1, 465, -1, -1, -1, -1, -1, 471, + -1, 416, 474, 4659, -1, -1, 478, -1, -1, -1, + -1, -1, -1, -1, 486, -1, 488, -1, -1, -1, + 3796, 493, -1, 547, -1, -1, -1, -1, -1, -1, + -1, 555, 556, 557, 558, 559, 560, 561, 562, 563, + -1, -1, 5207, -1, 568, -1, -1, 519, -1, -1, + -1, -1, -1, -1, -1, -1, 471, 3454, -1, -1, + -1, -1, 2309, 2310, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2323, -1, -1, -1, + 5245, -1, 906, 907, 499, -1, 910, -1, -1, 2336, + 2337, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5267, -1, -1, -1, 930, -1, 523, -1, + 525, 526, -1, 937, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4779, -1, -1, 4782, -1, -1, -1, + -1, -1, -1, 3909, 3910, -1, -1, -1, -1, -1, + -1, -1, 966, 5, 968, -1, -1, 971, -1, -1, + 565, -1, -1, 568, 569, -1, 571, -1, -1, -1, + 3936, 985, 24, 3939, -1, -1, -1, 991, -1, 5334, + -1, -1, 34, 35, -1, -1, -1, -1, -1, 41, + 42, -1, -1, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, + -1, 73, -1, 75, 76, -1, -1, -1, -1, 81, + -1, -1, -1, -1, -1, -1, 4882, -1, -1, -1, + -1, -1, -1, -1, 167, 4011, 4012, 4013, -1, 3636, + -1, -1, 3639, 4899, 3641, 3642, -1, -1, -1, -1, + -1, -1, -1, -1, 2501, -1, -1, -1, -1, 4035, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2983, -1, 138, -1, 4054, -1, + -1, -1, -1, -1, -1, 218, -1, -1, -1, -1, + -1, 5456, -1, -1, -1, -1, 4072, -1, 231, -1, + -1, -1, -1, -1, 237, -1, -1, -1, -1, 242, + -1, -1, -1, -1, -1, 248, -1, -1, 251, -1, + -1, -1, 255, -1, -1, -1, 6553, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4994, -1, + -1, -1, -1, 3052, -1, 3054, -1, -1, -1, -1, + -1, 284, -1, 215, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6591, 3074, -1, -1, -1, -1, + -1, 304, -1, 235, -1, 6602, -1, -1, -1, -1, + -1, -1, -1, 4159, -1, 3782, -1, -1, 3097, -1, + -1, -1, -1, -1, -1, -1, 258, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3115, -1, -1, -1, + -1, 3120, 3121, -1, -1, -1, 3125, -1, 351, -1, + 282, 354, -1, -1, 3133, -1, -1, 360, -1, -1, + 4206, -1, -1, -1, -1, -1, 4212, -1, 4214, -1, + -1, -1, 3151, -1, -1, 3842, -1, -1, -1, -1, + -1, 4227, -1, 4229, -1, -1, -1, 319, -1, -1, + 322, -1, -1, 92, -1, -1, -1, -1, 97, -1, + -1, -1, -1, -1, -1, -1, 3185, -1, -1, -1, + -1, -1, 344, 416, -1, -1, -1, -1, -1, 3198, + -1, -1, -1, 1317, 1318, -1, 3205, 3206, -1, -1, + -1, -1, -1, -1, -1, -1, 135, -1, -1, -1, + -1, -1, -1, -1, 916, -1, -1, -1, -1, 148, + -1, -1, -1, 4299, -1, -1, 928, 3236, 3237, -1, + -1, 3240, -1, -1, -1, 164, -1, 939, 471, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3261, 182, 3263, -1, 958, -1, 3267, -1, + -1, -1, 964, -1, 1388, 3274, 499, -1, -1, -1, + 3279, 433, 3281, -1, -1, 3284, -1, 206, -1, 1403, + -1, 3290, -1, -1, 4360, -1, -1, -1, 217, -1, + 523, -1, 525, 526, -1, -1, -1, 226, -1, -1, + -1, 3310, -1, -1, 4380, -1, 5262, 3316, 1432, 1433, + 239, -1, -1, -1, 3323, 244, -1, -1, 5274, -1, + -1, 483, 251, -1, -1, -1, 4402, 3336, -1, 4405, + -1, -1, 565, 1457, -1, 568, 569, 499, 571, -1, + 3349, 270, -1, -1, -1, 3354, -1, -1, -1, -1, + -1, 3360, 514, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 544, -1, -1, -1, -1, 316, -1, -1, + -1, 5856, -1, -1, -1, 557, 558, 559, 560, 561, + 562, -1, -1, 565, 566, 567, 568, -1, 4484, -1, + 572, 3420, -1, -1, -1, -1, -1, -1, -1, 1543, + 1544, -1, -1, -1, -1, -1, -1, 356, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5902, -1, -1, + 369, -1, 5907, 5908, -1, -1, -1, -1, -1, -1, + 379, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 389, 390, -1, -1, 393, -1, -1, -1, -1, -1, + 1172, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1191, + -1, 420, -1, -1, 423, -1, -1, -1, 427, -1, + 429, -1, -1, -1, -1, -1, -1, 436, -1, -1, + 439, -1, 1214, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3074, -1, 458, + -1, -1, -1, -1, -1, -1, 465, -1, -1, -1, + -1, 5497, 471, -1, -1, 474, -1, -1, -1, 478, + 3097, -1, -1, -1, 6019, -1, -1, 486, -1, 488, + -1, -1, -1, -1, 493, -1, -1, -1, 3115, -1, + -1, -1, -1, 3120, 3121, -1, -1, 506, 3125, -1, + -1, -1, -1, 4659, -1, -1, 3133, -1, -1, -1, + 519, -1, -1, -1, -1, -1, -1, -1, 3607, -1, + -1, -1, -1, -1, 3151, -1, -1, -1, -1, -1, + 1312, -1, -1, -1, -1, -1, 3625, -1, -1, -1, + -1, -1, -1, 3632, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4710, -1, -1, -1, 3185, 4715, + -1, 4717, -1, -1, -1, -1, 80, -1, -1, 83, + -1, 3198, -1, 87, 88, 89, -1, -1, 3205, 3206, + -1, 5617, -1, 5619, 4740, -1, -1, -1, -1, -1, + 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 114, -1, -1, -1, -1, -1, -1, 121, -1, 3236, + 3237, -1, -1, 3240, 3703, -1, -1, -1, -1, -1, + 3709, -1, -1, 4779, -1, -1, 4782, -1, -1, -1, + -1, -1, -1, 147, 3261, -1, 3263, -1, -1, -1, + 3267, -1, -1, -1, 1426, -1, -1, 3274, -1, -1, + -1, -1, 3279, -1, 3281, -1, -1, 3284, -1, -1, + -1, -1, -1, 3290, -1, -1, -1, -1, -1, -1, + -1, 1453, 1454, 1455, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3310, -1, -1, -1, -1, -1, 3316, + -1, -1, -1, -1, -1, -1, 3323, -1, -1, -1, + -1, 6246, -1, -1, -1, -1, -1, 3796, -1, 3336, + -1, -1, 80, -1, -1, 83, 4872, 4873, -1, 87, + 88, 89, 3349, -1, -1, -1, 4882, 3354, -1, -1, + -1, -1, -1, 3360, -1, -1, 104, -1, -1, -1, + -1, -1, -1, 4899, -1, -1, 114, 261, -1, -1, + -1, -1, 266, 121, -1, -1, -1, 4534, -1, -1, + 4537, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 288, 289, -1, 1981, -1, 147, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 303, + -1, -1, -1, 3420, -1, -1, -1, -1, -1, -1, + -1, -1, 2006, -1, -1, -1, -1, -1, -1, -1, + -1, 4967, -1, -1, 1033, -1, -1, -1, -1, -1, + 3909, 3910, -1, -1, -1, -1, -1, -1, 342, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4994, -1, + 1059, -1, 356, -1, 1626, 359, -1, 3936, -1, -1, + 3939, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4638, -1, -1, -1, 1647, -1, -1, -1, -1, + -1, -1, -1, -1, 1656, 2079, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 261, -1, -1, -1, -1, 266, -1, + -1, -1, -1, -1, 2108, 2109, 2110, 2111, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 288, 289, 4011, 4012, 4013, -1, -1, -1, -1, -1, + -1, -1, -1, 447, -1, 303, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4035, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4054, -1, -1, -1, 2173, + 2174, -1, -1, -1, 342, -1, -1, -1, -1, -1, + 3607, -1, -1, 4072, -1, 2189, -1, -1, 356, -1, + -1, 359, -1, -1, -1, -1, -1, -1, 3625, -1, + -1, -1, -1, -1, -1, 3632, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2223, + 2224, 2225, 2226, -1, 1806, -1, -1, -1, -1, -1, + -1, -1, -1, 547, -1, -1, -1, -1, -1, -1, + 110, 555, 556, 557, 558, 559, 560, 561, 562, 563, + -1, -1, -1, -1, 568, -1, -1, -1, -1, -1, + -1, -1, -1, 133, 5220, -1, 1848, -1, -1, -1, + 4159, -1, -1, -1, -1, -1, 3703, -1, -1, 447, + -1, -1, 3709, -1, -1, -1, 156, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5262, -1, -1, -1, + -1, -1, 4889, 4890, -1, -1, -1, 4206, 5274, -1, + -1, -1, -1, 4212, -1, 4214, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 205, 2340, -1, 4227, -1, + 4229, -1, 2346, 213, -1, 215, -1, 5303, -1, -1, + -1, -1, -1, -1, 1373, -1, -1, -1, 228, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3796, + -1, -1, 1391, -1, -1, -1, -1, -1, -1, 547, + -1, -1, -1, 1402, -1, -1, -1, 555, 556, 557, + 558, 559, 560, 561, 562, 563, -1, -1, 1417, -1, + 568, -1, -1, -1, -1, -1, 80, -1, -1, 83, + 4299, -1, 1994, 87, 88, 89, -1, -1, -1, -1, + -1, 2003, -1, -1, -1, 5381, -1, -1, -1, 6265, + 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 114, -1, -1, -1, 5400, -1, -1, 121, -1, 2031, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4360, 2054, 147, -1, 2057, -1, -1, -1, -1, + -1, -1, 3909, 3910, -1, -1, -1, -1, -1, 1508, + -1, 4380, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3936, + -1, -1, 3939, 4402, -1, -1, 4405, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2112, -1, -1, -1, -1, 2539, -1, -1, -1, -1, + -1, 5497, -1, 5120, 2126, -1, -1, 5124, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2154, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2165, 4011, 4012, 4013, 261, -1, -1, + -1, -1, 266, -1, -1, 4484, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4035, -1, + -1, -1, -1, -1, 288, 289, -1, -1, -1, -1, + -1, -1, 1641, -1, -1, 2207, -1, 4054, -1, 303, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4072, -1, -1, -1, -1, + 2232, -1, -1, -1, -1, -1, -1, 2239, -1, -1, + -1, 5617, -1, 5619, -1, -1, -1, -1, 342, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 356, -1, -1, 359, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5665, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5675, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4159, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 80, -1, -1, 83, -1, -1, -1, + 87, 88, 89, -1, -1, -1, -1, -1, 5714, -1, + -1, -1, -1, 5719, -1, -1, -1, 104, -1, -1, + 4659, -1, -1, 447, -1, 2357, -1, 114, -1, 4206, + -1, -1, -1, -1, 121, 4212, -1, 4214, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5376, + 4227, -1, 4229, -1, -1, -1, -1, -1, -1, -1, + 147, -1, -1, -1, -1, -1, 2398, 2399, -1, -1, + -1, 4710, -1, -1, -1, -1, 4715, -1, 4717, -1, + 5407, -1, -1, -1, -1, -1, 2418, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4740, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4299, 547, -1, -1, -1, -1, -1, -1, + -1, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 4779, -1, -1, 4782, 568, -1, -1, -1, -1, -1, + -1, -1, 1921, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 261, -1, -1, -1, -1, 266, + -1, -1, -1, 4360, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 288, 289, 4380, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5919, -1, -1, 303, -1, -1, 1988, + -1, -1, -1, -1, -1, 4402, -1, 5933, 4405, -1, + -1, -1, -1, 4872, 4873, 2989, -1, -1, 5565, -1, + -1, -1, -1, 4882, -1, 5572, -1, -1, -1, -1, + 5577, -1, -1, 5580, 5581, 342, 2025, 5963, -1, -1, + 4899, -1, -1, -1, -1, -1, -1, -1, -1, 356, + -1, -1, 359, -1, -1, -1, -1, 897, -1, -1, + -1, -1, 5609, -1, -1, 905, -1, -1, -1, 2058, + -1, -1, -1, -1, 914, -1, 5623, -1, -1, -1, + -1, -1, 922, -1, -1, 925, -1, 4484, -1, -1, + -1, -1, 80, -1, -1, 83, -1, -1, -1, 87, + 88, 89, -1, -1, -1, -1, -1, -1, 4967, -1, + -1, -1, -1, -1, -1, -1, 104, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 114, -1, 5675, -1, + -1, -1, -1, 121, -1, 4994, -1, -1, -1, -1, + 447, -1, -1, -1, -1, -1, -1, -1, -1, 2138, + 2139, 2140, -1, -1, -1, -1, -1, -1, -1, 147, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5719, -1, -1, -1, -1, -1, 2167, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1028, 2178, + -1, -1, -1, 1033, -1, -1, -1, 1037, -1, -1, + 3174, -1, -1, -1, 1044, 2194, -1, 1047, -1, 6135, + -1, 6137, -1, -1, -1, -1, -1, -1, -1, 1059, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5781, -1, -1, -1, -1, -1, + 547, -1, -1, -1, -1, -1, -1, -1, 555, 556, + 557, 558, 559, 560, 561, 562, 563, -1, 2247, -1, + -1, 568, 4659, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 261, -1, -1, -1, -1, 266, 2268, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2281, -1, -1, -1, -1, -1, -1, -1, + 288, 289, -1, 5850, 2293, -1, -1, -1, -1, -1, + -1, -1, -1, 4710, -1, 303, -1, 6243, 4715, -1, + 4717, -1, -1, -1, -1, -1, 1166, 1167, 3302, -1, + -1, 3305, -1, 1173, -1, -1, -1, 1177, -1, 6265, + -1, -1, -1, 4740, 2333, 2334, -1, -1, -1, -1, + -1, -1, 6278, -1, 342, -1, -1, -1, -1, -1, + -1, 5220, -1, 1203, -1, 6291, -1, -1, 356, -1, + -1, 359, -1, -1, 2926, -1, -1, -1, -1, -1, + -1, -1, 4779, -1, -1, 4782, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2952, -1, -1, 5262, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5960, -1, 5274, -1, -1, 3392, -1, + -1, -1, -1, -1, 6350, 6351, -1, -1, -1, -1, + -1, 3405, 2984, -1, -1, -1, -1, -1, -1, 3413, + -1, 5988, -1, -1, 5303, -1, -1, -1, -1, -1, + 3002, 3003, -1, -1, -1, -1, -1, -1, -1, 447, + -1, -1, -1, -1, -1, 2454, -1, -1, 2457, -1, + -1, -1, -1, -1, -1, 4872, 4873, -1, 6404, 3453, + -1, -1, -1, -1, 3036, 4882, -1, -1, -1, -1, + -1, -1, 2481, -1, -1, -1, -1, -1, -1, -1, + 3474, -1, 4899, -1, -1, -1, 6053, -1, -1, 1349, + 1350, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5381, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1373, 1374, 1375, -1, -1, -1, -1, + -1, 5400, -1, -1, -1, 6092, 1386, -1, -1, -1, + -1, 1391, 1392, -1, -1, -1, 1396, -1, 1398, 547, + -1, -1, 1402, -1, 3538, -1, 3540, 555, 556, 557, + 558, 559, 560, 561, 562, 563, -1, 1417, -1, -1, + 568, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4994, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1459, + -1, 1461, 1462, -1, -1, -1, -1, 6553, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5497, -1, + -1, -1, -1, -1, 6191, -1, -1, -1, -1, 80, + -1, -1, 83, -1, -1, -1, 87, 88, 89, -1, + -1, -1, -1, 3637, -1, 6591, 3218, -1, 1508, -1, + 3644, 6597, 6598, 104, -1, -1, 6602, -1, -1, -1, + -1, 3233, -1, 114, -1, -1, -1, -1, -1, 80, + 121, -1, 83, -1, -1, -1, 87, 88, 89, -1, + 3252, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 104, -1, -1, 147, -1, -1, -1, + -1, -1, -1, 114, -1, -1, -1, -1, -1, -1, + 121, 6278, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1587, -1, -1, + -1, -1, -1, -1, -1, -1, 147, -1, 5617, -1, + 5619, -1, -1, -1, -1, -1, 80, -1, -1, 83, + -1, -1, -1, 87, 88, 89, -1, -1, 3330, 3331, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 104, -1, -1, -1, -1, 6342, -1, -1, -1, -1, + 114, 1641, -1, 6350, 6351, -1, 5665, 121, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5220, -1, -1, -1, -1, -1, -1, + 261, -1, 1672, 147, -1, 266, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5714, -1, 288, 289, -1, + -1, -1, 1702, -1, -1, 5262, -1, -1, -1, -1, + 261, -1, 303, -1, -1, 266, -1, 5274, -1, 3431, + 6427, -1, -1, -1, -1, -1, 6433, -1, -1, -1, + 1730, 1731, 1732, -1, 1734, -1, -1, 288, 289, -1, + -1, -1, -1, 6450, -1, -1, 5303, -1, -1, -1, + -1, 342, 303, -1, 1754, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 356, -1, -1, 359, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2930, -1, -1, -1, -1, -1, 261, -1, -1, + -1, 342, 266, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 356, -1, -1, 359, -1, + -1, 3945, 3946, -1, 288, 289, -1, -1, -1, -1, + -1, -1, -1, -1, 5381, -1, -1, 6534, -1, 303, + -1, -1, 1832, -1, -1, -1, 1836, 1837, -1, 6546, + -1, -1, -1, 5400, -1, -1, -1, -1, -1, -1, + -1, 1851, -1, -1, -1, -1, 447, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 342, -1, + -1, -1, -1, -1, -1, -1, -1, 6584, -1, -1, + 6587, -1, 356, -1, -1, 359, -1, -1, -1, -1, + 6597, 6598, -1, -1, -1, -1, 447, -1, -1, -1, + 5919, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5933, -1, -1, -1, -1, -1, + -1, 1921, -1, -1, -1, -1, -1, 1927, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1937, -1, -1, + 5497, -1, -1, -1, 5963, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3104, 547, -1, -1, 3108, + 3109, -1, -1, -1, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 447, -1, -1, -1, 568, 1978, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1988, -1, + -1, -1, -1, -1, -1, -1, 547, -1, -1, -1, + -1, -1, -1, -1, 555, 556, 557, 558, 559, 560, + 561, 562, 563, -1, -1, -1, -1, 568, 3167, -1, + -1, -1, -1, -1, 3173, 2025, -1, -1, -1, -1, + -1, -1, -1, -1, 2034, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4181, -1, -1, + -1, 2051, -1, -1, -1, -1, -1, -1, 2058, -1, + 5617, -1, 5619, 3775, -1, 3214, -1, -1, 80, -1, + -1, 83, -1, 547, -1, 87, 88, 89, -1, -1, + -1, 555, 556, 557, 558, 559, 560, 561, 562, 563, + -1, -1, 104, 3805, 568, -1, -1, -1, -1, -1, + -1, -1, 114, -1, -1, -1, -1, -1, 5665, 121, + -1, -1, -1, -1, -1, -1, 6135, -1, 6137, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 147, -1, -1, 2138, 2139, + 2140, -1, 80, -1, -1, 83, -1, -1, -1, 87, + 88, 89, -1, -1, -1, -1, -1, 5714, -1, -1, + -1, -1, -1, -1, -1, -1, 104, 2167, -1, -1, + -1, -1, -1, -1, -1, -1, 114, -1, 2178, -1, + -1, -1, -1, 121, -1, -1, -1, -1, -1, -1, + 2190, -1, -1, -1, 2194, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 147, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6243, -1, -1, -1, -1, 4363, + -1, 3380, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6265, 2247, -1, 261, + -1, -1, -1, -1, 266, -1, -1, -1, -1, -1, + -1, -1, 2262, 3412, -1, 2265, -1, -1, 2268, -1, + -1, -1, 6291, -1, -1, 2275, 288, 289, -1, 80, + -1, 2281, 83, -1, -1, -1, 87, 88, 89, -1, + -1, 303, -1, 2293, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 104, -1, -1, 2306, 2307, -1, -1, + -1, -1, -1, 114, -1, -1, -1, -1, -1, -1, + 121, 2321, -1, 261, 2324, -1, -1, -1, 266, -1, + 342, -1, -1, 2333, 2334, -1, -1, 3486, -1, -1, + 4052, 3490, -1, -1, 356, -1, 147, 359, -1, -1, + 288, 289, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5919, -1, -1, 303, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5933, -1, -1, -1, + -1, -1, -1, -1, -1, 6404, -1, -1, -1, -1, + -1, -1, 2392, -1, -1, 2395, 2396, -1, -1, -1, + -1, -1, -1, -1, 342, -1, 5963, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 356, -1, + -1, 359, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2432, 2433, -1, 447, -1, -1, 2438, 2439, + -1, -1, -1, -1, -1, 2445, 2446, 2447, -1, -1, + 2450, -1, 2452, -1, 2454, 2455, 2456, 2457, 2458, 2459, + 261, 2461, -1, 2463, 2464, 266, -1, 2467, -1, -1, + -1, -1, -1, -1, 3623, -1, -1, -1, -1, -1, + -1, 2481, 2482, 2483, 2484, -1, -1, 288, 289, 3638, + -1, -1, -1, -1, 3643, -1, -1, -1, -1, 2499, + -1, 2501, 303, -1, -1, -1, 4218, 4219, 4220, 447, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4235, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6553, 547, -1, -1, -1, -1, + -1, 342, -1, 555, 556, 557, 558, 559, 560, 561, + 562, 563, -1, -1, -1, 356, 568, -1, 359, 4271, + 4272, -1, -1, -1, 4276, -1, -1, -1, -1, -1, + -1, -1, 6591, -1, -1, -1, -1, -1, 6135, -1, + 6137, -1, -1, 6602, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 547, + -1, -1, -1, -1, -1, -1, -1, 555, 556, 557, + 558, 559, 560, 561, 562, 563, -1, -1, -1, -1, + 568, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2642, -1, -1, -1, 447, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2682, -1, -1, -1, 6243, -1, 4400, -1, + -1, 4403, -1, -1, -1, -1, 4830, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 6265, -1, + 4844, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2733, 6291, 3884, -1, -1, 3887, -1, + 3889, -1, -1, -1, -1, 3894, 547, -1, -1, -1, + -1, -1, -1, -1, 555, 556, 557, 558, 559, 560, + 561, 562, 563, -1, -1, -1, -1, 568, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3942, -1, -1, -1, -1, -1, -1, + -1, 3950, -1, -1, -1, -1, -1, -1, -1, 5, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4531, + 4532, 4533, -1, -1, -1, -1, 3975, -1, 24, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 34, 35, + -1, -1, -1, -1, -1, 41, 42, 6404, -1, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, -1, -1, -1, 73, -1, 75, + 76, -1, -1, -1, -1, 81, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4044, -1, 4046, -1, -1, + -1, -1, -1, -1, 5, -1, -1, 2907, 2908, 2909, + 2910, 2911, 2912, 2913, 2914, 2915, -1, 2917, -1, -1, + -1, -1, -1, 24, -1, -1, -1, 2927, -1, -1, + 2930, -1, -1, 34, 35, -1, -1, -1, 39, -1, + 41, 42, 138, -1, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + 71, -1, 73, -1, 75, 76, -1, -1, -1, -1, + 81, -1, -1, -1, -1, -1, 2986, -1, 4137, -1, + 2990, -1, -1, 2993, -1, 2995, 6553, -1, 2998, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3013, -1, 4164, -1, -1, -1, 215, + -1, 4170, 3022, 3023, -1, 94, -1, -1, -1, -1, + 4179, 100, -1, -1, 6591, -1, -1, 138, 107, 235, + -1, -1, -1, -1, -1, 6602, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4207, -1, + 129, -1, 258, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 145, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 282, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3104, -1, -1, -1, 3108, 3109, + -1, 180, -1, -1, 215, -1, -1, -1, -1, -1, + 3120, -1, -1, 319, -1, -1, 322, -1, -1, 4278, + -1, -1, 201, -1, 235, -1, -1, -1, -1, 208, + -1, 4853, 211, -1, -1, -1, -1, -1, 344, -1, + -1, 4300, -1, -1, 3154, -1, -1, 258, -1, -1, + -1, -1, -1, -1, -1, 3165, -1, 3167, 3168, 238, + 3170, 3171, 4884, 3173, -1, 4324, -1, -1, -1, -1, + 5314, 282, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5329, -1, -1, 3198, -1, + 269, -1, -1, 272, 4916, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3214, -1, -1, -1, 319, -1, + -1, 322, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3236, 433, -1, 4951, + 3240, -1, -1, 344, -1, -1, -1, -1, 317, -1, + -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3263, -1, -1, 335, -1, -1, -1, + 339, 4983, -1, -1, -1, -1, 4425, -1, -1, 3279, + 349, -1, -1, -1, -1, -1, 5420, 483, -1, 358, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4448, + 369, 370, -1, 499, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 514, -1, + -1, -1, -1, -1, 4473, -1, -1, -1, -1, -1, + -1, -1, 433, -1, -1, -1, -1, -1, -1, 408, + -1, -1, 411, 412, 413, -1, -1, -1, 544, -1, + -1, -1, -1, -1, 3354, -1, -1, -1, -1, -1, + -1, 557, 558, 559, 560, 561, 562, 436, -1, 565, + 566, 567, -1, 442, -1, -1, 572, 573, 3378, 3379, + 3380, -1, 483, -1, 3384, -1, -1, 456, -1, 5101, + 5102, 5103, 5104, -1, -1, -1, -1, -1, 499, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3411, 3412, 514, -1, -1, -1, -1, -1, -1, + 3420, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 510, -1, 544, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3454, -1, 557, 558, 559, 560, + 561, 562, -1, -1, 565, 566, 567, 568, -1, 570, + 571, 572, 573, 574, -1, -1, -1, 4626, -1, -1, + -1, -1, -1, -1, -1, -1, 3486, -1, -1, -1, + 3490, 5625, -1, 5627, -1, -1, -1, -1, -1, -1, + 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3512, -1, -1, -1, -1, -1, -1, 24, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 34, + 35, -1, -1, -1, -1, -1, 41, 42, -1, -1, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, 4716, 73, -1, + 75, 76, -1, -1, -1, -1, 81, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4741, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3623, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 138, -1, -1, 3636, -1, 3638, 3639, + -1, 3641, 3642, 3643, -1, 5779, -1, -1, -1, -1, + -1, 3651, -1, -1, -1, -1, 3656, -1, -1, -1, + -1, -1, -1, -1, -1, 80, -1, -1, 83, -1, + -1, -1, 87, 88, 89, -1, -1, -1, -1, -1, + -1, -1, 3682, 3683, 3684, -1, -1, 3687, -1, 104, + -1, -1, -1, -1, -1, 3695, 3696, 3697, 3698, 114, + -1, -1, -1, 3703, -1, -1, 121, -1, 3708, 3709, + 215, 3711, -1, 3713, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3724, 3725, -1, 4876, 3728, -1, + 235, -1, 147, -1, -1, -1, -1, 5449, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3747, 5460, 3749, + -1, 3751, -1, 258, -1, -1, -1, -1, -1, 80, + -1, -1, 83, -1, -1, -1, 87, 88, 89, -1, + -1, 3771, -1, -1, -1, 4924, -1, 282, 4927, -1, + -1, -1, 3782, 104, -1, -1, -1, 108, -1, 5923, + -1, 5925, -1, 114, -1, -1, -1, -1, -1, -1, + 121, -1, -1, -1, -1, -1, -1, -1, -1, 1033, + -1, -1, -1, 3813, 319, -1, -1, 322, -1, -1, + -1, -1, -1, -1, -1, -1, 147, -1, 3828, -1, + -1, -1, -1, -1, -1, 1059, -1, -1, -1, 344, + -1, -1, 3842, -1, -1, -1, 261, -1, -1, -1, + -1, 266, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 288, 289, -1, -1, 198, -1, -1, + -1, -1, -1, -1, 3884, -1, -1, 3887, 303, 3889, + -1, -1, -1, -1, 3894, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 80, -1, 3915, 83, -1, -1, -1, + 87, 88, 89, -1, 5073, -1, -1, 342, 433, -1, + -1, -1, -1, -1, -1, -1, -1, 104, -1, -1, + 261, 356, 3942, -1, 359, 266, -1, 114, -1, -1, + 3950, -1, -1, -1, 121, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 288, 289, -1, + -1, -1, -1, -1, -1, 3975, -1, -1, 483, -1, + 147, -1, 303, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 499, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 514, + -1, 4011, 4012, 4013, -1, -1, -1, -1, -1, -1, + -1, 342, -1, -1, -1, 5737, -1, -1, -1, -1, + 5742, -1, 447, -1, -1, 356, -1, -1, 359, 544, + -1, -1, 6176, -1, 4044, -1, 4046, -1, -1, 5761, + -1, -1, 557, 558, 559, 560, 561, 562, 5207, -1, + 565, 566, 567, 568, -1, -1, -1, 572, -1, -1, + 237, -1, -1, -1, -1, 242, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 261, -1, 5245, -1, -1, 266, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5267, -1, + -1, 288, 289, -1, -1, -1, 447, -1, -1, -1, + -1, -1, 547, -1, -1, -1, 303, 4137, -1, -1, + 555, 556, 557, 558, 559, 560, 561, 562, 563, -1, + -1, 566, -1, -1, -1, -1, -1, -1, -1, 6293, + -1, -1, -1, -1, 4164, -1, -1, 1391, -1, -1, + 4170, -1, -1, -1, 5886, 342, -1, -1, 1402, 4179, + -1, -1, -1, -1, -1, 5334, 507, -1, -1, 356, + -1, -1, 359, 1417, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4206, 4207, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 547, -1, -1, -1, + -1, -1, -1, -1, 555, 556, 557, 558, 559, 560, + 561, 562, 563, -1, -1, -1, -1, -1, -1, -1, + 4250, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6398, -1, -1, -1, -1, -1, + -1, -1, -1, 5985, -1, -1, -1, -1, 4278, -1, + 447, -1, -1, -1, 1508, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6428, 6429, -1, 5, -1, -1, + 4300, -1, 6014, -1, -1, 5454, -1, 5456, -1, -1, + -1, -1, -1, -1, -1, -1, 24, -1, -1, -1, + -1, -1, -1, -1, 4324, -1, 34, 35, -1, -1, + -1, -1, -1, 41, 42, -1, -1, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, -1, -1, -1, 73, -1, 75, 76, -1, + -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, + 547, -1, -1, -1, -1, -1, -1, -1, 555, 556, + 557, 558, 559, 560, 561, 562, 563, -1, -1, -1, + -1, -1, -1, -1, 80, -1, -1, 83, -1, 6543, + -1, 87, 88, 89, -1, -1, -1, 1641, -1, -1, + -1, -1, 4422, -1, -1, 4425, -1, -1, 104, -1, + 138, 4431, -1, -1, -1, -1, -1, -1, 114, 4439, + -1, 4441, -1, -1, 4444, 121, -1, -1, 4448, 4449, + 4450, 4451, 4452, -1, -1, 4455, 4456, 4457, 4458, 4459, + 4460, 4461, 4462, 4463, 4464, -1, -1, -1, 4468, 4469, + 4470, 147, -1, 4473, -1, -1, -1, -1, 4478, -1, + -1, -1, 4482, -1, 4484, -1, 4486, -1, -1, -1, + -1, -1, -1, -1, 4494, -1, -1, 4497, -1, 4499, + -1, -1, -1, -1, -1, -1, -1, 215, -1, 4509, + -1, -1, 4512, 4513, -1, 5664, -1, 4517, 4518, -1, + -1, -1, -1, -1, 4524, -1, -1, 235, -1, -1, + -1, -1, -1, -1, 4534, -1, -1, 4537, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4547, -1, -1, + 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 236, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1794, -1, -1, -1, 282, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 261, -1, -1, -1, -1, + 266, -1, -1, -1, 4594, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4610, 319, 288, 289, 322, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4626, 303, -1, -1, + -1, -1, -1, -1, -1, 5784, 344, -1, 4638, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 80, -1, -1, 83, -1, -1, + -1, 87, 88, 89, -1, -1, 342, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 104, -1, + 356, -1, -1, 359, -1, -1, -1, -1, 114, -1, + -1, -1, -1, -1, -1, 121, -1, 1921, -1, -1, + -1, -1, -1, -1, -1, 381, -1, 5856, -1, -1, + 4710, -1, -1, -1, -1, 4715, 4716, 4717, -1, -1, + -1, 147, -1, -1, -1, 433, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 80, -1, -1, 83, + 4740, 4741, -1, 87, 88, 89, -1, -1, -1, -1, + -1, -1, -1, 5902, -1, -1, -1, -1, 5907, 5908, + 104, -1, -1, 107, 1988, -1, -1, -1, -1, -1, + 114, 447, -1, -1, -1, 483, -1, 121, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 499, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2025, -1, 147, -1, -1, 514, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2058, 261, 544, -1, -1, -1, + 266, -1, -1, -1, -1, -1, 4846, -1, -1, 557, + 558, 559, 560, 561, 562, -1, -1, 565, 566, 567, + -1, -1, 288, 289, 572, -1, -1, -1, -1, 6018, + 6019, 547, -1, -1, -1, -1, 4876, 303, -1, 555, + 556, 557, 558, 559, 560, 561, 562, 563, -1, 4889, + 4890, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 342, 261, -1, -1, + -1, -1, 266, -1, 4924, -1, -1, 4927, 4928, 4929, + 356, -1, -1, 359, -1, -1, -1, -1, -1, 4939, + -1, -1, -1, 2167, 288, 289, -1, -1, -1, -1, + -1, -1, -1, -1, 2178, -1, -1, 383, -1, 303, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2194, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 80, -1, -1, 83, -1, + -1, -1, 87, 88, 89, -1, -1, -1, 342, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 104, + -1, -1, 356, -1, -1, 359, -1, -1, -1, 114, + 5020, 447, -1, 2247, -1, -1, 121, -1, -1, -1, + -1, 5031, -1, -1, -1, -1, -1, -1, 464, -1, + -1, -1, -1, -1, 2268, -1, -1, -1, -1, -1, + -1, -1, 147, -1, -1, -1, -1, 2281, -1, 5059, + -1, -1, 5062, -1, -1, -1, -1, -1, -1, 2293, + 5070, 5071, -1, 5073, -1, -1, -1, 5077, 5078, -1, + -1, -1, 5082, -1, -1, -1, 5086, -1, -1, 5089, + 5090, -1, -1, -1, 5094, -1, -1, 6246, -1, -1, + 5100, -1, -1, 447, -1, -1, -1, -1, -1, 2333, + 2334, -1, 5112, -1, -1, -1, -1, -1, -1, -1, + 5120, 547, -1, -1, 5124, -1, -1, -1, -1, 555, + 556, 557, 558, 559, 560, 561, 562, 563, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1033, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5157, -1, -1, + -1, 80, -1, -1, 83, -1, 261, -1, 87, 88, + 89, 266, -1, 1059, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 104, -1, -1, 107, 5189, + -1, -1, -1, 288, 289, 114, -1, -1, -1, -1, + -1, -1, 121, 547, -1, -1, -1, 5207, 303, -1, + -1, 555, 556, 557, 558, 559, 560, 561, 562, 563, + -1, -1, -1, -1, -1, -1, -1, -1, 147, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5245, -1, 342, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2481, -1, -1, + -1, 356, 80, -1, 359, 83, -1, 5267, -1, 87, + 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 377, -1, -1, -1, 104, -1, -1, -1, + 5290, 80, -1, -1, 83, -1, 114, -1, 87, 88, + 89, -1, -1, 121, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 104, -1, -1, 107, -1, + -1, -1, -1, -1, -1, 114, -1, -1, -1, 147, + -1, -1, 121, -1, 5334, -1, -1, -1, -1, -1, + -1, -1, 261, -1, -1, -1, -1, 266, -1, -1, + -1, -1, 447, -1, -1, -1, -1, -1, 147, 133, + 5360, -1, -1, -1, -1, -1, -1, -1, -1, 288, + 289, -1, -1, -1, -1, -1, 5376, -1, -1, -1, + -1, 5381, -1, -1, 303, -1, -1, -1, -1, -1, + -1, 165, 80, -1, -1, 83, -1, -1, -1, 87, + 88, 89, -1, -1, -1, -1, 180, 5407, -1, -1, + -1, -1, -1, -1, -1, 189, 104, -1, -1, -1, + -1, -1, -1, 342, 242, -1, 114, -1, -1, -1, + 204, -1, 206, 121, 6583, -1, 210, 356, -1, -1, + 359, -1, -1, 261, -1, -1, 220, -1, 266, -1, + -1, -1, 547, -1, 5454, 229, 5456, -1, -1, 147, + 555, 556, 557, 558, 559, 560, 561, 562, 563, -1, + 288, 289, 261, -1, -1, -1, -1, 266, -1, -1, + -1, -1, -1, -1, -1, 303, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 288, + 289, -1, -1, -1, -1, 1391, -1, -1, -1, -1, + -1, -1, -1, -1, 303, 5515, 1402, -1, 5518, -1, + -1, 5521, 5522, 5523, 342, -1, -1, 80, 447, -1, + 83, 1417, -1, -1, 87, 88, 89, -1, 356, -1, + -1, 359, -1, -1, -1, -1, 5546, 5547, -1, -1, + 5550, 104, -1, 342, 107, -1, -1, -1, -1, -1, + -1, 114, -1, -1, -1, 5565, -1, 356, 121, -1, + 359, -1, 5572, 261, -1, -1, -1, 5577, 266, -1, + 5580, 5581, -1, -1, -1, -1, -1, -1, 5588, -1, + -1, -1, -1, -1, 147, -1, -1, -1, -1, -1, + 288, 289, -1, -1, -1, -1, -1, -1, -1, 5609, + -1, 5611, -1, -1, -1, 303, -1, -1, -1, -1, + -1, -1, 1508, 5623, -1, -1, -1, -1, 547, 447, + -1, -1, -1, -1, -1, -1, 555, 556, 557, 558, + 559, 560, 561, 562, 563, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 342, -1, -1, -1, 447, -1, + -1, -1, -1, -1, 5664, -1, -1, -1, 356, -1, + -1, 359, -1, -1, -1, 5675, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 261, -1, + -1, -1, -1, 266, 5714, -1, -1, -1, -1, 5719, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 547, + -1, -1, -1, -1, -1, 288, 289, 555, 556, 557, + 558, 559, 560, 561, 562, 563, -1, -1, -1, -1, + 303, -1, -1, -1, -1, 1641, -1, -1, 547, 447, + -1, -1, -1, -1, -1, -1, 555, 556, 557, 558, + 559, 560, 561, 562, 563, -1, -1, -1, -1, -1, + -1, 5781, -1, -1, 5784, -1, -1, -1, -1, 342, + -1, 479, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 94, 356, -1, -1, 359, -1, 100, -1, + -1, -1, -1, -1, -1, 107, 5816, -1, -1, -1, + 5820, -1, 5822, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 129, -1, -1, + 5840, -1, -1, -1, -1, -1, 5846, -1, -1, -1, + 5850, -1, -1, 145, -1, -1, 5856, 5857, -1, 547, + -1, -1, -1, -1, -1, -1, -1, 555, 556, 557, + 558, 559, 560, 561, 562, 563, -1, -1, -1, -1, + 3104, -1, -1, -1, 3108, 3109, -1, -1, 180, -1, + -1, -1, -1, -1, 447, -1, -1, -1, -1, -1, + -1, -1, 5902, -1, -1, -1, -1, 5907, 5908, 201, + -1, -1, 5912, -1, -1, -1, 208, 5917, 5918, 211, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3167, -1, -1, 238, -1, -1, 3173, + -1, -1, -1, 5953, -1, -1, -1, -1, -1, -1, + 5960, -1, -1, 5963, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 269, -1, -1, + 272, -1, -1, -1, -1, -1, -1, -1, 5988, -1, + 3214, -1, -1, -1, 547, -1, -1, -1, -1, -1, + -1, -1, 555, 556, 557, 558, 559, 560, 561, 562, + 563, -1, -1, -1, 80, -1, -1, 83, 6018, 6019, + -1, 87, 88, 89, -1, 317, -1, -1, 320, -1, + -1, -1, -1, -1, -1, 1921, -1, -1, 104, -1, + -1, -1, -1, 335, 6044, -1, -1, 339, 114, -1, + 6050, -1, -1, 6053, -1, 121, 6056, 349, -1, -1, + -1, -1, -1, -1, -1, -1, 358, 6067, -1, -1, + -1, -1, -1, -1, 6074, -1, -1, 369, 370, -1, + -1, 147, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6092, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1988, -1, -1, -1, -1, -1, -1, -1, + 6110, -1, -1, -1, -1, -1, 408, -1, -1, 411, + 412, 413, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 905, 906, 907, -1, 6135, 910, -1, -1, 2025, + 914, -1, 916, -1, 436, 919, -1, -1, 922, -1, + 442, 925, -1, -1, 928, -1, 930, -1, -1, 933, + -1, -1, -1, 937, 456, 939, -1, -1, -1, -1, + -1, -1, 2058, -1, -1, -1, 242, -1, -1, -1, + -1, -1, -1, -1, 958, -1, -1, -1, 3412, -1, + 964, 6191, 966, -1, 968, 261, -1, 971, -1, -1, + 266, -1, -1, -1, 978, -1, -1, -1, -1, 983, + -1, 985, -1, -1, -1, -1, -1, 991, 510, -1, + -1, -1, 288, 289, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6233, 6234, 6235, -1, 303, -1, -1, + -1, -1, 6242, 6243, -1, -1, 6246, -1, -1, -1, + -1, 6251, -1, 6253, 1028, 6255, -1, -1, -1, -1, + -1, -1, 3486, 1037, -1, -1, 3490, 1041, -1, -1, + 1044, -1, -1, 1047, -1, -1, 342, -1, 6278, -1, + -1, 2167, -1, -1, -1, -1, -1, -1, -1, 1063, + 356, -1, 2178, 359, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2194, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6332, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6342, -1, -1, -1, -1, 1121, -1, -1, + 6350, 6351, -1, -1, -1, -1, 6356, -1, -1, 6359, + -1, 2247, -1, -1, 1138, -1, -1, -1, -1, 6369, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 6379, + -1, 447, 2268, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1166, 1167, -1, 2281, -1, -1, 1172, 3623, + -1, -1, -1, -1, -1, -1, -1, 2293, -1, -1, + -1, -1, -1, -1, 3638, -1, -1, 1191, -1, 3643, + -1, 1195, -1, -1, -1, -1, -1, 6427, -1, 1203, + -1, -1, -1, 6433, -1, -1, -1, -1, -1, -1, + 1214, -1, -1, -1, -1, -1, -1, 2333, 2334, -1, + 6450, -1, 1226, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6465, -1, -1, -1, -1, + 6470, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 547, -1, 6483, -1, -1, -1, -1, 6488, 555, + 556, 557, 558, 559, 560, 561, 562, 563, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 6519, + -1, -1, -1, -1, -1, -1, -1, 1301, -1, -1, + 6530, -1, -1, -1, 6534, -1, -1, -1, 1312, -1, + -1, -1, -1, 1317, 1318, -1, 6546, -1, 80, -1, + -1, 83, -1, 6553, -1, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 114, 6583, 6584, -1, -1, 6587, -1, 121, + -1, 6591, -1, -1, -1, 2481, -1, 6597, 6598, 1373, + 1374, -1, 6602, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1386, -1, 1388, 147, -1, -1, 1392, -1, + -1, 1395, 1396, -1, 1398, -1, -1, -1, -1, 1403, + 80, -1, -1, 83, -1, -1, -1, 87, 88, 89, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1426, -1, 104, -1, -1, -1, 1432, 1433, + 3884, -1, -1, 3887, 114, 3889, -1, -1, -1, -1, + 3894, 121, -1, -1, -1, -1, -1, -1, -1, 1453, + 1454, 1455, -1, 1457, -1, 1459, -1, 1461, 1462, -1, + -1, -1, -1, -1, 1468, -1, -1, 147, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 242, -1, -1, 80, -1, -1, 83, -1, 3942, -1, + 87, 88, 89, -1, -1, -1, 3950, -1, -1, 261, + -1, -1, -1, -1, 266, -1, -1, 104, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 114, -1, -1, + -1, 3975, -1, -1, 121, -1, 288, 289, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1541, -1, 1543, + 1544, 303, -1, -1, -1, -1, -1, -1, -1, -1, + 147, -1, -1, -1, -1, -1, -1, 237, -1, -1, + -1, 80, -1, -1, 83, -1, -1, -1, 87, 88, + 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 342, 261, -1, 1587, -1, 104, 266, -1, -1, -1, + 4044, -1, 4046, -1, 356, 114, -1, 359, -1, -1, + -1, -1, 121, -1, -1, -1, -1, -1, 288, 289, + -1, -1, -1, -1, -1, -1, -1, 1621, 1622, 216, + -1, -1, 1626, 303, 1628, -1, -1, -1, 147, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1647, -1, -1, -1, -1, -1, 1653, + -1, -1, 1656, -1, -1, 1659, -1, -1, -1, -1, + -1, -1, 342, -1, 261, -1, -1, -1, 1672, 266, + -1, -1, -1, -1, -1, -1, 356, -1, -1, 359, + -1, -1, -1, 4137, -1, 447, -1, -1, -1, -1, + -1, 288, 289, -1, -1, -1, -1, -1, 1702, -1, + -1, -1, -1, -1, -1, -1, 303, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 237, -1, + -1, -1, -1, -1, -1, 4179, 1730, 1731, 1732, -1, + 1734, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 261, -1, -1, 342, -1, 266, -1, -1, + 1754, -1, -1, 4207, -1, -1, -1, -1, -1, 356, + -1, -1, 359, -1, -1, -1, -1, 447, -1, 288, + 289, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 303, 547, -1, -1, -1, -1, + -1, -1, -1, 555, 556, 557, 558, 559, 560, 561, + 562, 563, 1806, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 342, 4278, -1, -1, -1, 1832, -1, + -1, -1, 1836, 1837, -1, -1, -1, 356, -1, -1, + 359, -1, -1, 1847, 1848, 1849, 4300, 1851, -1, -1, + 447, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 547, -1, -1, + 4324, -1, -1, -1, -1, 555, 556, 557, 558, 559, + 560, 561, 562, 563, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 447, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 547, -1, -1, -1, -1, -1, -1, -1, 555, 556, + 557, 558, 559, 560, 561, 562, 563, -1, -1, 1973, + -1, 4425, -1, -1, -1, -1, -1, 1981, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3104, -1, + 1994, 1995, 3108, 3109, 4448, -1, -1, -1, -1, 2003, + -1, -1, 2006, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4473, + -1, -1, -1, -1, -1, 2029, -1, 2031, 547, -1, + -1, -1, -1, -1, -1, -1, 555, 556, 557, 558, + 559, 560, 561, 562, 563, -1, -1, -1, -1, -1, + 2054, 3167, -1, 2057, -1, -1, -1, 3173, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2079, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2096, -1, -1, -1, -1, -1, 3214, -1, + -1, -1, -1, -1, 2108, 2109, 2110, 2111, 2112, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2126, 80, -1, -1, 83, -1, -1, -1, + 87, 88, 89, -1, 2138, 2139, 2140, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 104, -1, -1, + 2154, -1, -1, -1, -1, -1, -1, 114, -1, -1, + -1, 2165, -1, -1, 121, -1, -1, -1, -1, 2173, + 2174, -1, 4626, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2189, -1, -1, -1, -1, + 147, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2207, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2223, + 2224, 2225, 2226, -1, -1, -1, -1, -1, 2232, -1, + -1, -1, -1, -1, -1, 2239, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2262, -1, + -1, 2265, 4716, -1, -1, -1, -1, -1, -1, -1, + -1, 2275, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4741, -1, -1, + -1, -1, -1, -1, -1, -1, 3412, -1, -1, -1, + -1, -1, 2306, 2307, 261, -1, -1, -1, -1, 266, + -1, -1, -1, 2317, 2318, -1, -1, 2321, -1, -1, + 2324, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 288, 289, -1, -1, 2339, 2340, -1, -1, -1, + -1, -1, 2346, -1, -1, -1, 303, -1, -1, -1, + -1, -1, -1, 2357, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3486, -1, -1, -1, 3490, -1, -1, -1, -1, 2383, + -1, -1, -1, -1, -1, 342, 2390, -1, 2392, -1, + -1, 2395, 2396, -1, 2398, 2399, -1, 2401, -1, 356, + -1, -1, 359, -1, 2408, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2418, -1, -1, -1, -1, 92, + 2424, 2425, 4876, -1, 2428, -1, -1, -1, 2432, 2433, + -1, -1, -1, -1, 2438, 2439, -1, 110, -1, -1, + -1, 2445, 2446, 2447, -1, -1, 2450, -1, 2452, 2453, + 2454, 2455, 2456, 2457, 2458, 2459, -1, 2461, -1, 2463, + 2464, -1, 135, 2467, -1, -1, -1, -1, -1, -1, + 4924, -1, -1, 4927, -1, 148, -1, -1, 2482, 2483, + 2484, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 447, 164, -1, -1, -1, 2499, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3623, -1, 182, + -1, -1, -1, -1, -1, 188, -1, -1, -1, -1, + -1, -1, 3638, -1, -1, -1, -1, 3643, -1, -1, + -1, -1, -1, 206, -1, 2539, -1, -1, -1, -1, + -1, -1, -1, -1, 217, -1, -1, -1, -1, -1, + -1, -1, -1, 226, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 239, -1, -1, -1, + -1, -1, -1, -1, 247, -1, -1, -1, 251, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 547, -1, -1, -1, -1, -1, -1, 270, 555, 556, + 557, 558, 559, 560, 561, 562, 563, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5073, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 307, -1, -1, -1, 2642, -1, + -1, -1, -1, 316, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 97, -1, -1, -1, 2682, -1, + -1, -1, -1, 356, -1, -1, 359, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 379, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 393, -1, -1, -1, -1, 148, -1, 400, -1, 2733, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 164, -1, -1, -1, -1, -1, 420, -1, -1, + -1, -1, -1, 5207, -1, -1, 429, -1, -1, 182, + -1, -1, -1, 436, -1, 188, 439, -1, 3884, -1, + -1, 3887, -1, 3889, -1, -1, -1, -1, 3894, -1, + -1, -1, -1, 206, -1, 458, -1, -1, -1, -1, + -1, 5245, 465, -1, 217, -1, -1, -1, 471, -1, + -1, 474, 475, 226, 477, 478, -1, -1, -1, -1, + -1, -1, -1, 5267, -1, -1, 239, -1, -1, -1, + 493, 244, -1, -1, -1, -1, 3942, 500, 251, -1, + 503, -1, -1, 506, 3950, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 519, 270, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3975, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 295, -1, -1, -1, -1, -1, -1, -1, + 5334, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2907, 2908, 2909, 2910, 2911, 2912, 2913, + 2914, 2915, -1, 2917, -1, -1, -1, -1, -1, -1, + -1, -1, 2926, 2927, -1, -1, 2930, -1, 4044, -1, + 4046, -1, -1, 356, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2952, -1, + -1, -1, -1, -1, -1, -1, 379, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 389, 390, -1, -1, + 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2984, -1, 2986, -1, -1, 2989, 2990, -1, -1, 2993, + -1, 2995, -1, -1, 2998, -1, -1, 420, 3002, 3003, + 423, -1, 5456, -1, 427, -1, 429, -1, -1, 3013, + -1, -1, -1, 436, -1, -1, 439, -1, 3022, 3023, + -1, 4137, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3036, -1, -1, 458, -1, -1, -1, 3043, + -1, 3045, 465, -1, -1, -1, -1, 470, 471, -1, + -1, 474, -1, -1, -1, 478, -1, -1, -1, -1, + -1, -1, -1, 4179, -1, 488, -1, -1, -1, -1, + 493, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 506, -1, -1, -1, -1, -1, -1, + -1, 4207, -1, -1, -1, -1, 519, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3135, -1, 3137, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3154, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3165, 4278, -1, 3168, 3169, 3170, 3171, -1, -1, + 3174, -1, -1, 3177, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4300, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3209, -1, -1, 4324, -1, + 5664, -1, -1, 3217, 3218, -1, -1, -1, -1, -1, + 3224, -1, -1, -1, -1, -1, -1, -1, -1, 3233, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3252, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3272, 3273, + -1, -1, 3276, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3302, -1, + -1, 3305, -1, -1, -1, -1, -1, -1, -1, 4425, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3330, 3331, -1, -1, + 5784, -1, 4448, -1, -1, -1, -1, -1, -1, -1, + -1, 3345, -1, 3347, 3348, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4473, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3378, 3379, 3380, -1, -1, -1, + 3384, -1, -1, -1, -1, -1, -1, -1, 3392, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3405, 5856, -1, -1, -1, -1, 3411, -1, 3413, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3426, -1, -1, -1, -1, 3431, -1, -1, + 3434, -1, -1, -1, 3438, -1, -1, 3441, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5902, 3453, + 3454, -1, -1, 5907, 5908, -1, -1, -1, -1, -1, + 3464, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3474, -1, 3476, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3500, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3512, -1, + 4626, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3526, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3536, -1, 3538, -1, 3540, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6019, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3586, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4716, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4741, -1, -1, -1, -1, + -1, -1, 3636, 3637, -1, 3639, -1, 3641, 3642, -1, + 3644, -1, -1, -1, -1, -1, -1, 3651, -1, -1, + -1, -1, 3656, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3682, 3683, + 3684, -1, -1, 3687, -1, -1, -1, -1, -1, -1, + -1, 3695, 3696, 3697, 3698, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3708, -1, -1, 3711, -1, 3713, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3724, 3725, -1, -1, 3728, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3745, -1, 3747, -1, 3749, -1, 3751, -1, 1033, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4876, -1, -1, -1, -1, -1, -1, 3771, -1, -1, + -1, 3775, -1, -1, -1, 1059, -1, -1, 3782, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6246, -1, -1, -1, -1, -1, -1, -1, + -1, 3805, -1, -1, -1, -1, -1, -1, 4924, 3813, + -1, 4927, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3828, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3842, -1, + -1, -1, 3846, -1, -1, 3849, -1, 3851, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3, -1, -1, -1, -1, 8, -1, -1, -1, + 12, -1, 14, -1, 16, 17, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 27, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, + -1, 3915, -1, -1, -1, -1, -1, -1, 3922, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3945, 3946, -1, -1, -1, -1, -1, 90, -1, + -1, -1, -1, -1, -1, -1, -1, 5073, 100, -1, + 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 120, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 142, -1, 144, 145, -1, -1, -1, -1, -1, 151, + -1, 153, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 165, -1, 167, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 182, -1, 184, -1, -1, 187, -1, -1, 4052, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 202, -1, 204, -1, -1, -1, 208, -1, -1, -1, + -1, -1, 214, -1, -1, -1, -1, -1, -1, -1, + 222, -1, 224, -1, -1, -1, -1, -1, -1, 231, + -1, 5207, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 248, 1391, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1402, -1, + -1, -1, -1, 265, -1, -1, -1, -1, -1, 5245, + -1, -1, -1, 1417, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5267, -1, -1, -1, -1, -1, -1, -1, -1, + 4164, -1, -1, 305, 306, -1, 4170, -1, -1, 311, + -1, -1, -1, -1, -1, -1, -1, 4181, -1, -1, + -1, 323, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 341, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4218, 4219, 4220, -1, 5334, -1, + -1, -1, -1, -1, 1508, -1, -1, -1, -1, -1, + -1, 4235, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 384, -1, -1, -1, 4250, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 398, -1, -1, -1, + -1, -1, 404, 405, -1, 407, 4270, 4271, 4272, -1, + 412, -1, 4276, -1, -1, -1, 418, -1, -1, 421, + -1, -1, -1, -1, 4288, -1, 428, -1, -1, -1, + -1, -1, 434, 435, -1, -1, -1, -1, -1, -1, + 442, -1, -1, -1, 446, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 456, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 471, + -1, -1, -1, -1, -1, -1, 4340, -1, -1, -1, + 5456, -1, -1, 1033, -1, -1, -1, -1, -1, 491, + -1, 493, -1, -1, -1, -1, -1, 1641, -1, 4363, + 502, -1, -1, -1, -1, -1, 508, -1, -1, 1059, + -1, 513, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4387, 526, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4400, -1, -1, 4403, + -1, -1, -1, -1, -1, -1, -1, 549, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4422, -1, + -1, -1, -1, -1, -1, 567, -1, 4431, -1, 571, + -1, -1, -1, -1, -1, 4439, -1, 4441, -1, -1, + 4444, -1, -1, -1, -1, 4449, 4450, 4451, 4452, -1, + -1, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, + 4464, -1, -1, -1, 4468, 4469, 4470, -1, -1, -1, + -1, -1, -1, -1, 4478, -1, -1, -1, 4482, -1, + -1, -1, 4486, -1, -1, -1, -1, -1, -1, -1, + 4494, -1, -1, 4497, -1, 4499, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4509, -1, -1, 4512, 4513, + -1, -1, -1, 4517, 4518, 133, -1, -1, 4522, -1, + 4524, -1, -1, -1, -1, -1, -1, 4531, 4532, 4533, + 4534, -1, -1, 4537, 4538, -1, -1, -1, 4542, 4543, + 4544, -1, -1, 4547, -1, -1, -1, -1, 5664, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 205, -1, -1, + 4594, -1, -1, -1, -1, 213, -1, 215, -1, -1, + -1, -1, -1, -1, 4608, -1, 4610, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4638, 4639, 4640, 1921, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5784, -1, + -1, -1, -1, -1, 4678, 4679, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4697, -1, -1, -1, -1, -1, -1, + -1, 1391, -1, -1, 1988, -1, -1, -1, -1, -1, + -1, -1, 1402, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1417, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5856, 2025, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2058, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5902, -1, -1, -1, + -1, 5907, 5908, 4797, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1508, -1, + -1, -1, -1, -1, -1, -1, 4830, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4844, -1, 4846, -1, -1, -1, -1, -1, -1, 4853, + -1, -1, -1, -1, -1, 4859, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4870, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4884, -1, -1, 2167, -1, 4889, 4890, -1, -1, -1, + -1, -1, -1, 4897, 2178, -1, -1, -1, -1, -1, + -1, -1, 4906, 6019, -1, -1, -1, -1, -1, -1, + 2194, -1, 4916, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4928, 4929, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4939, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4950, 4951, -1, -1, + -1, 1641, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2247, 4968, 4969, 4970, 4971, 4972, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4983, + -1, -1, -1, -1, 2268, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2281, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2293, + -1, -1, -1, -1, -1, -1, 5020, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5031, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2333, + 2334, -1, -1, -1, -1, 5059, -1, -1, 5062, -1, + -1, -1, -1, -1, -1, -1, 5070, 5071, -1, -1, + -1, -1, -1, 5077, 5078, -1, -1, -1, 5082, -1, + -1, -1, 5086, -1, -1, 5089, 5090, -1, -1, -1, + 5094, 5095, -1, -1, -1, -1, 5100, 5101, 5102, 5103, + 5104, -1, -1, -1, 5108, 5109, 5110, -1, 5112, 5113, + -1, -1, 5116, -1, -1, -1, 5120, -1, -1, -1, + 5124, -1, -1, -1, -1, -1, 5130, -1, -1, -1, + 6246, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5148, -1, -1, -1, -1, -1, + -1, -1, -1, 5157, -1, -1, -1, 5161, -1, -1, + -1, -1, 5166, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5186, -1, -1, 5189, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2481, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5223, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1921, -1, -1, -1, 5239, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5290, 905, -1, -1, + -1, -1, -1, -1, -1, -1, 914, -1, 1988, -1, + -1, -1, -1, -1, 922, -1, -1, 925, -1, -1, + 5314, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5329, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2025, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5360, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2058, -1, + -1, -1, 5376, -1, -1, -1, -1, -1, -1, 5383, + -1, -1, -1, -1, -1, -1, -1, -1, 5392, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5407, -1, -1, -1, -1, -1, -1, + 1028, -1, -1, -1, -1, 1033, 5420, -1, 5422, 1037, + -1, -1, -1, -1, -1, -1, 1044, -1, -1, 1047, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1059, -1, -1, -1, 5449, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5460, -1, -1, -1, + -1, -1, 5466, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2167, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2178, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2194, -1, -1, -1, -1, -1, + -1, 5515, -1, -1, 5518, -1, -1, 5521, 5522, 5523, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5546, 5547, -1, -1, 5550, -1, 1166, 1167, + -1, -1, -1, -1, -1, 1173, -1, 2247, -1, 1177, + -1, 5565, -1, -1, 5568, -1, -1, -1, 5572, -1, + -1, -1, -1, 5577, -1, -1, 5580, 5581, 2268, 5583, + -1, 5585, -1, -1, 5588, 1203, -1, -1, -1, -1, + -1, 2281, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2293, -1, 5609, -1, 5611, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5623, + 5624, 5625, -1, 5627, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2333, 2334, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5675, 5676, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5719, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5732, -1, + -1, 1349, 1350, 5737, -1, -1, -1, -1, 5742, -1, + -1, -1, -1, -1, -1, -1, -1, 5751, -1, -1, + -1, -1, -1, -1, -1, 1373, 1374, 5761, -1, -1, + -1, 5765, -1, -1, 5768, -1, -1, -1, 1386, -1, + -1, -1, -1, 1391, 1392, 5779, 5780, 5781, 1396, -1, + 1398, -1, -1, -1, 1402, -1, -1, -1, -1, -1, + -1, 2481, -1, -1, -1, -1, -1, -1, -1, 1417, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5816, -1, -1, -1, 5820, -1, 5822, -1, + 3104, -1, -1, -1, 3108, 3109, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5840, -1, -1, -1, + -1, 1459, 5846, 1461, 1462, -1, 5850, -1, -1, -1, + 5854, -1, -1, 5857, -1, 5859, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5886, 3167, 5888, -1, -1, -1, -1, 3173, + 1508, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5912, -1, + -1, -1, -1, 5917, 5918, -1, -1, -1, 5922, 5923, + 5924, 5925, -1, -1, -1, -1, -1, -1, -1, -1, + 3214, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5953, + -1, -1, -1, -1, -1, -1, 5960, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1587, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5985, -1, -1, 5988, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 6014, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1641, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 6044, -1, -1, -1, -1, -1, 6050, -1, -1, 6053, + -1, -1, 6056, -1, 1672, -1, 6060, -1, -1, -1, + -1, -1, -1, 6067, -1, -1, -1, -1, -1, -1, + 6074, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6087, 1702, -1, -1, -1, 6092, -1, + -1, -1, -1, -1, -1, -1, 6100, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6110, -1, -1, -1, + -1, -1, 1730, 1731, 1732, -1, 1734, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3412, -1, + -1, -1, -1, -1, -1, -1, 1754, -1, -1, -1, + -1, 6145, 6146, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6176, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 6191, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3486, -1, -1, -1, 3490, -1, -1, -1, + -1, -1, -1, -1, 1832, -1, -1, -1, 1836, 1837, + -1, 6225, -1, -1, -1, -1, -1, -1, -1, 6233, + 6234, 6235, -1, 1851, -1, 6239, -1, -1, 6242, -1, + -1, -1, -1, -1, -1, -1, -1, 6251, -1, 6253, + -1, 6255, 6256, -1, -1, -1, -1, -1, -1, -1, + 6264, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6278, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 6293, + -1, -1, -1, -1, -1, -1, 6300, -1, -1, -1, + -1, -1, -1, 1921, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1937, + -1, 6325, -1, -1, -1, -1, -1, -1, 6332, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 6342, 3623, + -1, -1, -1, -1, -1, -1, 6350, 6351, 6352, -1, + -1, -1, 6356, -1, 3638, 6359, -1, -1, -1, 3643, + 1978, -1, -1, -1, -1, 6369, -1, -1, -1, 6373, + 1988, -1, -1, -1, -1, 6379, -1, -1, -1, -1, + 6384, 6385, 6386, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6398, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2025, -1, -1, + -1, -1, -1, -1, 3104, -1, 2034, -1, 3108, 3109, + -1, -1, -1, 6427, 6428, 6429, -1, -1, -1, 6433, + -1, -1, -1, 2051, -1, -1, -1, -1, -1, -1, + 2058, -1, -1, -1, -1, -1, 6450, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6465, -1, -1, -1, -1, 6470, 6471, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3167, -1, 6483, + -1, -1, -1, 3173, 6488, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6519, -1, -1, -1, -1, + 2138, 2139, 2140, -1, 3214, -1, 6530, -1, 6532, 6533, + 6534, 6535, -1, -1, -1, -1, -1, -1, -1, 6543, + -1, -1, 6546, -1, -1, -1, -1, -1, -1, 2167, + -1, -1, -1, 6557, -1, -1, -1, -1, -1, -1, + 2178, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2194, -1, -1, 6583, + 6584, -1, -1, 6587, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6597, 6598, -1, -1, 6601, -1, -1, + 3884, -1, -1, 3887, -1, 3889, -1, -1, -1, -1, + 3894, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2247, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2262, -1, -1, 2265, -1, -1, + 2268, -1, -1, -1, -1, -1, -1, 2275, 3942, -1, + -1, -1, -1, 2281, -1, -1, 3950, -1, -1, -1, + -1, -1, -1, -1, -1, 2293, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2306, 2307, + -1, 3975, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2321, -1, -1, 2324, -1, -1, -1, + -1, -1, -1, -1, -1, 2333, 2334, -1, -1, -1, + -1, -1, 3412, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4044, -1, 4046, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2392, -1, -1, 2395, 2396, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3486, -1, -1, -1, + 3490, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2432, 2433, -1, -1, -1, -1, + 2438, 2439, -1, -1, -1, -1, -1, 2445, 2446, 2447, + -1, -1, 2450, -1, 2452, -1, 2454, 2455, 2456, 2457, + 2458, 2459, -1, 2461, -1, 2463, 2464, -1, -1, 2467, + -1, -1, -1, 4137, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2481, 2482, 2483, 2484, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2499, -1, -1, -1, -1, -1, -1, 6, 7, + -1, 9, 10, 11, -1, 4179, -1, 15, -1, -1, + 18, 19, 20, 21, 22, 23, -1, 25, 26, -1, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, 4207, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3623, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3638, -1, + -1, 69, -1, 3643, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4278, -1, -1, -1, -1, 117, + -1, -1, -1, 121, 122, 123, 124, 125, -1, -1, + -1, -1, -1, -1, -1, -1, 4300, -1, -1, -1, + -1, 139, -1, -1, 2642, -1, -1, -1, 146, -1, + 148, -1, -1, -1, -1, -1, -1, -1, 156, -1, + 4324, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 168, -1, -1, -1, -1, -1, -1, 175, -1, -1, + -1, -1, -1, -1, 2682, -1, -1, 185, 186, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 223, -1, -1, -1, -1, + 228, -1, -1, -1, -1, 2733, -1, 235, -1, -1, + -1, -1, -1, 241, -1, 243, -1, -1, -1, -1, + -1, -1, 250, -1, 252, -1, -1, -1, -1, -1, + -1, 4425, -1, 261, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 276, 277, + -1, -1, -1, -1, 4448, 283, -1, 285, -1, -1, + 288, 289, -1, 291, -1, -1, -1, -1, -1, -1, + -1, -1, 300, 301, -1, 303, -1, -1, -1, 4473, + -1, -1, -1, -1, 3884, -1, -1, 3887, -1, 3889, + -1, -1, -1, -1, 3894, -1, -1, -1, 326, 327, + 328, -1, -1, -1, -1, -1, -1, -1, 336, 337, + -1, -1, -1, -1, 342, -1, -1, 345, -1, 347, + -1, -1, -1, -1, -1, -1, -1, 1033, -1, -1, + -1, -1, -1, -1, -1, 363, 364, -1, 366, 367, + -1, -1, 3942, -1, -1, -1, -1, -1, -1, -1, + 3950, -1, 380, 1059, 382, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 397, + -1, -1, -1, -1, -1, 3975, -1, -1, -1, 2907, + 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, -1, 2917, + -1, 419, -1, -1, -1, -1, -1, 425, -1, 2927, + -1, -1, 2930, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 444, -1, -1, 447, + -1, -1, 450, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4626, -1, -1, -1, -1, -1, 466, -1, + -1, -1, -1, -1, 4044, 473, 4046, -1, -1, -1, + -1, -1, -1, 481, 482, -1, -1, -1, 2986, 487, + -1, 489, 2990, -1, -1, 2993, -1, 2995, -1, -1, + 2998, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3013, 514, -1, -1, 517, + -1, -1, -1, -1, 3022, 3023, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, -1, -1, -1, -1, + -1, -1, 4716, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4137, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4741, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3104, -1, -1, 4179, + 3108, 3109, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4207, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3154, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3165, -1, 3167, + 3168, -1, 3170, 3171, -1, 3173, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3198, -1, -1, -1, -1, -1, -1, -1, 4278, -1, + -1, -1, 4876, -1, -1, 1391, 3214, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1402, -1, -1, -1, + 4300, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1417, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4324, -1, -1, -1, -1, -1, + 4924, -1, -1, 4927, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3279, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1508, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4425, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4448, -1, + 3378, 3379, 3380, -1, -1, -1, 3384, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4473, -1, -1, -1, -1, -1, 5073, + -1, -1, -1, 3411, 3412, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3454, -1, -1, -1, + -1, -1, -1, -1, -1, 1641, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3486, -1, + -1, -1, 3490, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3512, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5207, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4626, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5245, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5267, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3623, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3636, -1, + 3638, 3639, -1, 3641, 3642, 3643, 4716, -1, -1, -1, + -1, -1, -1, 3651, -1, -1, -1, -1, 3656, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5334, 4741, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3682, 3683, 3684, -1, -1, 3687, + -1, -1, -1, -1, -1, -1, -1, 3695, 3696, 3697, + 3698, -1, -1, -1, -1, 1033, -1, -1, -1, -1, + 3708, -1, -1, 3711, -1, 3713, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3724, 3725, -1, -1, + 3728, 1059, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1921, -1, -1, -1, 3747, + -1, 3749, -1, 3751, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3771, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3782, -1, -1, -1, -1, -1, + -1, -1, 5456, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4876, -1, -1, -1, + -1, -1, 1988, -1, -1, 3813, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3828, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3842, -1, -1, -1, -1, 2025, + -1, -1, -1, -1, 4924, -1, -1, 4927, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 133, -1, -1, + -1, -1, 2058, -1, -1, -1, 3884, -1, -1, 3887, + -1, 3889, -1, -1, -1, -1, 3894, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3915, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3942, -1, -1, -1, -1, -1, + -1, -1, 3950, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3975, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2167, -1, -1, -1, -1, -1, -1, -1, -1, + 5664, -1, 2178, 5073, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2194, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4044, -1, 4046, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1391, -1, -1, -1, -1, -1, -1, + -1, 2247, -1, -1, 1402, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1417, + -1, -1, 2268, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2281, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2293, -1, -1, + 5784, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5207, -1, 4137, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2333, 2334, -1, + -1, -1, -1, -1, -1, -1, 4164, -1, -1, -1, + -1, -1, 4170, -1, -1, 5245, -1, -1, -1, -1, + 1508, 4179, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5856, -1, -1, -1, -1, 5267, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4207, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5902, -1, + -1, -1, -1, 5907, 5908, -1, -1, -1, -1, -1, + -1, -1, 4250, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5334, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4278, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4300, -1, -1, 2481, -1, -1, -1, -1, + -1, -1, -1, 1641, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4324, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6019, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5456, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4422, -1, -1, 4425, -1, -1, + -1, -1, -1, 4431, -1, -1, -1, -1, -1, -1, + -1, 4439, -1, 4441, -1, -1, 4444, -1, -1, -1, + 4448, 4449, 4450, 4451, 4452, -1, -1, 4455, 4456, 4457, + 4458, 4459, 4460, 4461, 4462, 4463, 4464, -1, -1, -1, + 4468, 4469, 4470, -1, -1, 4473, -1, -1, -1, -1, + 4478, -1, -1, -1, 4482, -1, -1, -1, 4486, -1, + -1, -1, -1, -1, -1, -1, 4494, -1, -1, 4497, + -1, 4499, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4509, -1, -1, 4512, 4513, -1, -1, -1, 4517, + 4518, -1, -1, -1, -1, -1, 4524, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4534, -1, -1, 4537, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4547, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6246, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1921, 5664, -1, 4594, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4610, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4626, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4638, -1, -1, -1, -1, -1, -1, -1, -1, 905, + -1, -1, -1, -1, -1, -1, -1, -1, 914, -1, + 1988, -1, -1, -1, -1, -1, 922, -1, -1, 925, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2025, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5784, -1, -1, -1, 4716, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2058, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4741, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1028, -1, -1, -1, -1, 1033, -1, -1, + -1, 1037, -1, -1, -1, -1, 5856, -1, 1044, -1, + -1, 1047, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1059, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5902, -1, -1, -1, -1, 5907, 5908, 2167, + -1, -1, -1, -1, -1, -1, -1, -1, 4846, -1, + 2178, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2194, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4876, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4889, 4890, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1166, 1167, -1, -1, -1, -1, -1, -1, -1, 2247, + -1, -1, -1, -1, -1, -1, 4924, -1, 3104, 4927, + 4928, 4929, 3108, 3109, -1, -1, -1, -1, -1, -1, + 2268, 4939, -1, -1, -1, -1, -1, 1203, -1, 6019, + -1, -1, -1, 2281, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2293, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3167, -1, -1, -1, -1, -1, 3173, -1, -1, + -1, -1, -1, -1, -1, 2333, 2334, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5020, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5031, -1, -1, -1, -1, 3214, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5059, -1, -1, 5062, -1, -1, -1, -1, -1, + -1, -1, 5070, 5071, -1, 5073, -1, -1, -1, 5077, + 5078, -1, -1, -1, 5082, -1, -1, -1, 5086, -1, + -1, 5089, 5090, -1, -1, -1, 5094, -1, -1, -1, + -1, -1, 5100, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5112, -1, -1, 1373, 1374, -1, + -1, -1, 5120, -1, -1, -1, 5124, -1, -1, -1, + 1386, -1, -1, -1, -1, 1391, 1392, -1, -1, -1, + 1396, -1, 1398, -1, -1, -1, 1402, -1, -1, -1, + -1, -1, -1, 2481, -1, -1, -1, -1, -1, 5157, + -1, 1417, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6246, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5189, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1459, -1, 1461, 1462, -1, -1, 5207, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3412, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5245, -1, -1, + -1, -1, 1508, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5267, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5290, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3486, -1, -1, -1, 3490, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1587, -1, -1, -1, -1, 5334, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5360, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5376, -1, + -1, -1, -1, -1, -1, 1641, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5407, + -1, -1, -1, -1, -1, -1, 1672, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1702, 3623, -1, -1, + -1, -1, -1, -1, -1, -1, 5454, -1, 5456, -1, + -1, -1, 3638, -1, -1, -1, -1, 3643, -1, -1, + -1, -1, -1, -1, 1730, 1731, 1732, -1, 1734, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1754, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5515, -1, -1, + 5518, -1, -1, 5521, 5522, 5523, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5546, 5547, + -1, -1, 5550, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5565, -1, -1, + -1, -1, -1, -1, 5572, -1, 1832, -1, -1, 5577, + 1836, 1837, 5580, 5581, -1, -1, -1, -1, -1, -1, + 5588, -1, -1, -1, -1, 1851, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5609, -1, 5611, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5623, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1921, 5664, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5675, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3884, -1, + -1, 3887, -1, 3889, -1, -1, -1, -1, 3894, -1, + -1, 5719, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1988, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3942, -1, -1, 2025, + -1, -1, -1, -1, 3950, -1, 3104, -1, -1, -1, + 3108, 3109, -1, 5781, -1, -1, 5784, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3975, + -1, -1, 2058, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5816, -1, + -1, -1, 5820, -1, 5822, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3167, + -1, -1, 5840, -1, -1, 3173, -1, -1, 5846, -1, + -1, -1, 5850, -1, -1, -1, -1, -1, 5856, 5857, + -1, -1, -1, -1, -1, -1, -1, -1, 4044, -1, + 4046, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2138, 2139, 2140, -1, 3214, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5902, -1, -1, -1, -1, 5907, + 5908, 2167, -1, -1, 5912, -1, -1, -1, -1, 5917, + 5918, -1, 2178, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2194, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5953, -1, -1, -1, -1, + -1, 4137, 5960, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5988, 2247, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4179, -1, -1, 2262, -1, -1, 2265, + -1, -1, 2268, -1, -1, -1, -1, -1, -1, 2275, + 6018, 6019, -1, -1, -1, 2281, -1, -1, -1, -1, + -1, 4207, -1, -1, -1, -1, -1, 2293, -1, -1, + -1, -1, -1, -1, -1, -1, 6044, -1, -1, -1, + 2306, 2307, 6050, -1, -1, 6053, -1, -1, 6056, -1, + -1, -1, -1, -1, -1, 2321, -1, -1, 2324, 6067, + -1, -1, -1, -1, -1, -1, 6074, 2333, 2334, -1, + -1, -1, -1, -1, 3412, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6092, -1, -1, -1, -1, -1, + -1, -1, 4278, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6110, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4300, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2392, -1, -1, 2395, + 2396, -1, -1, -1, -1, -1, -1, -1, 4324, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3486, -1, + -1, -1, 3490, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2432, 2433, -1, -1, + -1, -1, 2438, 2439, -1, -1, -1, -1, -1, 2445, + 2446, 2447, -1, 6191, 2450, -1, 2452, -1, 2454, 2455, + 2456, 2457, 2458, 2459, -1, 2461, -1, 2463, 2464, -1, + -1, 2467, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2481, 2482, 2483, 2484, -1, + -1, -1, -1, -1, -1, 6233, 6234, 6235, -1, -1, + -1, -1, -1, 2499, 6242, -1, -1, -1, 6246, 4425, + -1, -1, -1, 6251, -1, 6253, -1, 6255, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4448, -1, -1, -1, -1, -1, -1, -1, + 6278, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3623, -1, 4473, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3638, -1, -1, -1, -1, 3643, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6332, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6342, -1, -1, -1, -1, -1, + -1, -1, 6350, 6351, -1, -1, -1, -1, 6356, -1, + -1, 6359, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6369, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6379, -1, -1, -1, -1, 2642, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2682, -1, -1, 6427, + -1, -1, -1, -1, -1, 6433, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4626, -1, 6450, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 6465, -1, -1, + -1, -1, 6470, -1, -1, -1, -1, 2733, -1, -1, + -1, -1, -1, -1, -1, 6483, -1, -1, -1, -1, + 6488, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6519, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6530, -1, -1, -1, 6534, -1, -1, -1, + 4716, -1, -1, -1, -1, -1, -1, -1, 6546, -1, + -1, -1, -1, -1, -1, -1, 3884, -1, -1, 3887, + -1, 3889, -1, -1, -1, 4741, 3894, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6583, 6584, -1, -1, 6587, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 6597, + 6598, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3942, -1, -1, -1, -1, -1, + -1, -1, 3950, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3975, -1, -1, + -1, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, + -1, 2917, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2927, -1, -1, 2930, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4876, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4044, -1, 4046, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2986, -1, -1, -1, 2990, -1, -1, 2993, -1, 2995, + -1, -1, 2998, -1, -1, -1, -1, -1, 4924, -1, + -1, 4927, -1, -1, -1, -1, -1, 3013, -1, -1, + -1, -1, -1, -1, -1, -1, 3022, 3023, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3, -1, -1, 4137, + -1, 8, -1, -1, -1, 12, -1, 14, -1, 16, + 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, 3104, -1, + -1, 4179, 3108, 3109, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4207, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, -1, -1, -1, 5073, 3154, -1, + -1, -1, -1, 100, -1, 102, 103, -1, -1, 3165, + -1, 3167, 3168, -1, 3170, 3171, -1, 3173, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 130, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 142, -1, 144, 145, -1, + 4278, -1, -1, -1, 151, -1, 153, -1, 3214, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 165, -1, + 167, -1, 4300, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 182, -1, 184, -1, -1, + 187, -1, -1, -1, -1, -1, 4324, -1, -1, -1, + -1, -1, -1, -1, -1, 202, -1, 204, -1, -1, + -1, 208, -1, -1, -1, -1, -1, 214, -1, -1, + -1, -1, -1, -1, -1, 222, -1, 224, -1, -1, + -1, 5207, -1, -1, 231, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 248, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 265, 5245, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5267, -1, -1, -1, -1, -1, 4425, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 305, 306, + -1, -1, -1, -1, 311, -1, -1, -1, -1, -1, + 4448, -1, 3378, 3379, 3380, -1, 323, -1, 3384, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 341, 4473, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3411, 3412, -1, 5334, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 384, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3454, -1, + -1, 398, -1, -1, -1, -1, -1, 404, 405, -1, + 407, -1, -1, -1, -1, 412, -1, -1, 415, -1, + -1, 418, -1, -1, 421, -1, -1, -1, -1, -1, + 3486, 428, -1, -1, 3490, -1, -1, 434, 435, -1, + -1, -1, -1, -1, -1, 442, -1, -1, -1, 446, + -1, -1, -1, -1, -1, -1, 3512, -1, -1, 456, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 471, -1, -1, -1, -1, -1, + 5456, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 491, -1, 493, -1, 4626, -1, + -1, -1, -1, -1, -1, 502, -1, -1, -1, -1, + -1, 508, -1, -1, -1, -1, 513, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 526, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 549, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3623, -1, -1, + 567, -1, -1, -1, 571, -1, -1, -1, -1, -1, + 3636, -1, 3638, 3639, -1, 3641, 3642, 3643, 4716, -1, + -1, -1, -1, -1, -1, 3651, -1, -1, -1, -1, + 3656, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4741, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3682, 3683, 3684, -1, + -1, 3687, -1, -1, -1, -1, -1, -1, -1, 3695, + 3696, 3697, 3698, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3708, -1, -1, 3711, -1, 3713, -1, -1, + 88, -1, -1, -1, -1, -1, -1, -1, 3724, 3725, + -1, -1, 3728, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5664, -1, + -1, 3747, -1, 3749, -1, 3751, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3771, -1, -1, -1, 147, + 148, -1, -1, 151, -1, -1, 3782, -1, -1, 157, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4876, -1, + -1, -1, -1, -1, -1, -1, -1, 3813, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 199, 3828, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3842, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4924, -1, -1, 4927, + -1, -1, -1, -1, -1, -1, 234, -1, 5784, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 246, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3884, -1, + -1, 3887, -1, 3889, -1, -1, -1, -1, 3894, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3915, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5856, -1, -1, -1, -1, -1, 3942, -1, -1, -1, + -1, -1, -1, -1, 3950, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3975, + -1, -1, -1, -1, -1, -1, 5902, -1, -1, -1, + -1, 5907, 5908, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5073, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4044, -1, + 4046, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 428, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6019, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5207, + -1, 4137, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4164, -1, + -1, -1, -1, -1, 4170, -1, -1, 5245, -1, -1, + -1, -1, -1, 4179, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5267, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4207, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4250, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5334, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4278, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4300, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 695, 4324, -1, + 6246, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 744, 745, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5456, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 791, -1, -1, 4422, -1, -1, 4425, + -1, -1, -1, -1, -1, 4431, -1, -1, -1, -1, + -1, -1, -1, 4439, -1, 4441, -1, -1, 4444, -1, + -1, -1, 4448, 4449, 4450, 4451, 4452, -1, -1, 4455, + 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, -1, + -1, -1, 4468, 4469, 4470, -1, -1, 4473, -1, -1, + -1, -1, 4478, -1, -1, -1, 4482, -1, -1, -1, + 4486, -1, -1, -1, -1, -1, -1, -1, 4494, -1, + -1, 4497, -1, 4499, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4509, -1, -1, 4512, 4513, -1, -1, + -1, 4517, 4518, -1, -1, -1, -1, -1, 4524, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4534, -1, + 908, 4537, -1, -1, 912, -1, -1, -1, -1, -1, + -1, 4547, 920, -1, -1, 923, -1, -1, 926, 927, + -1, 929, -1, 931, -1, -1, 934, -1, 936, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 958, -1, -1, -1, -1, -1, 5664, -1, 4594, -1, + -1, 969, -1, -1, -1, 973, -1, -1, -1, -1, + -1, -1, 980, 981, 4610, -1, 984, -1, 986, 987, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4626, -1, -1, -1, -1, -1, -1, -1, -1, 1007, + -1, 1009, 4638, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1032, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1053, -1, 1055, -1, -1, + -1, -1, -1, -1, -1, -1, 1064, 1065, -1, -1, + -1, -1, -1, -1, -1, -1, 1074, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5784, -1, -1, -1, + 4716, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4741, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5856, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1169, -1, 1171, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5902, -1, 1204, -1, -1, 5907, + 5908, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4846, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1033, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4876, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4889, 4890, -1, 1059, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1278, -1, -1, 1281, -1, 1283, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4924, -1, + 1298, 4927, 4928, 4929, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4939, -1, -1, -1, -1, -1, -1, + -1, 6019, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1364, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1389, -1, -1, 5020, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5031, 1404, -1, 1406, -1, + -1, -1, -1, -1, -1, -1, -1, 1415, -1, -1, + -1, -1, -1, -1, 1422, -1, -1, -1, -1, -1, + -1, -1, -1, 5059, -1, -1, 5062, -1, -1, -1, + -1, -1, -1, -1, 5070, 5071, -1, 5073, -1, -1, + -1, 5077, 5078, -1, -1, -1, 5082, -1, -1, -1, + 5086, -1, -1, 5089, 5090, 1463, -1, 1465, 5094, -1, + -1, -1, -1, -1, 5100, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5112, -1, -1, -1, + -1, -1, -1, -1, 5120, -1, -1, -1, 5124, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5157, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 6246, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5189, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5207, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1391, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1402, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5245, + -1, -1, -1, -1, 1417, -1, -1, -1, -1, -1, + -1, -1, 1630, -1, -1, -1, -1, -1, -1, -1, + -1, 5267, -1, -1, -1, -1, -1, -1, -1, -1, + 1648, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5290, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5334, -1, + -1, -1, -1, -1, -1, 1508, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5360, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5376, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1777, + 1778, 5407, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1818, 1819, -1, -1, -1, -1, -1, -1, 5454, -1, + 5456, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1641, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 83, -1, + -1, -1, -1, 88, -1, 90, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 100, -1, -1, 1876, -1, + -1, -1, -1, 1881, -1, -1, 1884, -1, -1, 5515, + -1, -1, 5518, -1, 1892, 5521, 5522, 5523, -1, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1908, 136, -1, -1, -1, -1, -1, -1, -1, -1, + 5546, 5547, 147, 148, 5550, -1, 151, -1, -1, -1, + -1, -1, 157, -1, -1, -1, 161, -1, -1, 5565, + -1, -1, -1, -1, -1, -1, 5572, -1, -1, -1, + -1, 5577, -1, -1, 5580, 5581, -1, -1, 183, -1, + -1, -1, 5588, -1, 1962, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 199, -1, -1, -1, -1, -1, + -1, -1, -1, 5609, -1, 5611, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5623, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2030, -1, -1, -1, -1, -1, 5664, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5675, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5719, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1921, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5781, -1, -1, 5784, -1, + -1, -1, -1, -1, -1, 2163, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5816, -1, -1, -1, 5820, 1988, 5822, -1, -1, -1, + 2198, -1, -1, 428, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5840, -1, -1, -1, -1, -1, + 5846, -1, -1, -1, 5850, -1, -1, -1, -1, -1, + 5856, 5857, 2025, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2241, -1, 2243, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2058, -1, -1, -1, -1, + -1, 2269, -1, -1, -1, -1, 5902, -1, -1, -1, + -1, 5907, 5908, -1, -1, -1, 5912, -1, -1, -1, + -1, 5917, 5918, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5953, 2326, -1, + 2328, -1, -1, -1, 5960, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2342, 2343, -1, 2345, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5988, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2167, -1, -1, -1, -1, 2377, + -1, -1, -1, -1, -1, 2178, -1, -1, -1, -1, + -1, 2389, 6018, 6019, -1, 2393, -1, -1, -1, 2397, + -1, 2194, 2400, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 6044, -1, + -1, -1, -1, -1, 6050, -1, -1, 6053, -1, -1, + 6056, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6067, -1, -1, -1, -1, -1, -1, 6074, -1, + -1, -1, -1, -1, 2247, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6092, -1, -1, -1, + 695, -1, -1, -1, -1, 2268, -1, -1, -1, -1, + -1, -1, -1, -1, 6110, -1, -1, -1, 2281, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2293, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 744, + 745, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2333, 2334, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6191, 791, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 6233, 6234, 6235, + -1, -1, -1, -1, -1, -1, 6242, -1, -1, -1, + 6246, -1, -1, -1, -1, 6251, -1, 6253, -1, 6255, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6278, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2481, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6332, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6342, -1, -1, -1, + -1, -1, -1, -1, 6350, 6351, -1, -1, -1, -1, + 6356, -1, -1, 6359, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6369, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6379, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1006, 1007, -1, 1009, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6427, -1, -1, -1, -1, -1, 6433, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6450, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 6465, + -1, -1, -1, -1, 6470, 1070, -1, -1, 1073, 1074, + -1, -1, -1, -1, -1, -1, -1, 6483, -1, -1, + -1, -1, 6488, 1088, -1, 1090, -1, 1092, -1, -1, + -1, -1, -1, 1098, -1, -1, -1, 1102, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6519, -1, -1, -1, 1122, 1123, -1, + -1, -1, -1, -1, 6530, -1, -1, -1, 6534, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 6546, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2933, -1, -1, -1, -1, + -1, -1, -1, -1, 1169, -1, 1171, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 6583, 6584, -1, + -1, 6587, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6597, 6598, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1250, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1264, + 1265, -1, -1, 1268, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1166, 1167, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1311, 3085, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3098, 3099, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3117, + 3118, -1, -1, -1, 3122, 3123, -1, -1, 3126, 3127, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3141, -1, -1, -1, -1, -1, -1, + 3148, -1, -1, -1, 3152, 3153, 1381, -1, 3156, 3157, + -1, -1, -1, -1, -1, 3163, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3175, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3187, + -1, -1, -1, -1, 3192, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3207, + -1, -1, -1, -1, -1, -1, -1, -1, 3216, -1, + -1, 3219, -1, 3221, 3222, 3223, -1, -1, -1, -1, + 3228, 3229, -1, -1, -1, -1, -1, -1, -1, -1, + 3238, -1, -1, -1, -1, 3243, -1, -1, -1, 3247, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3257, + 3258, -1, -1, -1, 3262, -1, -1, -1, -1, -1, + 3268, 3269, -1, -1, -1, -1, -1, 3275, -1, -1, + 3278, 1373, 1374, -1, -1, -1, -1, 3285, 3286, -1, + -1, -1, -1, 3291, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3303, -1, -1, 3306, -1, + -1, 3104, -1, 3311, -1, 3108, 3109, -1, -1, 3317, + 3318, -1, 3320, -1, 3322, -1, -1, 3325, 3326, -1, + 3328, -1, -1, -1, 3332, 3333, 3334, 3335, -1, 3337, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3350, 3351, -1, 3353, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3364, 3365, 3366, -1, + -1, 1596, -1, 1598, 3167, -1, 1601, -1, 1603, -1, + 3173, 1606, 1607, 1608, -1, -1, -1, 1612, -1, -1, + -1, -1, -1, -1, 1619, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1633, -1, + 1635, -1, -1, -1, -1, 1640, -1, -1, -1, -1, + -1, 3214, -1, 3421, -1, -1, -1, -1, -1, -1, + -1, 3429, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3449, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3499, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1765, 3539, -1, 3541, -1, -1, -1, -1, -1, -1, + -1, -1, 1777, 1778, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1794, + -1, -1, -1, -1, 1799, 1800, -1, -1, -1, -1, + 1672, -1, -1, 3581, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3596, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1702, -1, -1, -1, -1, -1, -1, -1, -1, 3412, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1730, 1731, + 1732, -1, 1734, -1, -1, -1, -1, 3645, -1, -1, + -1, 1876, -1, 1878, -1, -1, -1, -1, -1, -1, + -1, -1, 1754, 1888, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3486, -1, -1, -1, 3490, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1832, 1966, -1, -1, 1836, 1837, -1, -1, -1, -1, + -1, 1976, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3623, -1, -1, -1, 2059, -1, -1, 2062, 2063, -1, + -1, -1, -1, -1, -1, 3638, -1, -1, -1, -1, + 3643, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3912, -1, -1, -1, -1, 3917, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3937, + -1, -1, -1, -1, -1, -1, -1, 2172, -1, -1, + -1, -1, -1, -1, -1, -1, 3954, -1, -1, -1, + 3958, -1, -1, -1, -1, 3963, 3964, 3965, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3999, 4000, 4001, 4002, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4036, -1, + 4038, 4039, 4040, -1, -1, -1, 2138, 2139, 2140, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3884, -1, -1, 3887, -1, 3889, -1, -1, -1, + -1, 3894, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2361, -1, 2363, -1, + -1, -1, 2367, -1, 2369, -1, -1, 2372, -1, 3942, + -1, 2376, -1, 4151, -1, -1, 2381, 3950, -1, -1, + -1, -1, 4160, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3975, -1, -1, -1, -1, -1, 4186, 4187, + -1, -1, -1, 4191, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4213, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4044, -1, 4046, -1, -1, -1, -1, -1, 4257, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4268, -1, -1, -1, -1, 4273, -1, -1, -1, -1, + -1, 4279, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4309, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4319, -1, -1, 4322, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4137, -1, 2438, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2450, 4357, + 2452, 4359, 2454, -1, -1, 2457, 2458, 2459, -1, -1, + -1, -1, 2464, -1, -1, 2467, -1, -1, 4376, -1, + -1, -1, -1, -1, -1, -1, 4179, -1, -1, -1, + 2482, 2483, 2484, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4401, -1, -1, -1, 2499, -1, -1, + -1, -1, -1, -1, 4207, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4278, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4300, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4324, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2642, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2682, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1746, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4425, -1, -1, -1, -1, -1, -1, -1, + -1, 2733, -1, -1, 4642, -1, -1, 4645, -1, 4647, + -1, -1, -1, -1, -1, 4448, -1, -1, -1, -1, + -1, -1, 4660, -1, -1, -1, -1, -1, -1, 1815, + -1, -1, -1, -1, 4672, -1, -1, -1, 4676, -1, + 4473, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4695, -1, -1, + -1, 2926, -1, -1, -1, -1, -1, -1, 2933, -1, + -1, -1, -1, -1, -1, 4713, -1, -1, 2943, -1, + 4718, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4743, -1, -1, -1, 4747, + -1, -1, -1, -1, -1, -1, -1, 4755, 4756, 4757, + 4758, -1, -1, -1, -1, -1, -1, 4765, 4766, 4767, + 4768, -1, -1, -1, -1, -1, 4774, 4775, -1, -1, + -1, -1, 4780, 4781, -1, 4783, 4784, 4785, 4786, 4787, + 4788, 4789, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4799, -1, -1, -1, 4803, 4804, 4805, 4806, -1, + -1, -1, -1, -1, -1, 2907, 2908, 2909, 2910, 2911, + 2912, 2913, 2914, 2915, -1, 2917, -1, -1, -1, 4827, + -1, -1, -1, 4626, -1, 2927, -1, -1, 2930, -1, + -1, -1, -1, -1, -1, 3070, -1, 4845, -1, 3074, + -1, -1, -1, -1, -1, 3080, -1, 3082, -1, -1, + 3085, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2986, -1, -1, -1, 2990, -1, + -1, 2993, -1, 2995, -1, -1, 2998, -1, 3133, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4920, 4716, -1, -1, -1, -1, -1, -1, + 3022, 3023, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4741, -1, + -1, -1, -1, -1, -1, 4953, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4975, -1, 4977, + -1, -1, -1, -1, -1, -1, -1, 4985, 4986, 4987, + 4988, 4989, -1, -1, -1, -1, -1, -1, 2144, -1, + 4998, -1, 2148, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3154, -1, -1, -1, -1, -1, -1, -1, + -1, 3296, -1, -1, -1, -1, -1, -1, -1, 3304, + -1, -1, 3307, 4876, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3319, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4924, -1, -1, 4927, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5208, 5209, 5210, -1, -1, -1, 5214, 5215, 5216, 5217, + -1, -1, -1, 5221, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5257, + 5258, 5259, 5260, 5261, -1, 5263, 5264, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5275, 5276, -1, + 5073, -1, -1, -1, -1, -1, 3378, 3379, 3380, -1, + 2436, -1, 3384, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2451, 5304, -1, -1, 2455, + -1, -1, -1, -1, 5312, 5313, -1, 5315, -1, 3411, + -1, -1, -1, 2469, 2470, 2471, -1, -1, 2474, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3581, 3582, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3599, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5406, -1, + -1, -1, -1, -1, 5207, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5245, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5267, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5482, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5334, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3651, + -1, -1, -1, -1, 3656, -1, 3791, -1, -1, -1, + -1, 3796, 5570, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5585, -1, -1, + -1, -1, 3684, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3695, -1, 3697, 3698, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3708, -1, -1, 3711, + -1, 3713, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3747, -1, 3749, -1, 3751, + -1, -1, -1, 5456, -1, -1, -1, -1, 5666, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5685, -1, -1, + -1, -1, 5690, 5691, -1, -1, -1, -1, -1, -1, + -1, -1, 5700, -1, -1, -1, -1, -1, -1, 5707, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3813, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3828, -1, -1, -1, + -1, -1, -1, -1, -1, 5743, 5744, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5756, -1, + 5758, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5773, -1, -1, -1, 2925, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5798, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5809, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3915, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5843, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5854, -1, -1, -1, + -1, -1, -1, 3009, -1, -1, -1, -1, -1, -1, + -1, 5664, 5870, -1, -1, 3021, -1, -1, -1, -1, + 3026, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5891, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5901, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5926, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5966, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4207, -1, -1, -1, -1, -1, -1, -1, + -1, 5784, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 6037, + -1, -1, -1, -1, -1, -1, -1, -1, 4273, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5856, -1, -1, 6064, -1, -1, -1, + -1, -1, 4164, -1, -1, -1, -1, -1, 4170, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4322, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5902, + 6108, -1, -1, -1, 5907, 5908, -1, -1, -1, -1, + -1, -1, -1, -1, 6122, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4250, -1, + -1, -1, -1, -1, -1, -1, -1, 6165, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6181, -1, -1, 4411, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6019, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 6277, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6320, -1, -1, -1, -1, -1, -1, -1, + 4422, -1, -1, -1, -1, -1, -1, -1, -1, 4431, + -1, -1, -1, -1, -1, -1, -1, 4439, -1, 4441, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4468, 4469, 4470, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4615, -1, -1, -1, 4486, -1, -1, -1, -1, -1, + -1, -1, 4494, -1, -1, 4497, -1, 4499, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4509, 6416, -1, + -1, -1, -1, -1, -1, 4517, 4518, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6246, -1, 4547, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4716, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4594, -1, -1, -1, -1, -1, 3654, -1, + -1, -1, -1, -1, -1, -1, 4741, -1, 4610, -1, + -1, -1, -1, 4748, -1, -1, -1, -1, 3674, 3675, + -1, 3677, -1, -1, 4759, -1, 3682, 3683, -1, 3685, + -1, 3687, -1, -1, -1, 3691, -1, -1, 3694, -1, + -1, -1, -1, 3699, -1, -1, -1, -1, -1, 3705, + -1, -1, -1, -1, 3710, -1, -1, -1, -1, -1, + -1, 3717, 3718, 3719, 3720, -1, -1, -1, 3724, 3725, + -1, 3727, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3744, -1, + 3746, -1, -1, -1, -1, -1, -1, 3753, 3754, 3755, + 3756, 3757, 3758, 3759, 3760, 3761, 3762, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3806, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4924, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4991, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3930, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4928, 4929, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4939, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5144, + -1, -1, -1, -1, -1, -1, -1, -1, 5020, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5031, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5070, 5071, + -1, -1, -1, -1, -1, 5077, 5078, -1, -1, -1, + 5082, -1, -1, -1, 5086, -1, -1, 5089, 5090, -1, + -1, -1, 5094, 5228, -1, -1, -1, -1, 5100, 5234, + -1, -1, -1, 5238, -1, -1, -1, -1, -1, -1, + -1, -1, 4168, 4169, -1, -1, -1, 4173, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4202, -1, -1, -1, + -1, -1, -1, -1, -1, 5157, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5189, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5290, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5360, -1, + -1, -1, -1, -1, -1, 4421, -1, -1, -1, -1, + -1, 4427, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4445, + 4446, -1, -1, 4449, 4450, 4451, 4452, -1, -1, 4455, + 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4487, -1, -1, 4490, -1, 4492, -1, -1, 4495, + 4496, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4511, 4512, 4513, 4514, -1, + 4516, -1, -1, -1, -1, -1, -1, 5602, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5515, -1, -1, -1, -1, -1, 5521, + 5522, 5523, -1, -1, -1, -1, -1, -1, -1, 5664, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5546, 5547, -1, -1, 5550, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4635, + -1, -1, -1, -1, -1, -1, 5588, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5611, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5758, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4846, -1, -1, -1, -1, -1, -1, -1, 5933, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5820, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4888, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5846, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5857, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 6040, -1, -1, -1, -1, + 5912, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5953, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5021, -1, -1, -1, 5025, + -1, 5027, 5028, -1, -1, -1, -1, 5033, 5034, 5035, + 5036, -1, -1, -1, 5040, 5041, 5042, 5043, 5044, 5045, + 5046, 5047, 5048, 5049, 5050, 5051, 5052, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5076, -1, -1, 5079, -1, 5081, -1, -1, 5084, -1, + -1, 5087, 5088, -1, -1, 5091, 5092, -1, -1, -1, + -1, -1, 6044, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6074, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5138, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5156, -1, -1, -1, -1, -1, -1, -1, 6110, -1, + -1, -1, -1, 5169, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6233, 6234, 6235, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6255, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5363, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 6332, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6356, -1, -1, 6359, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 6379, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5451, 5452, -1, -1, -1, + -1, -1, -1, 5459, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5511, -1, -1, -1, -1, + -1, 5517, 5518, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5536, 6483, 5538, -1, -1, -1, 5542, 5543, 5544, 5545, + -1, -1, 5548, 5549, -1, -1, -1, 5553, -1, -1, + -1, 5557, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 6519, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 6530, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5621, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 6583, -1, -1, -1, -1, 6, 7, -1, 9, + 10, 11, -1, -1, -1, 15, -1, -1, 18, 19, + 20, 21, 22, 23, -1, 25, 26, -1, -1, -1, + 30, 31, 32, 33, -1, 35, 36, 37, 38, -1, + 40, 41, 42, -1, -1, -1, -1, -1, 48, 49, + 5686, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, -1, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5722, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 117, -1, -1, + -1, 121, 122, 123, 124, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 139, + -1, -1, -1, -1, -1, -1, 146, -1, 148, -1, + -1, -1, -1, -1, -1, -1, 156, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 168, -1, + -1, -1, -1, -1, -1, 175, -1, 5813, -1, 5815, + 5816, 5817, 5818, 5819, -1, 185, 186, -1, -1, -1, + -1, -1, -1, -1, 5830, 5831, 5832, -1, -1, -1, + -1, -1, -1, -1, 5840, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 215, -1, -1, -1, -1, + -1, -1, 5858, 223, -1, -1, -1, -1, 228, -1, + -1, -1, -1, -1, -1, 235, -1, -1, 5874, -1, + -1, 241, -1, 243, -1, -1, -1, -1, -1, -1, + 250, -1, 252, -1, -1, -1, -1, -1, -1, -1, + -1, 261, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 276, 277, -1, -1, + -1, -1, -1, 283, -1, 285, -1, -1, 288, 289, + -1, 291, -1, -1, -1, -1, -1, -1, -1, -1, + 300, 301, -1, 303, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 326, 327, 328, -1, + -1, -1, -1, -1, -1, -1, 336, 337, -1, -1, + -1, -1, 342, -1, -1, 345, -1, 347, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 363, 364, -1, 366, 367, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 380, -1, 382, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 397, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 6045, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 419, + 6056, -1, -1, 6059, -1, 425, -1, 6063, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 444, 6081, -1, 447, -1, -1, + 450, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 466, -1, -1, -1, + -1, -1, -1, 473, -1, -1, -1, -1, -1, -1, + -1, 481, 482, -1, -1, 6121, -1, 487, -1, 489, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 499, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 514, -1, -1, 517, -1, -1, + -1, 6157, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 574, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6228, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 6240, -1, 6242, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 6276, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6362, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 6425, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6449, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 6465, + -1, -1, -1, -1, 6470, -1, -1, -1, -1, 5, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, 6525, + -1, -1, 6528, -1, -1, -1, -1, 63, -1, 65, + 6536, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6558, -1, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 3, -1, -1, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, 573, 30, 31, + 32, 33, -1, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, -1, + 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 114, -1, -1, 117, -1, -1, 120, 121, + 122, 123, 124, 125, -1, -1, -1, -1, 130, -1, + -1, -1, -1, -1, -1, -1, -1, 139, -1, -1, + 142, -1, 144, 145, 146, -1, 148, -1, -1, 151, + -1, 153, -1, -1, 156, -1, -1, -1, -1, -1, + -1, -1, -1, 165, -1, 167, 168, -1, -1, -1, + -1, -1, -1, 175, -1, -1, -1, -1, -1, -1, + 182, -1, 184, 185, 186, 187, -1, -1, -1, -1, + -1, 193, -1, -1, -1, -1, -1, -1, -1, -1, + 202, -1, 204, -1, -1, -1, 208, -1, -1, -1, + -1, -1, 214, 215, -1, -1, -1, -1, -1, -1, + 222, 223, 224, -1, -1, -1, 228, -1, -1, 231, + -1, -1, -1, 235, -1, -1, -1, -1, -1, 241, + -1, 243, -1, -1, -1, -1, 248, -1, 250, -1, + 252, -1, -1, -1, -1, -1, -1, -1, -1, 261, + -1, -1, -1, 265, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 276, 277, -1, -1, 280, -1, + -1, 283, -1, 285, -1, -1, 288, 289, -1, 291, + -1, -1, -1, -1, -1, -1, -1, -1, 300, 301, + -1, 303, -1, 305, 306, -1, -1, -1, -1, 311, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 323, -1, -1, 326, 327, 328, -1, -1, -1, + -1, -1, -1, -1, 336, 337, -1, -1, -1, 341, + 342, -1, -1, 345, -1, 347, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 363, 364, -1, 366, 367, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 380, -1, + 382, -1, 384, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 397, 398, -1, -1, -1, + -1, -1, 404, 405, -1, 407, -1, -1, -1, -1, + 412, -1, -1, -1, -1, -1, 418, 419, -1, 421, + -1, -1, -1, 425, -1, -1, 428, -1, -1, -1, + -1, -1, 434, 435, -1, -1, -1, -1, -1, -1, + 442, -1, 444, -1, 446, 447, -1, -1, 450, -1, + -1, -1, -1, -1, 456, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 466, -1, -1, -1, -1, 471, + -1, 473, -1, -1, -1, -1, -1, -1, -1, 481, + 482, -1, -1, -1, -1, 487, -1, 489, -1, 491, + -1, 493, -1, -1, -1, -1, -1, 499, -1, -1, + 502, -1, -1, 505, -1, -1, 508, -1, -1, -1, + -1, 513, 514, -1, -1, 517, -1, -1, -1, -1, + -1, -1, -1, -1, 526, -1, -1, -1, -1, -1, + -1, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, -1, -1, -1, -1, -1, 549, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 6, 7, + -1, 9, 10, 11, -1, 567, -1, 15, -1, 571, + 18, 19, 20, 21, 22, 23, -1, 25, 26, -1, + -1, -1, 30, 31, 32, 33, -1, 35, 36, 37, + 38, -1, 40, 41, 42, -1, -1, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + -1, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 117, + -1, -1, -1, 121, 122, 123, 124, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 139, -1, -1, -1, -1, -1, -1, 146, -1, + 148, -1, -1, -1, -1, -1, -1, -1, 156, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 168, -1, -1, -1, -1, -1, -1, 175, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 185, 186, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 215, -1, -1, + -1, -1, -1, -1, -1, 223, -1, -1, -1, -1, + 228, -1, -1, -1, -1, -1, -1, 235, -1, -1, + -1, -1, -1, 241, -1, 243, -1, -1, -1, -1, + -1, -1, 250, -1, 252, -1, -1, -1, -1, -1, + -1, -1, -1, 261, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 276, 277, + -1, -1, -1, -1, -1, 283, -1, 285, -1, -1, + 288, 289, -1, 291, -1, -1, -1, -1, -1, -1, + -1, -1, 300, 301, -1, 303, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 326, 327, + 328, -1, -1, -1, -1, -1, -1, -1, 336, 337, + -1, -1, -1, -1, 342, -1, -1, 345, -1, 347, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 363, 364, -1, 366, 367, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 380, -1, 382, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 397, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 419, -1, -1, -1, -1, -1, 425, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 444, -1, -1, 447, + -1, -1, 450, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 466, -1, + -1, -1, -1, -1, -1, 473, -1, -1, -1, -1, + -1, -1, -1, 481, 482, -1, -1, -1, -1, 487, + -1, 489, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 499, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 514, -1, -1, 517, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, -1, -1, -1, -1, + -1, -1, 5, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 574, 30, 31, 32, + 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, 70, -1, -1, + 73, -1, 75, 76, -1, 78, 79, 80, 81, 82, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, -1, + -1, -1, -1, 106, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, 148, -1, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, 168, 169, 170, -1, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, 241, -1, + 243, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, 276, 277, -1, 279, 280, 281, 282, + 283, -1, 285, -1, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, -1, -1, 299, 300, 301, 302, + 303, -1, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + 473, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, -1, 500, 501, 502, + 503, 504, 505, 506, -1, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 558, 559, 560, -1, -1, + -1, -1, -1, -1, 567, 568, 5, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, + -1, 40, 41, 42, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, 70, -1, -1, 73, -1, 75, 76, -1, 78, + 79, 80, 81, 82, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, 106, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, 148, + -1, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, 168, + 169, 170, -1, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, 241, -1, 243, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, 276, 277, -1, + 279, 280, 281, 282, 283, -1, 285, -1, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, + 299, 300, 301, 302, 303, -1, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + -1, 500, 501, 502, 503, 504, 505, 506, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, 517, 518, + 519, 520, 521, -1, -1, 524, -1, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, -1, + 549, -1, -1, -1, -1, -1, -1, -1, -1, 558, + 559, -1, -1, -1, -1, -1, -1, -1, 567, 568, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, 70, -1, -1, 73, -1, + 75, 76, -1, 78, 79, 80, 81, 82, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, 106, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, 282, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, -1, 500, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 558, 559, -1, -1, -1, -1, -1, + -1, -1, 567, 568, 5, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, -1, 30, + 31, 32, 33, 34, 35, 36, 37, 38, -1, 40, + 41, 42, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, 70, + -1, -1, 73, -1, 75, 76, -1, 78, 79, 80, + 81, 82, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, 106, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, 148, -1, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, 168, 169, 170, + -1, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + 241, -1, 243, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, 276, 277, -1, 279, 280, + 281, 282, 283, -1, 285, -1, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, -1, -1, 299, 300, + 301, 302, 303, -1, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, 473, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, -1, 500, + 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, 517, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 558, 559, -1, + -1, -1, -1, -1, -1, -1, 567, 568, 5, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, -1, 30, 31, 32, 33, 34, 35, 36, + 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, 70, -1, -1, 73, -1, 75, 76, + -1, 78, 79, 80, 81, 82, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, 106, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, 148, -1, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, + -1, 168, 169, 170, -1, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, 241, -1, 243, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, 276, + 277, -1, 279, 280, 281, 282, 283, -1, 285, -1, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + -1, -1, 299, 300, 301, 302, 303, -1, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, 473, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, -1, 500, 501, 502, 503, 504, 505, 506, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + 517, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 558, 559, -1, -1, -1, -1, -1, -1, -1, + 567, 568, 5, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, -1, 30, 31, 32, + 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, 117, 118, 119, 120, -1, 122, + 123, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, -1, -1, 148, -1, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, 168, 169, 170, -1, -1, + -1, -1, 175, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + -1, 224, 225, 226, 227, -1, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, 241, -1, + 243, 244, 245, 246, 247, -1, 249, -1, -1, -1, + 253, 254, -1, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, -1, 275, 276, 277, -1, 279, 280, 281, 282, + 283, -1, 285, -1, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, -1, -1, 299, -1, 301, 302, + 303, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, -1, -1, 338, -1, 340, 341, 342, + 343, -1, -1, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, 364, 365, 366, -1, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, -1, 381, -1, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, 419, 420, 421, 422, + 423, 424, -1, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, -1, 467, -1, 469, 470, -1, 472, + 473, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, -1, 488, -1, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + -1, 514, 515, 516, 517, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 544, 545, 546, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, 568, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, 123, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, -1, -1, 148, -1, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, 168, 169, 170, -1, + -1, -1, -1, 175, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, -1, 224, 225, 226, 227, -1, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, 241, + -1, 243, 244, 245, 246, 247, -1, 249, -1, -1, + -1, 253, 254, -1, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, 277, -1, 279, 280, 281, + 282, 283, -1, 285, -1, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, -1, -1, 299, -1, 301, + 302, 303, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, -1, -1, 338, -1, 340, 341, + 342, 343, -1, -1, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, 364, 365, 366, -1, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, -1, 381, + -1, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, -1, 467, -1, 469, 470, -1, + 472, 473, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, -1, 488, -1, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, -1, 514, 515, 516, 517, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 544, 545, 546, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, 568, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, -1, 30, + 31, 32, 33, 34, 35, 36, 37, 38, -1, 40, + 41, 42, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, 70, + -1, -1, 73, -1, 75, 76, -1, 78, 79, 80, + 81, 82, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, 106, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, 148, -1, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, 168, 169, 170, + -1, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + 241, -1, 243, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, 276, 277, -1, 279, 280, + 281, 282, 283, -1, 285, -1, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, -1, -1, 299, 300, + 301, 302, 303, -1, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, -1, 500, + 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, 517, 518, 519, 520, + 521, -1, -1, 524, -1, 526, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, -1, 549, -1, + -1, -1, -1, -1, -1, -1, -1, 558, 559, -1, + -1, -1, -1, -1, -1, -1, 567, 5, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, 70, -1, -1, 73, -1, 75, 76, -1, + 78, 79, 80, 81, 82, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, 106, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + 148, -1, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + 168, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, 241, 242, 243, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, 276, 277, + -1, 279, 280, 281, 282, 283, -1, 285, -1, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + 298, 299, 300, 301, 302, 303, -1, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, 473, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, -1, 500, 501, 502, 503, 504, 505, 506, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, 517, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 558, 559, -1, -1, -1, -1, -1, -1, -1, 567, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, 70, -1, -1, 73, -1, + 75, 76, -1, 78, 79, 80, 81, 82, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, -1, -1, -1, + 105, 106, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, 282, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, -1, 500, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 558, 559, -1, -1, -1, -1, -1, + -1, -1, 567, 5, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, 70, -1, + -1, 73, -1, 75, 76, -1, 78, 79, 80, 81, + 82, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + -1, -1, -1, 105, 106, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, 148, -1, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, 168, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, 241, + -1, 243, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, 277, -1, 279, 280, 281, + 282, 283, -1, 285, -1, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, -1, -1, 299, 300, 301, + 302, 303, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, 473, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, -1, 500, 501, + 502, 503, 504, 505, 506, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, 517, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 558, 559, -1, -1, + -1, -1, -1, -1, -1, 567, 5, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, + -1, 40, 41, 42, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, 70, -1, -1, 73, -1, 75, 76, -1, 78, + 79, 80, 81, 82, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, 106, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, 148, + -1, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, 168, + 169, 170, -1, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, 241, -1, 243, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, 276, 277, -1, + 279, 280, 281, 282, 283, -1, 285, -1, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, + 299, 300, 301, 302, 303, -1, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, 473, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + -1, 500, 501, 502, 503, 504, 505, 506, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, 517, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 558, + 559, -1, -1, -1, -1, -1, 565, 566, 567, 5, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, 70, -1, -1, 73, -1, 75, + 76, -1, 78, 79, 80, 81, 82, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + 106, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, 148, -1, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, 168, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, 241, -1, 243, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + 276, 277, -1, 279, 280, 281, 282, 283, -1, 285, + -1, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, -1, -1, 299, 300, 301, 302, 303, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, 473, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, -1, 500, 501, 502, 503, 504, 505, + 506, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, 517, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 558, 559, 560, -1, -1, -1, -1, -1, + -1, 567, 5, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, -1, 30, 31, 32, + 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, 70, -1, -1, + 73, -1, 75, 76, -1, 78, 79, 80, 81, 82, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, -1, + -1, -1, -1, 106, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, 148, -1, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, 168, 169, 170, -1, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, 241, -1, + 243, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, 276, 277, -1, 279, 280, 281, 282, + 283, -1, 285, -1, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, -1, -1, 299, 300, 301, 302, + 303, -1, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + 473, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, -1, 500, 501, 502, + 503, 504, 505, 506, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, 517, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 558, 559, -1, -1, -1, + -1, -1, -1, -1, 567, 5, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, + 40, 41, 42, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + 70, -1, -1, 73, -1, 75, 76, -1, 78, 79, + 80, 81, 82, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, 106, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, 282, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, + 500, 501, 502, 503, 504, 505, 506, -1, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 558, 559, + -1, -1, -1, -1, -1, -1, -1, 567, 5, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, -1, 30, 31, 32, 33, 34, 35, 36, + 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, 70, -1, -1, 73, -1, 75, 76, + -1, 78, 79, 80, 81, 82, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, 106, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, 148, -1, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, + -1, 168, 169, 170, -1, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, 241, 242, 243, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, 276, + 277, -1, 279, 280, 281, 282, 283, -1, 285, -1, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + -1, -1, 299, 300, 301, 302, 303, -1, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, 473, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, -1, 500, 501, 502, 503, 504, 505, 506, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + 517, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 558, 559, -1, -1, -1, -1, -1, -1, -1, + 567, 5, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, -1, 30, 31, 32, 33, + 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, 70, -1, -1, 73, + -1, 75, 76, -1, 78, 79, 80, 81, 82, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, 106, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, 148, -1, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, 168, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, 241, -1, 243, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, 276, 277, -1, 279, 280, 281, 282, 283, + -1, 285, -1, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, -1, -1, 299, 300, 301, 302, 303, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, 473, + 474, 475, 476, 477, 478, -1, 480, 481, 482, 483, + -1, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, -1, 500, 501, 502, 503, + 504, 505, 506, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, 517, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 547, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 558, 559, -1, -1, -1, -1, + -1, -1, -1, 567, 5, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, -1, 30, + 31, 32, 33, 34, 35, 36, 37, 38, -1, 40, + 41, 42, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, 70, + -1, -1, 73, -1, 75, 76, -1, 78, 79, 80, + 81, 82, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, 106, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, 148, -1, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + 241, -1, 243, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, 276, 277, -1, 279, 280, + 281, 282, 283, -1, 285, -1, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, -1, -1, 299, 300, + 301, 302, 303, -1, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, 473, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, -1, 500, + 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, 517, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 558, 559, -1, + -1, -1, -1, -1, -1, -1, 567, 5, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, 70, -1, -1, 73, -1, 75, 76, -1, + 78, 79, 80, 81, 82, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, 106, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + 148, -1, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, 241, -1, 243, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, 276, 277, + -1, 279, 280, 281, 282, 283, -1, 285, -1, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, 299, 300, 301, 302, 303, -1, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, 473, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, -1, 500, 501, 502, 503, 504, 505, 506, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, 517, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 558, 559, -1, -1, -1, -1, -1, -1, -1, 567, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, 70, -1, -1, 73, -1, + 75, 76, -1, 78, 79, 80, 81, 82, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, 106, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, 282, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, -1, 500, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 558, 559, -1, -1, -1, -1, -1, + -1, -1, 567, 5, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, 70, -1, + -1, 73, -1, 75, 76, -1, 78, 79, 80, 81, + 82, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, 106, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, 148, -1, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, 168, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, 241, + -1, 243, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, 277, -1, 279, 280, 281, + 282, 283, -1, 285, -1, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, -1, -1, 299, 300, 301, + 302, 303, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, 473, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, -1, 500, 501, + 502, 503, 504, 505, 506, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, 517, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 558, 559, -1, -1, + -1, -1, -1, -1, -1, 567, 5, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, + -1, 40, 41, 42, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, 70, -1, -1, 73, -1, 75, 76, -1, 78, + 79, 80, 81, 82, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, 106, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, 148, + -1, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, 168, + 169, 170, -1, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, 241, -1, 243, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, 276, 277, -1, + 279, 280, 281, 282, 283, -1, 285, -1, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, + 299, 300, 301, 302, 303, -1, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, 473, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + -1, 500, 501, 502, 503, 504, 505, 506, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, 517, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 558, + 559, -1, -1, -1, -1, -1, -1, -1, 567, 5, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, 70, -1, -1, 73, -1, 75, + 76, -1, 78, 79, 80, 81, 82, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + 106, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, 148, -1, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, 168, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, 241, -1, 243, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + 276, 277, -1, 279, 280, 281, 282, 283, -1, 285, + -1, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, -1, -1, 299, 300, 301, 302, 303, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, 473, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, -1, 500, 501, 502, 503, 504, 505, + 506, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, 517, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 558, 559, -1, -1, -1, -1, -1, -1, + -1, 567, 5, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, -1, 30, 31, 32, + 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, 70, -1, -1, + 73, -1, 75, 76, -1, 78, 79, 80, 81, 82, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, 106, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, 148, -1, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, 168, 169, 170, -1, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, 241, -1, + 243, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, 276, 277, -1, 279, 280, 281, 282, + 283, -1, 285, -1, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, -1, -1, 299, 300, 301, 302, + 303, -1, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + 473, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, -1, 500, 501, 502, + 503, 504, 505, 506, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, 517, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 558, 559, -1, -1, -1, + -1, -1, -1, -1, 567, 5, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, + 40, 41, 42, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + 70, -1, -1, 73, -1, 75, 76, -1, 78, 79, + 80, 81, 82, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, 106, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, 282, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, + 500, 501, 502, 503, 504, 505, 506, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 558, 559, + -1, -1, -1, -1, -1, -1, -1, 567, 5, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, -1, 30, 31, 32, 33, 34, 35, 36, + 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, 70, -1, -1, 73, -1, 75, 76, + -1, 78, 79, 80, 81, 82, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, 106, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, 148, -1, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, + -1, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, 241, -1, 243, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, 276, + 277, -1, 279, 280, 281, 282, 283, -1, 285, -1, + 287, -1, -1, 290, 291, 292, 293, 294, 295, 296, + -1, -1, 299, 300, 301, 302, 303, -1, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, -1, 343, 344, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, 473, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, -1, 500, 501, 502, 503, 504, 505, 506, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + 517, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 558, 559, -1, -1, -1, -1, -1, -1, -1, + 567, 5, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, -1, 30, 31, 32, 33, + 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, 70, -1, -1, 73, + -1, 75, 76, -1, 78, 79, 80, 81, 82, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, 106, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, 148, -1, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, 168, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, 241, -1, 243, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, 276, 277, -1, 279, 280, 281, 282, 283, + -1, 285, -1, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, -1, -1, 299, 300, 301, 302, 303, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, 473, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, 506, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, 517, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 558, 559, -1, -1, -1, -1, + -1, -1, -1, 567, 5, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, -1, 30, + 31, 32, 33, 34, 35, 36, 37, 38, -1, 40, + 41, 42, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, 70, + -1, -1, 73, -1, 75, 76, -1, 78, 79, 80, + 81, 82, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, 106, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, 148, -1, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, 168, 169, 170, + -1, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, -1, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + 241, -1, 243, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, 276, 277, -1, 279, 280, + 281, 282, 283, -1, 285, -1, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, -1, -1, 299, 300, + 301, 302, 303, -1, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, 473, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, 517, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 558, 559, -1, + -1, -1, -1, -1, -1, -1, 567, 5, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, 70, -1, -1, 73, -1, 75, 76, -1, + 78, 79, -1, 81, 82, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, 106, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + 148, -1, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + 168, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, 241, -1, 243, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, 276, 277, + -1, 279, 280, 281, 282, 283, -1, 285, -1, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, 299, 300, 301, 302, 303, -1, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, 473, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, 506, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, 517, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 558, 559, -1, -1, -1, -1, -1, -1, -1, 567, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, 70, -1, -1, 73, -1, + 75, 76, -1, 78, 79, -1, 81, 82, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, 106, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, 282, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, -1, -1, -1, -1, -1, -1, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, 567, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, 70, -1, -1, 73, -1, + 75, 76, -1, 78, 79, -1, 81, 82, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, 106, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, 282, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, -1, -1, -1, -1, -1, -1, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, 567, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, 70, -1, -1, 73, -1, + 75, 76, -1, 78, 79, -1, 81, 82, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, 106, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, 282, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, -1, -1, -1, -1, -1, -1, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, 567, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + 355, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, 549, -1, -1, -1, -1, -1, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, 567, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + 355, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, -1, -1, -1, -1, -1, -1, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, 567, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, -1, -1, -1, -1, -1, -1, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, 567, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, -1, -1, -1, -1, -1, -1, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, 567, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, -1, -1, -1, -1, -1, -1, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, 567, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + 135, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, -1, -1, -1, -1, -1, -1, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, 567, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, -1, -1, -1, + 175, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, 567, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, 107, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, 168, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, 243, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, 291, + 292, 293, 294, 295, 296, -1, -1, 299, 300, 301, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, -1, -1, -1, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 568, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, 70, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, 471, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, -1, + -1, 549, -1, -1, -1, -1, -1, -1, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, 567, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, 471, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, -1, + -1, 549, -1, -1, -1, -1, -1, -1, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, 567, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, 76, -1, + -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, 566, 567, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, 76, -1, + -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, -1, + -1, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, 567, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, -1, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, 567, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, -1, -1, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, 567, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, -1, -1, -1, 73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, -1, -1, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, 567, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, -1, -1, -1, -1, -1, -1, -1, -1, 5, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, 567, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, 70, -1, -1, 73, -1, 75, + 76, -1, -1, -1, 80, 81, -1, -1, -1, -1, + -1, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + -1, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, -1, 224, 225, + 226, 227, -1, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, -1, 251, -1, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, -1, -1, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, -1, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, -1, 338, 339, 340, 341, 342, 343, 344, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, -1, 364, 365, + 366, -1, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, -1, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + -1, 467, 468, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + 486, -1, 488, -1, 490, 491, 492, 493, 494, 495, + 496, 497, 498, -1, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, -1, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 544, 545, + 546, -1, -1, -1, -1, -1, -1, -1, -1, 555, + 556, 557, 558, 559, 560, 561, 562, 563, 5, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, -1, 30, 31, 32, 33, 34, 35, 36, + 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, 70, -1, -1, 73, -1, 75, 76, + -1, -1, -1, 80, 81, -1, -1, -1, -1, -1, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, -1, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, -1, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, -1, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, -1, 224, 225, 226, + 227, -1, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, -1, 251, -1, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, -1, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + -1, 338, 339, 340, 341, 342, 343, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, -1, 364, 365, 366, + -1, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, -1, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, -1, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, -1, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, -1, 484, 485, 486, + -1, 488, -1, 490, 491, 492, 493, 494, 495, 496, + 497, 498, -1, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, -1, 514, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 544, 545, 546, + -1, -1, -1, -1, -1, -1, -1, -1, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, -1, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, -1, -1, -1, 73, -1, -1, -1, -1, -1, + -1, 80, -1, -1, -1, -1, -1, -1, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, -1, -1, + -1, -1, -1, -1, -1, -1, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, 27, -1, -1, 30, + 31, 32, 33, -1, -1, 36, 37, 38, -1, 40, + -1, -1, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, -1, + -1, -1, 73, -1, -1, -1, -1, -1, -1, 80, + -1, -1, -1, -1, -1, -1, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, -1, 118, 119, 120, + 121, 122, -1, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, 150, + 151, 152, 153, 154, 155, -1, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, -1, 169, 170, + -1, -1, -1, -1, -1, -1, -1, -1, 179, 180, + 181, 182, 183, 184, 185, 186, 187, -1, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, -1, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + -1, -1, -1, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + -1, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, -1, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, -1, -1, 290, + -1, 292, 293, 294, 295, 296, -1, -1, 299, 300, + -1, 302, -1, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, -1, 365, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, -1, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, -1, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, -1, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, -1, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, -1, -1, -1, -1, + -1, -1, -1, -1, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, 80, -1, -1, + -1, -1, -1, -1, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, -1, -1, -1, -1, -1, -1, + -1, -1, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, 80, -1, -1, -1, -1, + -1, -1, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, -1, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, -1, -1, -1, -1, -1, -1, -1, -1, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, + 37, 38, -1, 40, -1, -1, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, -1, -1, -1, 73, -1, -1, -1, + -1, -1, -1, 80, -1, -1, -1, -1, -1, -1, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + -1, 118, 119, 120, 121, 122, -1, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, 150, 151, 152, 153, 154, 155, -1, + 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, + -1, -1, 169, 170, -1, -1, -1, -1, -1, -1, + -1, -1, 179, 180, 181, 182, 183, 184, 185, 186, + 187, -1, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, -1, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, -1, -1, -1, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, -1, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, -1, + 277, -1, 279, 280, 281, -1, 283, -1, 285, -1, + 287, -1, -1, 290, -1, 292, 293, 294, 295, 296, + -1, -1, 299, 300, -1, 302, -1, -1, 305, 306, + 307, -1, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, -1, 340, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, -1, 365, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, -1, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, -1, 442, 443, 444, 445, 446, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, -1, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, -1, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, 501, 502, 503, 504, 505, -1, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + -1, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + -1, -1, -1, -1, -1, -1, -1, -1, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, -1, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, -1, -1, -1, 73, -1, -1, -1, -1, -1, + -1, 80, -1, -1, -1, -1, -1, -1, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, -1, -1, + -1, -1, -1, -1, -1, -1, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, 27, -1, -1, 30, + 31, 32, 33, -1, -1, 36, 37, 38, -1, 40, + -1, -1, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, -1, + -1, -1, 73, -1, -1, -1, -1, -1, -1, 80, + -1, -1, -1, -1, -1, -1, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, -1, 118, 119, 120, + 121, 122, -1, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, 150, + 151, 152, 153, 154, 155, -1, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, -1, 169, 170, + -1, -1, -1, -1, -1, -1, -1, -1, 179, 180, + 181, 182, 183, 184, 185, 186, 187, -1, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, -1, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + -1, -1, -1, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + -1, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, -1, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, -1, -1, 290, + -1, 292, 293, 294, 295, 296, -1, -1, 299, 300, + -1, 302, -1, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, -1, 365, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, -1, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, -1, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, -1, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, -1, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, -1, -1, -1, -1, + -1, -1, -1, -1, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 5, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, -1, 5, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, 560, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, + -1, 40, 41, 42, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, -1, -1, -1, 73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, 117, 118, + 119, 120, -1, 122, 123, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, -1, -1, 148, + -1, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, 168, + 169, 170, -1, -1, -1, -1, 175, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, -1, 224, 225, 226, 227, -1, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, 241, -1, 243, 244, 245, 246, 247, -1, + 249, -1, -1, -1, 253, 254, -1, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, -1, 275, 276, 277, -1, + 279, 280, 281, 282, 283, -1, 285, -1, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, + 299, -1, 301, 302, 303, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, -1, -1, 338, + -1, 340, 341, 342, 343, -1, -1, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, 360, 361, 362, 363, 364, 365, 366, -1, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, -1, 381, -1, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + 419, 420, 421, 422, 423, 424, -1, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, -1, 467, -1, + 469, 470, -1, 472, 473, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, -1, 488, + -1, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, -1, 514, 515, 516, 517, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 544, 545, 546, -1, -1, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, 560, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, -1, -1, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, 560, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, -1, -1, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, 560, 18, 19, + 20, 21, 22, 23, -1, 25, 26, 27, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37, 38, -1, + 40, -1, -1, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + 70, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, -1, 118, 119, + 120, 121, 122, -1, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + 150, 151, 152, 153, 154, 155, -1, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, -1, 169, + 170, -1, -1, -1, -1, -1, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, -1, 242, -1, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, -1, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, -1, 275, -1, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, -1, -1, + 290, -1, 292, 293, 294, 295, 296, -1, -1, 299, + 300, -1, 302, -1, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, -1, 365, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, -1, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, -1, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, -1, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, 558, 559, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, 70, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, 242, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, -1, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + 558, 559, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, 70, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, 242, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, -1, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, 558, 559, 18, 19, 20, 21, 22, 23, + -1, 25, 26, 27, -1, -1, 30, 31, 32, 33, + -1, -1, 36, 37, 38, -1, 40, -1, -1, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, 70, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, -1, 118, 119, 120, 121, 122, -1, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, 150, 151, 152, 153, + 154, 155, -1, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, -1, 169, 170, -1, -1, -1, + -1, -1, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, -1, 242, -1, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, -1, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + -1, 275, -1, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, -1, -1, 290, -1, 292, 293, + 294, 295, 296, -1, -1, 299, 300, -1, 302, -1, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + -1, 365, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, -1, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, -1, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, -1, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, -1, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, -1, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, 558, 559, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, 70, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, 483, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4, 557, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, -1, 25, 26, 27, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37, 38, -1, + 40, -1, -1, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, -1, 118, 119, + 120, 121, 122, -1, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + 150, 151, 152, 153, 154, 155, -1, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, -1, 169, + 170, -1, -1, -1, -1, -1, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, -1, -1, -1, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, -1, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, -1, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, -1, -1, + 290, -1, 292, 293, 294, 295, 296, -1, -1, 299, + 300, -1, 302, -1, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, -1, 365, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, -1, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, -1, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 5, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, 75, 76, -1, + -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 5, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 5, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, -1, 30, 31, 32, 33, + 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 5, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, 135, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, 148, -1, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, 168, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, 241, + -1, 243, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, -1, -1, 299, 300, 301, + 302, 303, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, 473, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, 506, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, 517, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 5, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, + 40, 41, 42, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + 70, -1, -1, 73, -1, 75, 76, -1, 78, 79, + -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, -1, 175, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, 282, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 5, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + 148, -1, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + 168, 169, 170, -1, -1, -1, -1, 175, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, 241, -1, 243, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, 276, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, 299, 300, 301, 302, 303, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, 342, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, 473, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, 517, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 5, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, 148, -1, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, 168, 169, 170, -1, -1, -1, -1, 175, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, 241, -1, 243, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + 276, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, -1, -1, 299, 300, 301, 302, 303, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, 342, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, 473, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, 517, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 5, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, -1, 30, 31, 32, 33, + 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, 148, -1, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, 168, 169, 170, -1, -1, -1, + -1, 175, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, 241, -1, 243, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, 276, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, -1, -1, 299, 300, 301, 302, 303, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, 342, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, 473, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, 517, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 5, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, 148, -1, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, 168, 169, 170, -1, + -1, -1, -1, 175, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, 241, + -1, 243, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, -1, -1, 299, 300, 301, + 302, 303, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, 473, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, 517, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 5, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, + 40, 41, 42, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, -1, 175, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 5, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, 117, + 118, 119, 120, -1, 122, 123, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, -1, -1, + 148, -1, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + 168, 169, 170, -1, -1, -1, -1, 175, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, -1, 224, 225, 226, 227, + -1, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, 241, -1, 243, 244, 245, 246, 247, + -1, 249, -1, -1, -1, 253, 254, -1, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, -1, 275, 276, 277, + -1, 279, 280, 281, 282, 283, -1, 285, -1, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, 299, -1, 301, 302, 303, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, -1, -1, + 338, -1, 340, 341, 342, 343, -1, -1, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, 364, 365, 366, -1, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, -1, 381, -1, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, -1, 467, + -1, 469, 470, -1, 472, 473, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, -1, + 488, -1, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, -1, 514, 515, 516, 517, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 544, 545, 546, 5, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, 123, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + -1, -1, 148, -1, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, 168, 169, 170, -1, -1, -1, -1, 175, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, -1, 224, 225, + 226, 227, -1, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, 241, -1, 243, 244, 245, + 246, 247, -1, 249, -1, -1, -1, 253, 254, -1, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + 276, -1, -1, 279, 280, 281, 282, 283, -1, 285, + -1, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, -1, -1, 299, -1, 301, 302, 303, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + -1, -1, 338, -1, 340, 341, 342, 343, 344, -1, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, -1, 364, 365, + 366, -1, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, -1, 381, -1, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + -1, 467, -1, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, -1, 488, -1, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, -1, 514, -1, + 516, 517, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 544, 545, + 546, 5, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, -1, 30, 31, 32, 33, + 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, 117, 118, 119, 120, -1, 122, 123, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, -1, -1, 148, -1, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, 168, 169, 170, -1, -1, -1, + -1, 175, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, -1, + 224, 225, 226, 227, -1, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, 241, -1, 243, + 244, 245, 246, 247, -1, 249, -1, -1, -1, 253, + 254, -1, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, 276, -1, -1, 279, 280, 281, 282, 283, + -1, 285, -1, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, -1, -1, 299, -1, 301, 302, 303, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, -1, 338, -1, 340, 341, 342, 343, + -1, -1, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, -1, + 364, 365, 366, -1, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, -1, 381, -1, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, + 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, -1, 467, -1, 469, 470, -1, 472, 473, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, -1, 488, -1, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, -1, + 514, -1, 516, 517, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 544, 545, 546, 5, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, 123, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, -1, -1, 148, -1, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, 168, 169, 170, -1, + -1, -1, -1, 175, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, -1, 224, 225, 226, 227, -1, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, 241, + -1, 243, 244, 245, 246, 247, -1, 249, -1, -1, + -1, 253, 254, -1, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, -1, -1, 279, 280, 281, + 282, 283, -1, 285, -1, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, -1, -1, 299, -1, 301, + 302, 303, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, -1, 338, -1, 340, 341, + 342, 343, -1, -1, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, -1, 364, 365, 366, -1, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, -1, 381, + -1, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, -1, 467, -1, 469, 470, -1, + 472, 473, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, -1, 488, -1, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, -1, 514, -1, 516, 517, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 544, 545, 546, 5, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, + 40, 41, 42, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, -1, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, -1, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, -1, 175, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, -1, 224, 225, 226, 227, -1, -1, + 230, -1, 232, 233, 234, 235, 236, 237, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + -1, -1, -1, 253, 254, -1, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, -1, -1, 279, + 280, 281, 282, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + -1, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, -1, -1, 338, -1, + 340, 341, 342, 343, -1, -1, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, -1, 364, 365, 366, -1, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + -1, 381, -1, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, -1, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, -1, 488, -1, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, -1, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 544, 545, 546, 5, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, 117, + 118, 119, 120, -1, 122, 123, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, -1, -1, + 148, -1, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + 168, 169, 170, -1, -1, -1, -1, 175, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, -1, 224, 225, 226, 227, + -1, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, 241, -1, 243, 244, 245, 246, 247, + -1, 249, -1, -1, -1, 253, 254, -1, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, 276, -1, + -1, 279, 280, 281, 282, 283, -1, 285, -1, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, 299, -1, 301, 302, 303, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, -1, -1, + 338, -1, 340, 341, 342, 343, -1, -1, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, -1, 364, 365, 366, -1, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, -1, 381, -1, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, -1, 467, + -1, 469, 470, -1, 472, 473, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, -1, + 488, -1, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, -1, 514, -1, 516, 517, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 544, 545, 546, 5, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, 117, 118, 119, 120, -1, 122, 123, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + -1, -1, 148, -1, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, 168, 169, 170, -1, -1, -1, -1, 175, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, -1, 224, 225, + 226, 227, -1, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, 241, -1, 243, 244, 245, + 246, 247, -1, 249, -1, -1, -1, 253, 254, -1, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + 276, -1, -1, 279, 280, 281, 282, 283, -1, 285, + -1, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, -1, -1, 299, -1, 301, 302, 303, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + -1, -1, 338, -1, 340, 341, 342, 343, -1, -1, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, -1, 364, 365, + 366, -1, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, -1, 381, -1, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, 419, 420, 421, 422, 423, 424, -1, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + -1, 467, -1, 469, 470, -1, 472, 473, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, -1, 488, -1, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, -1, 514, -1, + 516, 517, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 544, 545, + 546, 5, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, -1, 30, 31, 32, 33, + 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, 117, 118, 119, 120, -1, 122, 123, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, -1, -1, 148, -1, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, 168, 169, 170, -1, -1, -1, + -1, 175, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, -1, + 224, 225, 226, 227, -1, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, 241, -1, 243, + 244, 245, 246, 247, -1, 249, -1, -1, -1, 253, + 254, -1, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, 276, -1, -1, 279, 280, 281, 282, 283, + -1, 285, -1, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, -1, -1, 299, -1, 301, 302, 303, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, -1, -1, 338, -1, 340, 341, 342, 343, + -1, -1, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, -1, + 364, 365, 366, -1, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, -1, 381, -1, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, + 424, -1, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, -1, 467, -1, 469, 470, -1, 472, 473, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, -1, 488, -1, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, -1, + 514, -1, 516, 517, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 544, 545, 546, 5, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, 117, 118, 119, 120, -1, + 122, 123, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, -1, -1, 148, -1, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, 168, 169, 170, -1, + -1, -1, -1, 175, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, -1, 224, 225, 226, 227, -1, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, 241, + -1, 243, 244, 245, 246, 247, -1, 249, -1, -1, + -1, 253, 254, -1, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, -1, -1, 279, 280, 281, + 282, 283, -1, 285, -1, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, -1, -1, 299, -1, 301, + 302, 303, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, -1, -1, 338, -1, 340, 341, + 342, 343, -1, -1, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, -1, 364, 365, 366, -1, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, -1, 381, + -1, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, 424, -1, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, -1, 467, -1, 469, 470, -1, + 472, 473, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, -1, 488, -1, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, -1, 514, -1, 516, 517, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 544, 545, 546, 5, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, + 30, 31, 32, 33, 34, 35, 36, 37, 38, -1, + 40, 41, 42, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, -1, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, -1, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, -1, 175, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, -1, 224, 225, 226, 227, -1, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + -1, -1, -1, 253, 254, -1, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, -1, -1, 279, + 280, 281, 282, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + -1, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, -1, -1, 338, -1, + 340, 341, 342, 343, -1, -1, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, -1, 364, 365, 366, -1, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + -1, 381, -1, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, -1, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, -1, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, -1, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, -1, 488, -1, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, -1, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 544, 545, 546, 5, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, -1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, 117, + 118, 119, 120, -1, -1, 123, -1, -1, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + -1, -1, 140, -1, 142, 143, 144, 145, -1, -1, + 148, -1, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + 168, 169, 170, -1, -1, -1, -1, 175, -1, -1, + -1, 179, 180, 181, 182, 183, 184, -1, -1, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, -1, 224, 225, 226, 227, + -1, -1, 230, -1, 232, 233, 234, -1, 236, -1, + 238, -1, 240, 241, -1, 243, 244, 245, 246, 247, + -1, 249, -1, -1, -1, 253, 254, -1, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, 276, -1, + -1, 279, 280, 281, -1, -1, -1, -1, -1, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, 299, -1, 301, 302, 303, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, -1, 327, + -1, 329, 330, 331, 332, 333, 334, 335, -1, -1, + 338, -1, 340, 341, 342, 343, -1, -1, 346, -1, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, -1, 364, 365, 366, -1, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, -1, 381, -1, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, -1, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, 419, 420, 421, 422, 423, 424, -1, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, -1, 445, 446, 447, + 448, 449, -1, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, -1, 467, + -1, 469, 470, -1, 472, 473, 474, 475, 476, 477, + 478, -1, 480, -1, -1, -1, -1, 485, 486, -1, + 488, -1, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, -1, -1, -1, 516, 517, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 544, 545, 546, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, + 37, 38, -1, 40, -1, -1, 43, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 69, -1, -1, -1, 73, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, -1, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, -1, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, -1, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, -1, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, -1, 279, 280, 281, -1, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, -1, 320, 321, -1, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, -1, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, -1, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, -1, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, -1, 514, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, -1, 545, 546, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, -1, -1, 149, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, 239, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, 500, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, 239, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, 303, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, 500, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + -1, 25, 26, 27, -1, -1, 30, 31, 32, 33, + -1, -1, 36, 37, 38, -1, 40, -1, -1, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, -1, 118, 119, 120, 121, 122, -1, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, 150, 151, 152, 153, + 154, 155, -1, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, 167, -1, 169, 170, -1, -1, -1, + -1, -1, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, -1, -1, -1, + 244, 245, 246, 247, 248, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, -1, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, -1, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, -1, -1, 290, -1, 292, 293, + 294, 295, 296, -1, -1, 299, 300, -1, 302, -1, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + -1, 365, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, -1, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, -1, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, -1, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, -1, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, 167, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, 248, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, 239, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, 500, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, 27, -1, -1, 30, + 31, 32, 33, -1, -1, 36, 37, 38, -1, 40, + -1, -1, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, 70, + -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, -1, 118, 119, 120, + 121, 122, -1, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, 150, + 151, 152, 153, 154, 155, -1, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, -1, 169, 170, + 171, -1, -1, -1, -1, -1, -1, -1, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, -1, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + -1, -1, -1, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + -1, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, -1, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, -1, -1, 290, + -1, 292, 293, 294, 295, 296, -1, -1, 299, 300, + -1, 302, -1, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, -1, 365, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, -1, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, -1, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, -1, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, -1, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, -1, 25, 26, 27, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37, 38, -1, + 40, -1, -1, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, -1, 118, 119, + 120, 121, 122, -1, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + 150, 151, 152, 153, 154, 155, -1, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, 167, -1, 169, + 170, -1, -1, -1, -1, -1, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, -1, -1, -1, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, -1, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, -1, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, -1, -1, + 290, -1, 292, 293, 294, 295, 296, -1, -1, 299, + 300, -1, 302, -1, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, -1, 365, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, -1, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, -1, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, -1, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, 70, -1, -1, 73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, 70, -1, -1, 73, -1, -1, 76, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, + 37, 38, -1, 40, -1, -1, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, -1, -1, -1, 73, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + -1, 118, 119, 120, 121, 122, -1, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, 150, 151, 152, 153, 154, 155, -1, + 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, + -1, -1, 169, 170, -1, -1, -1, -1, -1, -1, + -1, -1, 179, 180, 181, 182, 183, 184, 185, 186, + 187, -1, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, -1, 230, -1, 232, 233, 234, 235, 236, + -1, 238, 239, 240, -1, -1, -1, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, -1, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, -1, + 277, -1, 279, 280, 281, -1, 283, -1, 285, -1, + 287, -1, -1, 290, -1, 292, 293, 294, 295, 296, + -1, -1, 299, 300, -1, 302, -1, -1, 305, 306, + 307, -1, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, -1, 340, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, -1, 365, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, -1, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, -1, 442, 443, 444, 445, 446, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, 471, 472, -1, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, -1, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, 501, 502, 503, 504, 505, -1, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + -1, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, 167, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, 70, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, -1, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, 471, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + -1, 25, 26, 27, -1, -1, 30, 31, 32, 33, + -1, -1, 36, 37, 38, -1, 40, -1, -1, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, 70, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, -1, 118, 119, 120, 121, 122, -1, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, 150, 151, 152, 153, + 154, 155, -1, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, -1, 169, 170, -1, -1, -1, + -1, -1, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, -1, -1, -1, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, -1, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, -1, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, -1, -1, 290, -1, 292, 293, + 294, 295, 296, -1, -1, 299, 300, -1, 302, -1, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + -1, 365, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, -1, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, -1, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, -1, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, -1, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, 70, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, 70, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, 27, -1, -1, 30, + 31, 32, 33, -1, -1, 36, 37, 38, -1, 40, + -1, -1, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, 70, + -1, -1, 73, -1, -1, 76, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, -1, 118, 119, 120, + 121, 122, -1, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, 150, + 151, 152, 153, 154, 155, -1, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, -1, 169, 170, + -1, -1, -1, -1, -1, -1, -1, -1, 179, 180, + 181, 182, 183, 184, 185, 186, 187, -1, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, -1, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + -1, -1, -1, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + -1, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, -1, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, -1, -1, 290, + -1, 292, 293, 294, 295, 296, -1, -1, 299, 300, + -1, 302, -1, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, -1, 365, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, -1, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, -1, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, -1, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, -1, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, -1, 25, 26, 27, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37, 38, -1, + 40, -1, -1, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, -1, 118, 119, + 120, 121, 122, -1, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + 150, 151, 152, 153, 154, 155, -1, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, -1, 169, + 170, -1, -1, -1, -1, -1, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, -1, -1, -1, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, -1, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, -1, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, -1, -1, + 290, -1, 292, 293, 294, 295, 296, -1, -1, 299, + 300, -1, 302, -1, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, 355, 356, 357, 358, -1, + -1, 361, 362, 363, -1, 365, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, -1, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, -1, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, -1, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, 70, -1, -1, 73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, 506, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, + 37, 38, -1, 40, -1, -1, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, -1, -1, -1, 73, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + -1, 118, 119, 120, 121, 122, -1, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, 150, 151, 152, 153, 154, 155, -1, + 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, + -1, -1, 169, 170, -1, -1, -1, -1, -1, -1, + -1, -1, 179, 180, 181, 182, 183, 184, 185, 186, + 187, -1, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, -1, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, -1, -1, -1, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, -1, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, -1, + 277, -1, 279, 280, 281, -1, 283, -1, 285, -1, + 287, -1, -1, 290, -1, 292, 293, 294, 295, 296, + -1, -1, 299, 300, -1, 302, -1, -1, 305, 306, + 307, -1, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, -1, 340, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, -1, 365, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, -1, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, -1, 442, 443, 444, 445, 446, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, -1, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, -1, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, 501, 502, 503, 504, 505, 506, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + -1, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, 70, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, 70, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, -1, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + -1, 25, 26, 27, -1, -1, 30, 31, 32, 33, + -1, -1, 36, 37, 38, -1, 40, -1, -1, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, 70, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, -1, 118, 119, 120, 121, 122, -1, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, 150, 151, 152, 153, + 154, 155, -1, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, -1, 169, 170, -1, -1, -1, + -1, -1, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, -1, -1, -1, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, -1, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, -1, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, -1, -1, 290, -1, 292, 293, + 294, 295, 296, -1, -1, 299, 300, -1, 302, -1, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + -1, 365, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, -1, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, -1, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, -1, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, -1, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, 70, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, 355, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, 27, -1, -1, 30, + 31, 32, 33, -1, -1, 36, 37, 38, -1, 40, + -1, -1, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, -1, + -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, -1, 118, 119, 120, + 121, 122, -1, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, 150, + 151, 152, 153, 154, 155, -1, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, -1, 169, 170, + -1, -1, -1, -1, -1, -1, -1, -1, 179, 180, + 181, 182, 183, 184, 185, 186, 187, -1, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, -1, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + -1, -1, -1, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + -1, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, -1, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, -1, -1, 290, + -1, 292, 293, 294, 295, 296, -1, -1, 299, 300, + -1, 302, -1, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, -1, 365, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, -1, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, -1, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, -1, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, -1, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, -1, 25, 26, 27, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37, 38, -1, + 40, -1, -1, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, -1, 118, 119, + 120, 121, 122, -1, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + 150, 151, 152, 153, 154, 155, -1, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, -1, 169, + 170, -1, -1, -1, -1, -1, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, -1, -1, -1, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, -1, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, -1, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, -1, -1, + 290, -1, 292, 293, 294, 295, 296, -1, -1, 299, + 300, -1, 302, -1, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, -1, 365, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, -1, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, -1, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, -1, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, -1, -1, -1, 73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, 355, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, + 37, 38, -1, 40, -1, -1, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, -1, -1, 72, 73, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + -1, 118, 119, 120, 121, 122, -1, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, 150, 151, 152, 153, 154, 155, -1, + 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, + -1, -1, 169, 170, -1, -1, -1, -1, -1, -1, + -1, -1, 179, 180, 181, 182, 183, 184, 185, 186, + 187, -1, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, -1, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, -1, -1, -1, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, -1, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, -1, + 277, -1, 279, 280, 281, -1, 283, -1, 285, -1, + 287, -1, -1, 290, -1, 292, 293, 294, 295, 296, + -1, -1, 299, 300, -1, 302, -1, -1, 305, 306, + 307, -1, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, -1, 340, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, -1, 365, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, -1, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, -1, 442, 443, 444, 445, 446, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, -1, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, -1, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, 501, 502, 503, 504, 505, -1, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + -1, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, -1, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + -1, 25, 26, 27, -1, -1, 30, 31, 32, 33, + -1, -1, 36, 37, 38, -1, 40, -1, -1, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, -1, 118, 119, 120, 121, 122, -1, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, 150, 151, 152, 153, + 154, 155, -1, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, -1, 169, 170, -1, -1, -1, + -1, -1, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, -1, -1, -1, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, -1, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, -1, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, -1, -1, 290, -1, 292, 293, + 294, 295, 296, -1, -1, 299, 300, -1, 302, -1, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + -1, 365, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, -1, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, -1, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, -1, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, -1, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, 107, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, 107, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, 27, -1, -1, 30, + 31, 32, 33, -1, -1, 36, 37, 38, -1, 40, + -1, -1, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, -1, + -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, -1, 118, 119, 120, + 121, 122, -1, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, 150, + 151, 152, 153, 154, 155, -1, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, -1, 169, 170, + -1, -1, -1, -1, -1, -1, -1, -1, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, -1, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + -1, -1, -1, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + -1, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, -1, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, -1, -1, 290, + -1, 292, 293, 294, 295, 296, -1, -1, 299, 300, + -1, 302, -1, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, -1, 365, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, -1, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, -1, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, -1, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, -1, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, -1, 25, 26, 27, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37, 38, -1, + 40, -1, -1, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, -1, 118, 119, + 120, 121, 122, -1, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + 150, 151, 152, 153, 154, 155, -1, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, -1, 169, + 170, -1, -1, -1, -1, -1, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, -1, -1, -1, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, -1, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, -1, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, -1, -1, + 290, -1, 292, 293, 294, 295, 296, -1, -1, 299, + 300, -1, 302, -1, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, -1, 365, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, -1, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, -1, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, -1, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, -1, -1, -1, 73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, -1, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, + 37, 38, -1, 40, -1, -1, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, -1, -1, -1, 73, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + -1, 118, 119, 120, 121, 122, -1, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, 150, 151, 152, 153, 154, 155, -1, + 157, 158, -1, -1, 161, 162, 163, 164, 165, 166, + -1, -1, 169, 170, -1, -1, -1, -1, -1, -1, + -1, -1, 179, 180, 181, 182, 183, 184, 185, 186, + 187, -1, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, -1, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, -1, -1, -1, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, -1, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, -1, + 277, -1, 279, 280, 281, -1, 283, -1, 285, -1, + 287, -1, -1, 290, -1, 292, 293, 294, 295, 296, + -1, -1, 299, 300, -1, 302, -1, -1, 305, 306, + 307, -1, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, -1, 340, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, -1, 365, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, -1, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, -1, 442, 443, 444, 445, 446, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, -1, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, -1, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, 501, 502, 503, 504, 505, -1, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + -1, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, -1, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + -1, 25, 26, 27, -1, -1, 30, 31, 32, 33, + -1, -1, 36, 37, 38, -1, 40, -1, -1, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, -1, 118, 119, 120, 121, 122, -1, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, 150, 151, 152, 153, + 154, 155, -1, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, -1, 169, 170, -1, -1, -1, + -1, -1, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, -1, -1, -1, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, -1, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, -1, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, -1, -1, 290, -1, 292, 293, + 294, 295, 296, -1, -1, 299, 300, -1, 302, -1, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + -1, 365, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, -1, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, -1, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, -1, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, -1, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, 27, -1, -1, 30, + 31, 32, 33, -1, -1, 36, 37, 38, -1, 40, + -1, -1, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, -1, + -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, -1, 118, 119, 120, + 121, 122, -1, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, 150, + 151, 152, 153, 154, 155, -1, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, -1, 169, 170, + -1, -1, -1, -1, -1, -1, -1, -1, 179, 180, + 181, 182, 183, 184, 185, 186, 187, -1, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, -1, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + -1, -1, -1, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + -1, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, -1, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, -1, -1, 290, + -1, 292, 293, 294, 295, 296, -1, -1, 299, 300, + -1, 302, -1, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, -1, 365, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, -1, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, -1, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, -1, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, -1, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, -1, 25, 26, 27, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37, 38, -1, + 40, -1, -1, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, -1, 118, 119, + 120, 121, 122, -1, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + 150, 151, 152, 153, 154, 155, -1, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, -1, 169, + 170, -1, -1, -1, -1, -1, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, -1, -1, -1, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, -1, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, -1, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, -1, -1, + 290, -1, 292, 293, 294, 295, 296, -1, -1, 299, + 300, -1, 302, -1, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, -1, 365, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, -1, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, -1, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, -1, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, -1, -1, -1, 73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, + 37, 38, -1, 40, -1, -1, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, -1, -1, -1, 73, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + -1, 118, 119, 120, 121, 122, -1, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, 150, 151, 152, 153, 154, 155, -1, + 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, + -1, -1, 169, 170, -1, -1, -1, -1, -1, -1, + -1, -1, 179, 180, 181, 182, 183, 184, 185, 186, + 187, -1, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, -1, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, -1, -1, -1, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, -1, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, -1, + 277, -1, 279, 280, 281, -1, 283, -1, 285, -1, + 287, -1, -1, 290, -1, 292, 293, 294, 295, 296, + -1, -1, 299, 300, -1, 302, -1, -1, 305, 306, + 307, -1, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, -1, 340, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, -1, 365, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, -1, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, -1, 442, 443, 444, 445, 446, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, -1, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, -1, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, 501, 502, 503, 504, 505, -1, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + -1, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, -1, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + -1, 25, 26, 27, -1, -1, 30, 31, 32, 33, + -1, -1, 36, 37, 38, -1, 40, -1, -1, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, -1, 118, 119, 120, 121, 122, -1, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, 150, 151, 152, 153, + 154, 155, -1, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, -1, 169, 170, -1, -1, -1, + -1, -1, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, -1, -1, -1, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, -1, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, -1, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, -1, -1, 290, -1, 292, 293, + 294, 295, 296, -1, -1, 299, 300, -1, 302, -1, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + -1, 365, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, -1, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, -1, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, -1, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, -1, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, 27, -1, -1, 30, + 31, 32, 33, -1, -1, 36, 37, 38, -1, 40, + -1, -1, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, -1, + -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, -1, 118, 119, 120, + 121, 122, -1, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, 150, + 151, 152, 153, 154, 155, -1, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, -1, 169, 170, + -1, -1, -1, -1, -1, -1, -1, -1, 179, 180, + 181, 182, 183, 184, 185, 186, 187, -1, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, -1, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + -1, -1, -1, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + -1, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, -1, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, -1, -1, 290, + -1, 292, 293, 294, 295, 296, -1, -1, 299, 300, + -1, 302, -1, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, -1, 365, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, -1, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, -1, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, -1, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, -1, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, -1, 25, 26, 27, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37, 38, -1, + 40, -1, -1, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, -1, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + 150, 151, 152, 153, 154, 155, -1, 157, 158, -1, + -1, 161, 162, 163, 164, 165, 166, -1, -1, 169, + 170, -1, -1, -1, -1, -1, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, -1, -1, -1, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, -1, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, -1, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, -1, -1, + 290, -1, 292, 293, 294, 295, 296, -1, -1, 299, + 300, -1, 302, -1, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, -1, 365, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, -1, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, -1, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, -1, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, -1, -1, -1, 73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, -1, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, + 37, 38, -1, 40, -1, -1, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, -1, -1, -1, 73, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + -1, 118, 119, 120, 121, 122, -1, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, 150, 151, 152, 153, 154, 155, -1, + 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, + -1, -1, 169, 170, -1, -1, -1, -1, -1, -1, + -1, -1, 179, 180, 181, 182, 183, 184, 185, 186, + 187, -1, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, -1, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, -1, -1, -1, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, -1, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, -1, + 277, -1, 279, 280, 281, -1, 283, -1, 285, -1, + 287, -1, -1, 290, -1, 292, 293, 294, 295, 296, + -1, -1, 299, 300, -1, 302, -1, -1, 305, 306, + 307, -1, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, -1, 340, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, -1, 365, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, -1, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, -1, 442, 443, 444, 445, 446, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, -1, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, -1, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, 501, 502, 503, 504, 505, -1, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + -1, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, -1, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + -1, 25, 26, 27, -1, -1, 30, 31, 32, 33, + -1, -1, 36, 37, 38, -1, 40, -1, -1, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, -1, 118, 119, 120, 121, 122, -1, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, 150, 151, 152, 153, + 154, 155, -1, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, -1, 169, 170, -1, -1, -1, + -1, -1, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, -1, -1, -1, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, -1, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, -1, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, -1, -1, 290, -1, 292, 293, + 294, 295, 296, -1, -1, 299, 300, -1, 302, -1, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + -1, 365, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, -1, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, -1, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, -1, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, -1, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, 27, -1, -1, 30, + 31, 32, 33, -1, -1, 36, 37, 38, -1, 40, + -1, -1, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, -1, + -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, -1, 118, 119, 120, + 121, 122, -1, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, 150, + 151, 152, 153, 154, 155, -1, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, -1, 169, 170, + -1, -1, -1, -1, -1, -1, -1, -1, 179, 180, + 181, 182, 183, 184, 185, 186, 187, -1, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, -1, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + -1, -1, -1, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + -1, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, -1, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, -1, -1, 290, + -1, 292, 293, 294, 295, 296, -1, -1, 299, 300, + -1, 302, -1, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, -1, 365, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, -1, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, -1, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, -1, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, -1, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, -1, 25, 26, 27, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37, 38, -1, + 40, -1, -1, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, 107, -1, 109, + 110, 111, -1, 113, 114, 115, 116, -1, 118, 119, + 120, 121, 122, -1, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + 150, 151, 152, 153, 154, 155, -1, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, -1, 169, + 170, -1, -1, -1, -1, -1, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, -1, -1, -1, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, -1, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, -1, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, -1, -1, + 290, -1, 292, 293, 294, 295, 296, -1, -1, 299, + 300, -1, 302, -1, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, -1, 365, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, -1, 443, 444, 445, 446, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, -1, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, -1, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, -1, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, -1, -1, -1, 73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + 159, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, 159, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, + 37, 38, -1, 40, -1, -1, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, -1, -1, -1, 73, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + -1, 118, 119, 120, 121, 122, -1, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, 150, 151, 152, 153, 154, 155, -1, + 157, 158, 159, -1, 161, 162, 163, 164, 165, 166, + -1, -1, 169, 170, -1, -1, -1, -1, -1, -1, + -1, -1, 179, 180, 181, 182, 183, 184, 185, 186, + 187, -1, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, -1, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, -1, -1, -1, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, -1, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, -1, + 277, -1, 279, 280, 281, -1, 283, -1, 285, -1, + 287, -1, -1, 290, -1, 292, 293, 294, 295, 296, + -1, -1, 299, 300, -1, 302, -1, -1, 305, 306, + 307, -1, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, -1, 340, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, -1, 365, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, -1, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, -1, 442, 443, 444, 445, 446, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, -1, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, -1, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, 501, 502, 503, 504, 505, -1, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + -1, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, 159, -1, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, 159, -1, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, -1, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + -1, 25, 26, 27, -1, -1, 30, 31, 32, 33, + -1, -1, 36, 37, 38, -1, 40, -1, -1, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, -1, 118, 119, 120, 121, 122, -1, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, 150, 151, 152, 153, + 154, 155, -1, 157, 158, 159, -1, 161, 162, 163, + 164, 165, 166, -1, -1, 169, 170, -1, -1, -1, + -1, -1, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, -1, -1, -1, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, -1, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, -1, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, -1, -1, 290, -1, 292, 293, + 294, 295, 296, -1, -1, 299, 300, -1, 302, -1, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + -1, 365, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, -1, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, -1, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, -1, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, -1, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, 159, -1, 161, 162, + 163, 164, 165, 166, -1, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 6, 7, 8, 9, 10, + 11, 12, -1, 14, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, 27, -1, -1, 30, + 31, 32, 33, -1, -1, 36, 37, 38, -1, 40, + -1, -1, 43, 44, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, -1, + -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, -1, 118, 119, 120, + 121, 122, -1, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, 138, 139, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, 150, + 151, 152, 153, 154, 155, -1, 157, 158, 159, -1, + 161, 162, 163, 164, 165, 166, -1, -1, 169, 170, + -1, -1, -1, -1, -1, -1, -1, -1, 179, 180, + 181, 182, 183, 184, 185, 186, 187, -1, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, -1, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + -1, -1, -1, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, 258, 259, 260, + -1, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, -1, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, -1, -1, 290, + -1, 292, 293, 294, 295, 296, -1, -1, 299, 300, + -1, 302, -1, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, -1, -1, 356, 357, 358, -1, -1, + 361, 362, 363, -1, 365, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, -1, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, -1, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, -1, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, -1, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, 513, 514, -1, 516, -1, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, 18, 19, + 20, 21, 22, 23, -1, 25, 26, 27, -1, -1, + 30, 31, 32, 33, -1, -1, 36, 37, 38, -1, + 40, -1, -1, 43, 44, -1, -1, -1, 48, 49, + -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, + -1, -1, -1, 63, -1, 65, -1, 67, 68, 69, + -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, -1, 118, 119, + 120, 121, 122, -1, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, 138, 139, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + 150, 151, 152, 153, 154, 155, -1, 157, 158, 159, + -1, 161, 162, 163, 164, 165, 166, -1, -1, 169, + 170, -1, -1, -1, -1, -1, -1, -1, -1, 179, + 180, 181, 182, 183, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, -1, -1, -1, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, 258, 259, + 260, -1, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, -1, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, -1, -1, + 290, -1, 292, 293, 294, 295, 296, -1, -1, 299, + 300, -1, 302, -1, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, -1, 365, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, -1, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, -1, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, 513, 514, -1, 516, -1, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, -1, -1, 18, + 19, 20, 21, 22, 23, -1, 25, 26, 27, -1, + -1, 30, 31, 32, 33, -1, -1, 36, 37, 38, + -1, 40, -1, -1, 43, 44, -1, -1, -1, 48, + 49, -1, -1, -1, -1, 54, -1, -1, -1, -1, + -1, -1, -1, -1, 63, -1, 65, -1, 67, 68, + 69, -1, -1, -1, 73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, -1, 118, + 119, 120, 121, 122, -1, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, 138, + 139, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, 150, 151, 152, 153, 154, 155, -1, 157, 158, + -1, -1, 161, 162, 163, 164, 165, 166, -1, -1, + 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 185, 186, 187, -1, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + -1, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, -1, -1, -1, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, 258, + 259, 260, -1, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, -1, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, -1, + -1, 290, -1, 292, 293, 294, 295, 296, -1, -1, + 299, 300, -1, 302, -1, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, -1, -1, 356, 357, 358, + -1, -1, 361, 362, 363, -1, 365, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, -1, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, -1, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, -1, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, 513, 514, -1, 516, -1, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 6, 7, + 8, 9, 10, 11, 12, -1, 14, 15, -1, -1, + 18, 19, 20, 21, 22, 23, -1, 25, 26, 27, + -1, -1, 30, 31, 32, 33, -1, -1, 36, 37, + 38, -1, 40, -1, -1, 43, 44, -1, -1, -1, + 48, 49, -1, -1, -1, -1, 54, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, 65, -1, 67, + 68, 69, -1, -1, -1, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, -1, + 118, 119, 120, 121, 122, -1, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, 150, 151, 152, 153, 154, 155, -1, 157, + 158, -1, -1, 161, 162, 163, 164, 165, 166, -1, + -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, + -1, 179, 180, 181, 182, 183, 184, 185, 186, 187, + -1, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, -1, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, -1, -1, -1, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + 258, 259, 260, -1, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, -1, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + -1, -1, 290, -1, 292, 293, 294, 295, 296, -1, + -1, 299, 300, -1, 302, -1, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, -1, -1, 356, 357, + 358, -1, -1, 361, 362, 363, -1, 365, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, -1, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, -1, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, 513, 514, -1, 516, -1, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 6, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + 27, -1, -1, 30, 31, 32, 33, -1, -1, 36, + 37, 38, -1, 40, -1, -1, 43, 44, -1, -1, + -1, 48, 49, -1, -1, -1, -1, 54, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, 65, -1, + 67, 68, 69, -1, -1, -1, 73, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, -1, 113, 114, 115, 116, + -1, 118, 119, 120, 121, 122, -1, 124, 125, -1, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 136, + 137, 138, 139, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, 150, 151, 152, 153, 154, 155, -1, + 157, 158, -1, -1, 161, 162, 163, 164, 165, 166, + -1, -1, 169, 170, -1, -1, -1, -1, -1, -1, + -1, -1, 179, 180, 181, 182, 183, 184, 185, 186, + 187, -1, 189, -1, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, -1, -1, 205, 206, + 207, 208, 209, -1, 211, 212, 213, -1, 215, 216, + 217, -1, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, -1, 230, -1, 232, 233, 234, 235, 236, + -1, 238, -1, 240, -1, -1, -1, 244, 245, 246, + 247, -1, 249, 250, -1, 252, 253, 254, -1, 256, + 257, 258, 259, 260, -1, 262, 263, 264, 265, -1, + 267, 268, 269, 270, 271, 272, 273, -1, 275, -1, + 277, -1, 279, 280, 281, -1, 283, -1, 285, -1, + 287, -1, -1, 290, -1, 292, 293, 294, 295, 296, + -1, -1, 299, 300, -1, 302, -1, -1, 305, 306, + 307, -1, -1, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, -1, 340, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, -1, 352, 353, -1, -1, 356, + 357, 358, -1, -1, 361, 362, 363, -1, 365, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, 382, 383, 384, 385, -1, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, -1, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, -1, + 417, 418, -1, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, -1, 442, 443, 444, 445, 446, + -1, 448, 449, 450, 451, -1, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, -1, 469, 470, -1, 472, -1, 474, 475, 476, + 477, 478, -1, 480, 481, 482, -1, -1, 485, 486, + 487, 488, 489, -1, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, 501, 502, 503, 504, 505, -1, + -1, 508, 509, 510, 511, 512, 513, 514, -1, 516, + -1, 518, 519, 520, 521, -1, -1, 524, -1, -1, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, + -1, -1, 18, 19, 20, 21, 22, 23, -1, 25, + 26, 27, -1, -1, 30, 31, 32, 33, -1, -1, + 36, 37, 38, -1, 40, -1, -1, 43, 44, -1, + -1, -1, 48, 49, -1, -1, -1, -1, 54, -1, + -1, -1, -1, -1, -1, -1, -1, 63, -1, 65, + -1, 67, 68, 69, -1, -1, -1, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 90, 91, 92, 93, 94, 95, + 96, 97, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, -1, 113, 114, 115, + 116, -1, 118, 119, 120, 121, 122, -1, 124, 125, + -1, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 136, 137, 138, 139, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, 150, 151, 152, 153, 154, 155, + -1, 157, 158, -1, -1, 161, 162, 163, 164, 165, + 166, -1, -1, 169, 170, -1, -1, -1, -1, -1, + -1, -1, -1, 179, 180, 181, 182, 183, 184, 185, + 186, 187, -1, 189, -1, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, -1, -1, 205, + 206, 207, 208, 209, -1, 211, 212, 213, -1, 215, + 216, 217, -1, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, -1, 230, -1, 232, 233, 234, 235, + 236, -1, 238, -1, 240, -1, -1, -1, 244, 245, + 246, 247, -1, 249, 250, -1, 252, 253, 254, -1, + 256, 257, 258, 259, 260, -1, 262, 263, 264, 265, + -1, 267, 268, 269, 270, 271, 272, 273, -1, 275, + -1, 277, -1, 279, 280, 281, -1, 283, -1, 285, + -1, 287, -1, -1, 290, -1, 292, 293, 294, 295, + 296, -1, -1, 299, 300, -1, 302, -1, -1, 305, + 306, 307, -1, -1, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, -1, 340, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, -1, 352, 353, -1, -1, + 356, 357, 358, -1, -1, 361, 362, 363, -1, 365, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, 382, 383, 384, 385, + -1, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, -1, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + -1, 417, 418, -1, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, -1, 442, 443, 444, 445, + 446, -1, 448, 449, 450, 451, -1, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, -1, 469, 470, -1, 472, -1, 474, 475, + 476, 477, 478, -1, 480, 481, 482, -1, -1, 485, + 486, 487, 488, 489, -1, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, 501, 502, 503, 504, 505, + -1, -1, 508, 509, 510, 511, 512, 513, 514, -1, + 516, -1, 518, 519, 520, 521, -1, -1, 524, -1, + -1, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 6, 7, 8, 9, 10, 11, 12, -1, 14, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, 27, -1, -1, 30, 31, 32, 33, -1, + -1, 36, 37, 38, -1, 40, -1, -1, 43, 44, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, 68, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, -1, 118, 119, 120, 121, 122, -1, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, 138, 139, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, 150, 151, 152, 153, 154, + 155, -1, 157, 158, -1, -1, 161, 162, 163, 164, + 165, 166, -1, -1, 169, 170, -1, -1, -1, -1, + -1, -1, -1, -1, 179, 180, 181, 182, 183, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, -1, -1, -1, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, 258, 259, 260, -1, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, -1, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, -1, -1, 290, -1, 292, 293, 294, + 295, 296, -1, -1, 299, 300, -1, 302, -1, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, -1, + 365, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, -1, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, -1, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, -1, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, 513, 514, + -1, 516, -1, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 6, 7, 8, 9, 10, 11, 12, -1, + 14, 15, -1, -1, 18, 19, 20, 21, 22, 23, + -1, 25, 26, 27, -1, -1, 30, 31, 32, 33, + -1, -1, 36, 37, 38, -1, 40, -1, -1, 43, + 44, -1, -1, -1, 48, 49, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, + -1, 65, -1, 67, 68, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, -1, 118, 119, 120, 121, 122, -1, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, 138, 139, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, 150, 151, 152, 153, + 154, 155, -1, 157, 158, -1, -1, 161, 162, 163, + 164, 165, 166, -1, -1, 169, 170, -1, -1, -1, + -1, -1, -1, -1, -1, 179, 180, 181, 182, 183, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, -1, -1, -1, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, 258, 259, 260, -1, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, -1, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, -1, -1, 290, -1, 292, 293, + 294, 295, 296, -1, -1, 299, 300, -1, 302, -1, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + -1, 365, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, -1, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, -1, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, -1, 472, -1, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, -1, 518, 519, 520, 521, -1, -1, + 524, -1, -1, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 6, 7, 8, 9, 10, 11, 12, + -1, 14, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, 27, -1, -1, 30, 31, 32, + 33, -1, -1, 36, 37, 38, -1, 40, -1, -1, + 43, 44, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, -1, 118, 119, 120, 121, 122, + -1, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, 138, 139, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, 150, 151, 152, + 153, 154, 155, -1, 157, 158, -1, -1, 161, 162, + 163, 164, 165, 166, -1, -1, 169, 170, -1, -1, + -1, -1, -1, -1, -1, -1, 179, 180, 181, 182, + 183, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, -1, -1, + -1, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, 258, 259, 260, -1, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, -1, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, -1, -1, 290, -1, 292, + 293, 294, 295, 296, -1, -1, 299, 300, -1, 302, + -1, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, -1, 365, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, -1, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, -1, 442, + 443, 444, 445, 446, -1, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + -1, 474, 475, 476, 477, 478, -1, 480, 481, 482, + -1, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + 513, 514, -1, 516, -1, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 6, 7, 8, 9, 10, 11, + 12, -1, 14, 15, -1, -1, 18, 19, 20, 21, + 22, 23, -1, 25, 26, 27, -1, -1, 30, 31, + 32, 33, -1, -1, 36, 37, 38, -1, 40, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, 65, -1, 67, 68, 69, -1, -1, + -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, -1, 118, 119, 120, 121, + 122, -1, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, 138, 139, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, 150, 151, + 152, 153, 154, 155, -1, 157, 158, 159, -1, 161, + 162, 163, 164, 165, 166, -1, -1, 169, 170, -1, + -1, -1, -1, -1, -1, -1, -1, 179, 180, 181, + 182, 183, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, -1, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, -1, + -1, -1, 244, 245, 246, 247, -1, 249, 250, -1, + 252, -1, 254, -1, 256, 257, 258, 259, 260, -1, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, -1, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, -1, -1, 290, -1, + 292, 293, 294, 295, 296, -1, -1, 299, 300, -1, + 302, -1, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, -1, -1, 356, 357, 358, -1, -1, 361, + 362, 363, -1, 365, -1, 367, 368, 369, 370, 371, + 372, 373, -1, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, -1, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, -1, 420, 421, + 422, 423, 424, 425, -1, 427, 428, 429, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, -1, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, -1, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, 513, 514, -1, 516, -1, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 6, 7, -1, 9, 10, + 11, -1, -1, -1, 15, -1, -1, 18, 19, 20, + 21, 22, 23, -1, 25, 26, -1, -1, -1, 30, + 31, 32, 33, -1, 35, 36, 37, 38, 39, 40, + 41, 42, -1, -1, -1, -1, -1, 48, 49, -1, + -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, + -1, -1, 63, -1, 65, -1, 67, 68, 69, -1, + 71, -1, 73, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 117, -1, -1, -1, + 121, 122, 123, 124, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 139, -1, + -1, -1, -1, -1, -1, 146, -1, 148, -1, -1, + -1, -1, -1, -1, -1, 156, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 168, -1, -1, + -1, -1, -1, -1, 175, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 185, 186, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 215, -1, -1, -1, -1, -1, + -1, -1, 223, -1, -1, -1, -1, 228, -1, -1, + -1, -1, -1, -1, 235, -1, -1, -1, -1, -1, + 241, -1, 243, -1, -1, -1, -1, -1, -1, 250, + -1, 252, -1, -1, -1, -1, -1, -1, -1, -1, + 261, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 276, 277, -1, -1, -1, + -1, -1, 283, -1, 285, -1, -1, 288, 289, -1, + 291, -1, -1, -1, -1, -1, -1, -1, -1, 300, + 301, -1, 303, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 326, 327, 328, -1, -1, + -1, -1, -1, -1, -1, 336, 337, -1, -1, -1, + -1, 342, -1, -1, 345, -1, 347, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 363, 364, -1, 366, 367, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 380, + -1, 382, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 397, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 419, -1, + -1, -1, -1, -1, 425, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 444, -1, -1, 447, -1, -1, 450, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 466, -1, -1, -1, -1, + -1, -1, 473, -1, -1, -1, -1, -1, -1, -1, + 481, 482, -1, -1, -1, -1, 487, -1, 489, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 499, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 514, -1, -1, 517, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 6, 7, -1, 9, 10, 11, -1, + -1, -1, 15, -1, -1, 18, 19, 20, 21, 22, + 23, -1, 25, 26, -1, -1, -1, 30, 31, 32, + 33, -1, 35, 36, 37, 38, 39, 40, 41, 42, + -1, -1, -1, -1, -1, 48, 49, -1, -1, -1, + -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, + 63, -1, 65, -1, 67, 68, 69, -1, 71, -1, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 117, -1, -1, -1, 121, 122, + 123, 124, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 139, -1, -1, -1, + -1, -1, -1, 146, -1, 148, -1, -1, -1, -1, + -1, -1, -1, 156, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 168, -1, -1, -1, -1, + -1, -1, 175, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 185, 186, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 215, -1, -1, -1, -1, -1, -1, -1, + 223, -1, -1, -1, -1, 228, -1, -1, -1, -1, + -1, -1, 235, -1, -1, -1, -1, -1, 241, -1, + 243, -1, -1, -1, -1, -1, -1, 250, -1, 252, + -1, -1, -1, -1, -1, -1, -1, -1, 261, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 276, 277, -1, -1, -1, -1, -1, + 283, -1, 285, -1, -1, 288, 289, -1, 291, -1, + -1, -1, -1, -1, -1, -1, -1, 300, 301, -1, + 303, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 326, 327, 328, -1, -1, -1, -1, + -1, -1, -1, 336, 337, -1, -1, -1, -1, 342, + -1, -1, 345, -1, 347, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 363, 364, -1, 366, 367, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 380, -1, 382, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 397, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 419, -1, -1, -1, + -1, -1, 425, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 444, -1, -1, 447, -1, -1, 450, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 466, -1, -1, -1, -1, -1, -1, + 473, -1, -1, -1, -1, -1, -1, -1, 481, 482, + -1, -1, -1, -1, 487, -1, 489, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 499, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 514, -1, -1, 517, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 6, 7, -1, 9, 10, 11, -1, -1, -1, + 15, -1, -1, 18, 19, 20, 21, 22, 23, -1, + 25, 26, -1, -1, -1, 30, 31, 32, 33, -1, + 35, 36, 37, 38, -1, 40, 41, 42, -1, -1, + -1, -1, -1, 48, 49, -1, -1, -1, -1, 54, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + 65, -1, 67, -1, 69, -1, -1, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 117, -1, -1, -1, 121, 122, 123, 124, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 139, -1, -1, -1, -1, -1, + -1, 146, -1, 148, -1, -1, -1, -1, -1, -1, + -1, 156, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 168, -1, -1, -1, -1, -1, -1, + 175, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 185, 186, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 215, -1, -1, -1, -1, -1, -1, -1, 223, -1, + -1, -1, -1, 228, -1, -1, -1, -1, -1, -1, + 235, -1, -1, -1, -1, -1, 241, -1, 243, -1, + -1, -1, -1, -1, -1, 250, -1, 252, -1, -1, + -1, -1, -1, -1, -1, -1, 261, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 276, 277, -1, -1, -1, -1, -1, 283, -1, + 285, -1, -1, 288, 289, -1, 291, -1, -1, -1, + -1, -1, -1, -1, -1, 300, 301, -1, 303, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 326, 327, 328, -1, -1, -1, -1, -1, -1, + -1, 336, 337, -1, -1, -1, -1, 342, -1, -1, + 345, -1, 347, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, + -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 380, -1, 382, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 397, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 419, -1, -1, -1, -1, -1, + 425, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 444, + -1, -1, 447, -1, -1, 450, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 466, -1, -1, -1, -1, -1, -1, 473, -1, + -1, -1, -1, -1, -1, -1, 481, 482, -1, -1, + -1, -1, 487, -1, 489, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 499, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 514, + -1, -1, 517, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 6, + 7, -1, 9, 10, 11, -1, -1, -1, 15, -1, + -1, 18, 19, 20, 21, 22, 23, -1, 25, 26, + -1, -1, -1, 30, 31, 32, 33, -1, 35, 36, + 37, 38, -1, 40, 41, 42, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 69, -1, -1, -1, 73, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 117, -1, -1, -1, 121, 122, 123, 124, 125, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 139, -1, -1, -1, -1, -1, -1, 146, + -1, 148, -1, -1, -1, -1, -1, -1, -1, 156, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 168, -1, -1, -1, -1, -1, -1, 175, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 185, 186, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 215, -1, + -1, -1, -1, -1, -1, -1, 223, -1, -1, -1, + -1, 228, -1, -1, -1, -1, -1, -1, 235, -1, + -1, -1, -1, -1, 241, -1, 243, -1, -1, -1, + -1, -1, -1, 250, -1, 252, -1, -1, -1, -1, + -1, -1, -1, -1, 261, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 276, + 277, -1, -1, -1, -1, -1, 283, -1, 285, -1, + -1, 288, 289, -1, 291, -1, -1, -1, -1, -1, + -1, -1, -1, 300, 301, -1, 303, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 326, + 327, 328, -1, -1, -1, -1, -1, -1, -1, 336, + 337, -1, -1, -1, -1, 342, -1, -1, 345, -1, + 347, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, -1, 366, + 367, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 380, -1, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 419, -1, -1, -1, -1, -1, 425, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 444, -1, -1, + 447, -1, -1, 450, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 466, + -1, -1, -1, -1, -1, -1, 473, -1, -1, -1, + -1, -1, -1, -1, 481, 482, -1, -1, -1, -1, + 487, -1, 489, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 499, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 514, -1, -1, + 517, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 69, 70, -1, + -1, 73, -1, 75, 76, -1, -1, -1, -1, 81, + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, -1, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 136, 137, -1, 139, 140, -1, + 142, 143, 144, 145, 146, -1, 148, -1, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, -1, 161, + 162, 163, 164, 165, 166, -1, 168, 169, 170, -1, + -1, -1, -1, 175, -1, -1, -1, 179, 180, 181, + 182, -1, 184, 185, 186, 187, -1, 189, -1, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, -1, -1, 205, 206, 207, 208, 209, -1, 211, + 212, 213, -1, 215, 216, 217, -1, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + 232, 233, 234, 235, 236, -1, 238, -1, 240, 241, + -1, 243, 244, 245, 246, 247, -1, 249, 250, -1, + 252, 253, 254, -1, 256, 257, -1, 259, 260, 261, + 262, 263, 264, 265, -1, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, 277, -1, 279, 280, 281, + -1, 283, -1, 285, -1, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, -1, -1, 299, 300, 301, + 302, 303, -1, 305, 306, 307, -1, -1, 310, 311, + 312, 313, 314, 315, 316, 317, 318, -1, 320, 321, + -1, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, -1, + 352, 353, 354, -1, 356, 357, 358, -1, -1, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + 382, 383, 384, 385, -1, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + -1, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, -1, 434, -1, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + -1, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, -1, 469, 470, -1, + 472, 473, 474, 475, 476, 477, 478, -1, 480, 481, + 482, -1, -1, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, 501, + 502, 503, 504, 505, -1, -1, 508, 509, 510, 511, + 512, -1, 514, -1, 516, 517, 518, 519, 520, 521, + -1, -1, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, -1, 545, 546, 69, -1, -1, -1, 73, + -1, -1, -1, -1, -1, -1, 558, 559, 560, -1, + -1, -1, -1, -1, -1, 567, 90, 91, 92, 93, + 94, 95, 96, 97, -1, 99, 100, 101, 102, 103, + -1, -1, -1, -1, -1, 109, 110, 111, -1, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 136, 137, -1, 139, 140, -1, 142, 143, + 144, 145, 146, -1, 148, -1, 150, 151, 152, 153, + 154, 155, 156, 157, 158, -1, -1, 161, 162, 163, + 164, 165, 166, -1, 168, 169, 170, -1, -1, -1, + -1, 175, -1, -1, -1, 179, 180, 181, 182, -1, + 184, 185, 186, 187, -1, 189, -1, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, -1, + -1, 205, 206, 207, 208, 209, -1, 211, 212, 213, + -1, 215, 216, 217, -1, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, -1, 230, -1, 232, 233, + 234, 235, 236, -1, 238, -1, 240, 241, -1, 243, + 244, 245, 246, 247, -1, 249, 250, -1, 252, 253, + 254, -1, 256, 257, -1, 259, 260, 261, 262, 263, + 264, 265, -1, 267, 268, 269, 270, 271, 272, 273, + -1, 275, 276, 277, -1, 279, 280, 281, -1, 283, + -1, 285, -1, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, -1, -1, 299, 300, 301, 302, 303, + -1, 305, 306, 307, -1, -1, 310, 311, 312, 313, + 314, 315, 316, 317, 318, -1, 320, 321, -1, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, -1, 340, 341, 342, 343, + -1, 345, 346, 347, 348, 349, 350, -1, 352, 353, + -1, -1, 356, 357, 358, -1, -1, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, 382, 383, + 384, 385, -1, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, -1, + 434, 435, 436, 437, 438, 439, 440, -1, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, -1, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, -1, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, -1, 480, 481, 482, -1, + -1, 485, 486, 487, 488, 489, -1, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, 501, 502, 503, + 504, 505, -1, -1, 508, 509, 510, 511, 512, 513, + 514, -1, 516, 517, 518, 519, 520, 521, -1, -1, + 524, -1, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + -1, 545, 546, -1, -1, 549, 69, -1, -1, -1, + 73, -1, -1, -1, -1, -1, -1, 80, -1, -1, + 83, -1, -1, 567, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, -1, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, -1, -1, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, -1, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + -1, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, + 233, 234, 235, 236, -1, 238, 239, 240, 241, -1, + 243, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, -1, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, -1, 285, -1, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, -1, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, -1, 320, 321, -1, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, 355, 356, 357, 358, 359, -1, 361, 362, + 363, 364, -1, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + -1, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + -1, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, -1, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, -1, 517, 518, 519, 520, 521, 522, + -1, 524, -1, -1, -1, -1, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, -1, 545, 546, 547, -1, -1, -1, -1, -1, + -1, -1, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 69, 70, -1, -1, 73, -1, 75, 76, -1, + -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, + -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, + -1, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, 109, 110, 111, -1, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, -1, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 136, 137, + -1, 139, 140, -1, 142, 143, 144, 145, 146, -1, + 148, -1, 150, 151, 152, 153, 154, 155, 156, 157, + 158, -1, -1, 161, 162, 163, 164, 165, 166, -1, + 168, 169, 170, -1, -1, -1, -1, 175, -1, -1, + -1, 179, 180, 181, 182, -1, 184, 185, 186, 187, + 188, 189, -1, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, -1, -1, 205, 206, 207, + 208, 209, -1, 211, 212, 213, -1, 215, 216, 217, + -1, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, -1, 232, 233, 234, 235, 236, -1, + 238, -1, 240, 241, -1, 243, 244, 245, 246, 247, + -1, 249, 250, -1, 252, 253, 254, -1, 256, 257, + -1, 259, 260, 261, 262, 263, 264, 265, -1, 267, + 268, 269, 270, 271, 272, 273, -1, 275, 276, 277, + -1, 279, 280, 281, -1, 283, -1, 285, -1, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, 299, 300, 301, 302, 303, -1, 305, 306, 307, + -1, -1, 310, 311, 312, 313, 314, 315, 316, 317, + 318, -1, 320, 321, -1, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, -1, 340, 341, 342, 343, -1, 345, 346, 347, + 348, 349, 350, -1, 352, 353, 354, -1, 356, 357, + 358, -1, -1, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, + 378, 379, 380, 381, 382, 383, 384, 385, -1, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, -1, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, -1, 434, -1, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, -1, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + -1, 469, 470, -1, 472, 473, 474, 475, 476, 477, + 478, -1, 480, 481, 482, -1, -1, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, 501, 502, 503, 504, 505, -1, -1, + 508, 509, 510, 511, 512, -1, 514, -1, 516, 517, + 518, 519, 520, 521, -1, -1, 524, -1, -1, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, -1, 545, 546, -1, + 69, 70, -1, -1, 73, -1, 75, 76, -1, -1, + 558, 559, 81, -1, -1, -1, -1, -1, -1, -1, + -1, 90, 91, 92, 93, 94, 95, 96, 97, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, -1, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, -1, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 136, 137, -1, + 139, 140, -1, 142, 143, 144, 145, 146, -1, 148, + -1, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, -1, 161, 162, 163, 164, 165, 166, -1, 168, + 169, 170, -1, -1, -1, -1, 175, -1, -1, -1, + 179, 180, 181, 182, -1, 184, 185, 186, 187, 188, + 189, -1, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, -1, -1, 205, 206, 207, 208, + 209, -1, 211, 212, 213, -1, 215, 216, 217, -1, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, -1, 232, 233, 234, 235, 236, -1, 238, + -1, 240, 241, -1, 243, 244, 245, 246, 247, -1, + 249, 250, -1, 252, 253, 254, -1, 256, 257, -1, + 259, 260, 261, 262, 263, 264, 265, -1, 267, 268, + 269, 270, 271, 272, 273, -1, 275, 276, 277, -1, + 279, 280, 281, -1, 283, -1, 285, -1, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, + 299, 300, 301, 302, 303, -1, 305, 306, 307, -1, + -1, 310, 311, 312, 313, 314, 315, 316, 317, 318, + -1, 320, 321, -1, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + -1, 340, 341, 342, 343, -1, 345, 346, 347, 348, + 349, 350, -1, 352, 353, 354, -1, 356, 357, 358, + -1, -1, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, 382, 383, 384, 385, -1, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, -1, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, -1, 434, -1, 436, 437, 438, + 439, 440, -1, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, -1, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, -1, + 469, 470, -1, 472, 473, 474, 475, 476, 477, 478, + -1, 480, 481, 482, -1, -1, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, 501, 502, 503, 504, 505, -1, -1, 508, + 509, 510, 511, 512, -1, 514, -1, 516, 517, 518, + 519, 520, 521, -1, -1, 524, -1, -1, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, -1, 545, 546, -1, 69, + 70, -1, -1, 73, -1, 75, 76, -1, -1, 558, + 559, 81, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, -1, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, -1, 175, -1, -1, -1, 179, + 180, 181, 182, -1, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, -1, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + 320, 321, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, 354, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, -1, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, -1, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, -1, 545, 546, -1, 69, 70, + -1, -1, 73, -1, -1, 76, -1, -1, 558, 559, + 81, -1, -1, -1, -1, -1, -1, -1, -1, 90, + 91, 92, 93, 94, 95, 96, 97, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, -1, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, -1, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 136, 137, -1, 139, 140, + -1, 142, 143, 144, 145, 146, -1, 148, -1, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, -1, + 161, 162, 163, 164, 165, 166, -1, 168, 169, 170, + -1, -1, -1, -1, 175, -1, -1, -1, 179, 180, + 181, 182, -1, 184, 185, 186, 187, 188, 189, -1, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, -1, -1, 205, 206, 207, 208, 209, -1, + 211, 212, 213, -1, 215, 216, 217, -1, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -1, 232, 233, 234, 235, 236, -1, 238, -1, 240, + 241, -1, 243, 244, 245, 246, 247, -1, 249, 250, + -1, 252, 253, 254, -1, 256, 257, -1, 259, 260, + 261, 262, 263, 264, 265, -1, 267, 268, 269, 270, + 271, 272, 273, -1, 275, 276, 277, -1, 279, 280, + 281, -1, 283, -1, 285, -1, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, -1, -1, 299, 300, + 301, 302, 303, -1, 305, 306, 307, -1, -1, 310, + 311, 312, 313, 314, 315, 316, 317, 318, -1, 320, + 321, -1, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, -1, 340, + 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, + -1, 352, 353, 354, -1, 356, 357, 358, -1, -1, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, 382, 383, 384, 385, -1, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, -1, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, -1, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, -1, 434, -1, 436, 437, 438, 439, 440, + -1, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, -1, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, -1, 469, 470, + -1, 472, 473, 474, 475, 476, 477, 478, -1, 480, + 481, 482, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + 501, 502, 503, 504, 505, -1, -1, 508, 509, 510, + 511, 512, -1, 514, -1, 516, 517, 518, 519, 520, + 521, -1, -1, 524, -1, -1, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, -1, 545, 546, 69, 70, -1, -1, + 73, -1, -1, 76, -1, -1, -1, 558, 559, -1, + -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, -1, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, -1, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 136, 137, -1, 139, 140, -1, 142, + 143, 144, 145, 146, -1, 148, -1, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, -1, 161, 162, + 163, 164, 165, 166, -1, 168, 169, 170, -1, -1, + -1, 174, 175, -1, -1, 178, 179, 180, 181, 182, + -1, 184, 185, 186, 187, -1, 189, -1, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + -1, -1, 205, 206, 207, 208, 209, -1, 211, 212, + 213, -1, 215, 216, 217, -1, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, -1, 230, -1, 232, + 233, 234, 235, 236, -1, 238, -1, 240, 241, -1, + 243, 244, 245, 246, 247, -1, 249, 250, -1, 252, + 253, 254, -1, 256, 257, -1, 259, 260, 261, 262, + 263, 264, 265, -1, 267, 268, 269, 270, 271, 272, + 273, -1, 275, 276, 277, -1, 279, 280, 281, -1, + 283, -1, 285, -1, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, -1, -1, 299, 300, 301, 302, + 303, -1, 305, 306, 307, -1, -1, 310, 311, 312, + 313, 314, 315, 316, 317, 318, -1, 320, 321, -1, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, -1, 340, 341, 342, + 343, -1, 345, 346, 347, 348, 349, 350, -1, 352, + 353, -1, -1, 356, 357, 358, -1, -1, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, 382, + 383, 384, 385, -1, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, -1, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + -1, 434, -1, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, -1, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, -1, 469, 470, -1, 472, + 473, 474, 475, 476, 477, 478, -1, 480, 481, 482, + 483, -1, 485, 486, 487, 488, 489, -1, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, 501, 502, + 503, 504, 505, -1, -1, 508, 509, 510, 511, 512, + -1, 514, -1, 516, 517, 518, 519, 520, 521, -1, + -1, 524, -1, -1, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, + 543, -1, 545, 546, 69, 70, -1, -1, 73, -1, + -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, -1, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, -1, -1, 174, + 175, -1, -1, 178, 179, 180, 181, 182, -1, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, -1, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, 320, 321, -1, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, -1, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, -1, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 69, + 545, 546, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, -1, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, 174, 175, -1, -1, 178, 179, + 180, 181, 182, -1, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, -1, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + 320, 321, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, -1, 434, -1, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, -1, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 69, 545, 546, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, -1, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, -1, -1, 174, + 175, -1, -1, 178, 179, 180, 181, 182, -1, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, -1, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, 320, 321, -1, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, -1, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, -1, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 69, + 545, 546, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, -1, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, 174, 175, -1, -1, 178, 179, + 180, 181, 182, -1, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, -1, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + 320, 321, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, -1, 434, -1, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, 506, -1, 508, 509, + 510, 511, 512, -1, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 69, 545, 546, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, -1, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, -1, -1, 174, + 175, -1, -1, 178, 179, 180, 181, 182, -1, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, 251, 252, 253, 254, + -1, 256, 257, -1, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, 320, 321, -1, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, -1, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, -1, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 69, + 545, 546, -1, 73, -1, -1, 76, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, -1, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, -1, 175, -1, -1, -1, 179, + 180, 181, 182, -1, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, -1, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + 320, 321, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, 354, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, -1, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, -1, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 69, 545, 546, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, -1, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, -1, -1, 174, + 175, -1, -1, 178, 179, 180, 181, 182, -1, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, -1, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, 320, 321, -1, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, -1, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, -1, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 69, + 545, 546, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, -1, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, 174, 175, -1, -1, 178, 179, + 180, 181, 182, -1, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, -1, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + 320, 321, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, -1, 434, -1, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, -1, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 69, 545, 546, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, -1, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, -1, -1, 174, + 175, -1, -1, 178, 179, 180, 181, 182, -1, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, -1, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, 320, 321, -1, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, -1, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, -1, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 69, + 545, 546, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, -1, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, 174, 175, -1, -1, 178, 179, + 180, 181, 182, -1, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, -1, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + 320, 321, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, -1, 434, -1, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, -1, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 69, 545, 546, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, -1, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, -1, -1, 174, + 175, -1, -1, 178, 179, 180, 181, 182, -1, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, -1, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, 320, 321, -1, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, -1, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, -1, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 69, + 545, 546, -1, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, 102, 103, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, -1, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, -1, 175, -1, -1, -1, 179, + 180, 181, 182, -1, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, -1, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + 320, 321, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, -1, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, -1, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 69, 545, 546, -1, 73, -1, + -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, -1, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, -1, -1, -1, + 175, -1, -1, -1, 179, 180, 181, 182, -1, 184, + 185, 186, 187, 188, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, -1, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, 320, 321, -1, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, -1, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, -1, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 69, + 545, 546, -1, 73, -1, -1, 76, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, -1, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, 109, + 110, 111, -1, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 136, 137, -1, 139, + 140, -1, 142, 143, 144, 145, 146, -1, 148, -1, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + -1, 161, 162, 163, 164, 165, 166, -1, 168, 169, + 170, -1, -1, -1, -1, 175, -1, -1, -1, 179, + 180, 181, 182, -1, 184, 185, 186, 187, -1, 189, + -1, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, -1, -1, 205, 206, 207, 208, 209, + -1, 211, 212, 213, -1, 215, 216, 217, -1, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, -1, + 230, -1, 232, 233, 234, 235, 236, -1, 238, -1, + 240, 241, -1, 243, 244, 245, 246, 247, -1, 249, + 250, -1, 252, 253, 254, -1, 256, 257, -1, 259, + 260, 261, 262, 263, 264, 265, -1, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, -1, 279, + 280, 281, -1, 283, -1, 285, -1, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, -1, 299, + 300, 301, 302, 303, -1, 305, 306, 307, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + 320, 321, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, -1, 352, 353, -1, -1, 356, 357, 358, -1, + -1, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 380, 381, 382, 383, 384, 385, -1, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, -1, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, -1, 434, -1, 436, 437, 438, 439, + 440, -1, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, -1, 469, + 470, -1, 472, 473, 474, 475, 476, 477, 478, -1, + 480, 481, 482, -1, -1, 485, 486, 487, 488, 489, + -1, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, 501, 502, 503, 504, 505, -1, -1, 508, 509, + 510, 511, 512, -1, 514, -1, 516, 517, 518, 519, + 520, 521, -1, -1, 524, -1, -1, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 69, 545, 546, -1, 73, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, -1, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, -1, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 136, 137, -1, 139, 140, -1, 142, 143, 144, + 145, 146, -1, 148, -1, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, -1, 161, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, -1, -1, -1, + 175, -1, -1, -1, 179, 180, 181, 182, -1, 184, + 185, 186, 187, -1, 189, -1, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, -1, -1, + 205, 206, 207, 208, 209, -1, 211, 212, 213, -1, + 215, 216, 217, -1, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, -1, 230, -1, 232, 233, 234, + 235, 236, -1, 238, -1, 240, 241, -1, 243, 244, + 245, 246, 247, -1, 249, 250, -1, 252, 253, 254, + -1, 256, 257, -1, 259, 260, 261, 262, 263, 264, + 265, -1, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, -1, 279, 280, 281, -1, 283, -1, + 285, -1, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, -1, 299, 300, 301, 302, 303, -1, + 305, 306, 307, -1, -1, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, 320, 321, -1, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, -1, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, -1, 352, 353, -1, + -1, 356, 357, 358, -1, -1, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, 382, 383, 384, + 385, -1, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, -1, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, -1, 434, + -1, 436, 437, 438, 439, 440, -1, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, -1, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, -1, 469, 470, -1, 472, 473, 474, + 475, 476, 477, 478, -1, 480, 481, 482, -1, -1, + 485, 486, 487, 488, 489, -1, 491, 492, 493, 494, + 495, 496, 497, 498, -1, -1, 501, 502, 503, 504, + 505, -1, -1, 508, 509, 510, 511, 512, -1, 514, + -1, 516, 517, 518, 519, 520, 521, -1, -1, 524, + -1, -1, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, -1, + 545, 546 +}; + + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_int16 yystos[] = +{ + 0, 576, 1239, 0, 5, 24, 34, 35, 39, 41, + 42, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 71, 73, 75, 76, + 81, 138, 215, 235, 258, 282, 319, 322, 344, 433, + 483, 499, 514, 544, 557, 558, 559, 560, 561, 562, + 565, 566, 567, 568, 570, 571, 572, 573, 574, 1227, + 1240, 1270, 1272, 1363, 1373, 1374, 1376, 1382, 1383, 1271, + 3, 6, 7, 8, 9, 10, 11, 12, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, + 27, 30, 31, 32, 33, 35, 36, 37, 38, 40, + 41, 42, 43, 44, 48, 49, 54, 63, 65, 67, + 68, 90, 100, 102, 103, 114, 117, 120, 121, 122, + 123, 124, 125, 130, 139, 142, 144, 145, 146, 148, + 151, 153, 156, 165, 167, 168, 175, 182, 184, 185, + 186, 187, 202, 204, 208, 214, 215, 222, 223, 224, + 228, 231, 235, 241, 243, 248, 250, 252, 261, 265, + 276, 277, 283, 285, 288, 289, 291, 300, 301, 303, + 305, 306, 311, 323, 326, 327, 328, 336, 337, 341, + 342, 345, 347, 363, 364, 366, 367, 380, 382, 384, + 397, 398, 404, 405, 407, 412, 418, 419, 421, 425, + 428, 434, 435, 442, 444, 446, 447, 450, 456, 466, + 471, 473, 481, 482, 487, 489, 491, 493, 499, 502, + 508, 513, 514, 517, 526, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 549, 567, 577, 578, + 579, 580, 586, 587, 589, 590, 591, 592, 594, 598, + 610, 615, 616, 619, 620, 621, 640, 643, 644, 659, + 705, 708, 711, 714, 715, 716, 724, 731, 733, 734, + 737, 740, 741, 745, 754, 758, 759, 760, 763, 765, + 766, 767, 768, 776, 778, 798, 802, 804, 805, 815, + 817, 824, 825, 828, 829, 830, 831, 832, 841, 843, + 845, 848, 852, 853, 861, 862, 865, 870, 884, 916, + 919, 920, 921, 926, 929, 931, 933, 935, 936, 939, + 940, 943, 945, 946, 950, 951, 952, 955, 956, 957, + 958, 959, 966, 968, 969, 970, 971, 977, 979, 980, + 986, 987, 988, 991, 992, 993, 994, 996, 997, 999, + 1000, 1002, 1003, 1005, 1017, 1019, 1022, 1024, 1033, 1035, + 1040, 1045, 1049, 1050, 1051, 1052, 1053, 1054, 1060, 1095, + 1235, 1236, 1241, 1244, 1245, 1262, 1263, 1264, 1265, 1266, + 1277, 1279, 1283, 1284, 1285, 1286, 1287, 1289, 1291, 1293, + 1294, 1295, 1296, 1298, 1303, 1304, 1308, 1309, 1318, 1320, + 1321, 1322, 1325, 1330, 1333, 1338, 1340, 1341, 1344, 1346, + 1349, 1358, 1376, 1384, 71, 1266, 1274, 1275, 13, 70, + 90, 91, 92, 93, 94, 95, 96, 97, 99, 100, + 101, 109, 110, 111, 113, 114, 115, 116, 118, 119, + 120, 127, 128, 129, 130, 131, 132, 133, 136, 137, + 140, 142, 143, 144, 145, 150, 151, 152, 153, 154, + 155, 157, 158, 161, 162, 163, 164, 165, 166, 169, + 170, 174, 178, 179, 180, 181, 182, 184, 187, 189, + 191, 192, 193, 194, 195, 196, 197, 199, 200, 201, + 202, 205, 206, 207, 208, 209, 211, 212, 213, 215, + 216, 217, 219, 220, 221, 222, 224, 225, 226, 227, + 230, 232, 233, 234, 236, 238, 240, 244, 245, 246, + 247, 249, 253, 254, 256, 257, 259, 260, 262, 263, + 264, 265, 267, 268, 269, 270, 271, 272, 273, 275, + 279, 280, 281, 287, 290, 292, 293, 294, 295, 296, + 299, 302, 305, 306, 307, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 320, 321, 323, 324, 325, 329, + 330, 331, 332, 333, 334, 335, 338, 340, 341, 343, + 346, 348, 349, 350, 352, 353, 356, 357, 358, 361, + 362, 365, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 378, 379, 381, 383, 384, 385, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 398, 399, 400, + 401, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 417, 418, 420, 421, 422, 423, + 424, 426, 427, 428, 429, 430, 431, 432, 434, 436, + 437, 438, 439, 440, 441, 442, 443, 445, 446, 448, + 449, 451, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 467, 469, 470, 472, 474, + 475, 476, 477, 478, 480, 483, 485, 486, 488, 491, + 492, 493, 494, 495, 496, 497, 498, 501, 502, 503, + 504, 505, 508, 509, 510, 511, 512, 516, 518, 519, + 520, 521, 524, 527, 528, 529, 530, 531, 532, 545, + 546, 1229, 1230, 1232, 1234, 1235, 1236, 1255, 1256, 1368, + 1370, 1374, 1376, 28, 278, 1319, 8, 12, 14, 27, + 43, 44, 48, 49, 54, 63, 65, 67, 68, 98, + 138, 159, 171, 183, 188, 258, 319, 322, 433, 513, + 544, 1222, 1234, 1235, 1257, 1305, 1306, 1348, 1349, 1350, + 1354, 1359, 1360, 1361, 1370, 1376, 98, 1046, 1222, 1257, + 1367, 13, 1046, 5, 24, 28, 34, 35, 41, 42, + 98, 102, 103, 104, 105, 106, 107, 108, 112, 126, + 134, 135, 138, 141, 147, 149, 159, 160, 167, 171, + 172, 173, 174, 176, 177, 178, 188, 190, 198, 203, + 204, 210, 214, 218, 229, 231, 237, 239, 242, 248, + 251, 255, 266, 274, 278, 282, 284, 286, 297, 298, + 304, 308, 309, 339, 344, 351, 354, 355, 359, 360, + 377, 386, 402, 416, 435, 441, 452, 468, 471, 479, + 483, 484, 490, 499, 500, 506, 507, 513, 515, 522, + 523, 525, 526, 1234, 1237, 1350, 1351, 1352, 1356, 1357, + 1358, 1359, 1361, 24, 34, 138, 282, 1345, 36, 38, + 339, 1278, 485, 529, 972, 97, 148, 164, 182, 188, + 206, 217, 226, 239, 244, 251, 270, 295, 316, 356, + 379, 389, 390, 393, 420, 423, 427, 429, 436, 439, + 458, 465, 470, 471, 474, 478, 488, 493, 506, 519, + 730, 1306, 187, 972, 1155, 1225, 1236, 1348, 1351, 1354, + 1355, 1359, 1360, 1376, 98, 1046, 517, 567, 1010, 354, + 385, 972, 123, 567, 651, 92, 110, 135, 148, 182, + 188, 206, 217, 226, 239, 247, 251, 307, 356, 359, + 379, 393, 420, 429, 439, 458, 465, 474, 475, 477, + 478, 493, 500, 503, 506, 660, 713, 820, 871, 885, + 1222, 1246, 1247, 1248, 1257, 1374, 1376, 13, 98, 384, + 1222, 1257, 1261, 457, 1046, 1222, 1257, 1261, 98, 378, + 437, 475, 477, 294, 927, 928, 1374, 92, 97, 135, + 148, 164, 182, 206, 217, 226, 239, 244, 251, 270, + 316, 356, 369, 379, 390, 393, 420, 423, 427, 429, + 436, 439, 458, 465, 471, 474, 478, 486, 488, 493, + 506, 519, 730, 833, 835, 836, 972, 573, 1288, 1352, + 262, 1261, 167, 187, 222, 517, 567, 711, 714, 1005, + 1018, 1022, 1024, 1033, 1040, 1045, 1049, 1241, 91, 98, + 118, 234, 240, 242, 266, 296, 330, 387, 406, 558, + 559, 849, 850, 1046, 1227, 1228, 1368, 1370, 98, 167, + 402, 435, 854, 855, 856, 1354, 239, 1354, 1224, 1374, + 471, 1063, 118, 240, 849, 1354, 485, 1261, 369, 316, + 182, 270, 429, 470, 471, 567, 937, 938, 428, 1354, + 98, 138, 440, 481, 485, 513, 602, 611, 612, 1234, + 1235, 1348, 1353, 1359, 1361, 1376, 95, 248, 854, 855, + 385, 972, 1354, 293, 98, 203, 1065, 1066, 4, 13, + 136, 159, 161, 307, 325, 420, 429, 440, 481, 485, + 532, 599, 600, 601, 602, 98, 440, 481, 485, 602, + 485, 355, 1107, 1220, 1354, 1063, 1342, 1352, 560, 1354, + 243, 567, 1011, 567, 400, 1055, 1056, 1222, 1055, 1050, + 1051, 1054, 571, 567, 1010, 218, 284, 360, 499, 1067, + 1068, 1050, 1052, 1053, 193, 280, 505, 570, 120, 577, + 1286, 1289, 1285, 1281, 571, 1290, 1292, 5, 24, 34, + 138, 207, 282, 1297, 183, 258, 319, 322, 433, 544, + 567, 1150, 1151, 1269, 1273, 1363, 71, 1266, 1222, 1257, + 1377, 188, 1246, 20, 507, 561, 1261, 1261, 1377, 507, + 1310, 1311, 1312, 24, 282, 282, 1356, 18, 19, 37, + 40, 130, 163, 204, 1347, 1347, 15, 1286, 104, 976, + 901, 1225, 838, 1354, 838, 1222, 388, 838, 488, 1222, + 181, 471, 889, 1225, 1236, 1354, 1229, 1230, 98, 260, + 1220, 348, 519, 80, 87, 88, 89, 143, 230, 555, + 556, 557, 558, 559, 560, 561, 562, 563, 923, 925, + 1185, 1186, 1354, 260, 1222, 889, 1222, 98, 1229, 1230, + 889, 1222, 1222, 260, 1220, 1222, 260, 838, 1222, 412, + 442, 98, 260, 1107, 1222, 432, 1222, 838, 98, 314, + 1229, 1230, 260, 1220, 294, 33, 190, 290, 339, 396, + 973, 974, 975, 567, 565, 569, 1211, 1213, 1004, 1005, + 1006, 1007, 1232, 1220, 1222, 1354, 97, 135, 149, 160, + 182, 206, 244, 270, 295, 356, 390, 420, 423, 465, + 474, 486, 493, 833, 834, 835, 836, 1374, 976, 1021, + 1024, 1033, 1040, 1049, 1220, 318, 838, 567, 260, 838, + 1222, 838, 488, 260, 1222, 181, 471, 475, 477, 1229, + 475, 477, 143, 230, 923, 410, 1222, 1222, 1229, 260, + 595, 1354, 260, 1222, 260, 838, 1222, 1222, 432, 838, + 314, 1229, 400, 436, 471, 519, 316, 164, 270, 97, + 160, 244, 390, 427, 486, 488, 492, 725, 80, 1249, + 1250, 572, 1370, 1377, 98, 1261, 1376, 1047, 457, 609, + 1232, 1374, 928, 318, 260, 901, 902, 260, 932, 260, + 1222, 122, 124, 125, 138, 139, 185, 186, 207, 235, + 260, 282, 283, 285, 326, 328, 347, 397, 444, 450, + 481, 482, 514, 840, 1129, 1131, 1133, 1135, 1137, 1139, + 1140, 1141, 1143, 1144, 1145, 1147, 1148, 1348, 1355, 1359, + 1360, 1376, 488, 181, 471, 260, 888, 889, 260, 1230, + 1231, 156, 519, 143, 230, 260, 924, 925, 128, 260, + 888, 260, 1231, 260, 888, 260, 1222, 260, 1222, 432, + 932, 260, 840, 260, 314, 1231, 294, 260, 837, 838, + 260, 1221, 1222, 260, 1222, 976, 567, 573, 1378, 1379, + 1380, 1381, 1383, 1288, 69, 1257, 1307, 567, 1023, 660, + 1046, 1018, 1004, 1010, 1228, 850, 851, 98, 850, 1046, + 1228, 851, 98, 850, 1046, 1228, 851, 851, 851, 1228, + 1227, 1227, 286, 507, 1312, 1313, 1387, 1389, 1046, 851, + 388, 567, 567, 682, 682, 682, 354, 483, 570, 682, + 429, 1107, 1108, 850, 1046, 850, 1046, 570, 967, 1374, + 242, 567, 1020, 128, 519, 1004, 156, 872, 872, 1354, + 117, 546, 290, 569, 357, 357, 354, 242, 1374, 483, + 976, 237, 846, 354, 78, 79, 80, 82, 106, 122, + 124, 125, 134, 135, 138, 139, 146, 148, 172, 173, + 174, 175, 176, 177, 178, 185, 186, 188, 223, 228, + 229, 235, 250, 252, 283, 285, 300, 308, 309, 326, + 328, 337, 339, 344, 345, 347, 356, 367, 380, 397, + 425, 441, 450, 466, 481, 482, 487, 489, 490, 500, + 506, 514, 534, 535, 536, 537, 539, 540, 541, 542, + 547, 558, 559, 560, 567, 1050, 1132, 1135, 1138, 1139, + 1140, 1142, 1143, 1144, 1147, 1148, 1152, 1154, 1155, 1156, + 1158, 1181, 1182, 1183, 1187, 1205, 1210, 1217, 1218, 1225, + 1226, 1227, 1354, 1366, 1368, 1370, 1371, 1372, 1373, 1374, + 1375, 1216, 1217, 483, 557, 1377, 1374, 483, 557, 1306, + 98, 617, 1219, 1220, 440, 599, 188, 608, 1374, 609, + 1374, 117, 140, 599, 546, 451, 974, 357, 242, 483, + 557, 117, 546, 290, 1387, 975, 567, 1220, 560, 1213, + 1108, 1358, 1004, 241, 1012, 1152, 1190, 1055, 570, 567, + 1013, 568, 568, 1004, 1014, 1015, 1016, 1220, 98, 203, + 1064, 1064, 128, 1064, 231, 237, 304, 351, 1071, 1073, + 1074, 1089, 1091, 1092, 1093, 1067, 1068, 242, 286, 1107, + 1109, 567, 571, 1280, 560, 1299, 1300, 1302, 573, 573, + 24, 282, 282, 483, 483, 483, 483, 567, 483, 558, + 559, 722, 1228, 1267, 1373, 214, 107, 1253, 128, 1256, + 1256, 286, 1312, 1314, 286, 1312, 1313, 1314, 512, 1323, + 1324, 1370, 13, 453, 558, 559, 1227, 1315, 1316, 1317, + 1366, 1368, 1372, 1373, 1374, 1375, 282, 288, 483, 1222, + 1222, 6, 163, 1222, 1347, 1302, 137, 335, 370, 408, + 442, 567, 899, 370, 404, 408, 442, 569, 839, 370, + 408, 442, 159, 212, 310, 370, 408, 442, 474, 476, + 526, 610, 613, 981, 982, 983, 984, 1376, 866, 94, + 208, 370, 408, 442, 510, 626, 1222, 94, 208, 442, + 505, 593, 530, 260, 1107, 131, 166, 227, 263, 299, + 335, 339, 370, 371, 408, 417, 426, 434, 442, 454, + 463, 467, 521, 610, 614, 905, 917, 944, 567, 886, + 1213, 408, 593, 266, 223, 94, 100, 115, 145, 201, + 208, 211, 238, 272, 335, 339, 349, 358, 370, 408, + 411, 412, 442, 510, 622, 624, 625, 748, 944, 722, + 98, 260, 1220, 838, 838, 567, 922, 370, 442, 569, + 223, 354, 370, 408, 442, 917, 944, 94, 208, 370, + 408, 442, 266, 588, 408, 526, 549, 581, 588, 370, + 408, 442, 917, 944, 354, 370, 408, 223, 107, 129, + 180, 269, 317, 320, 335, 369, 408, 413, 436, 442, + 456, 622, 719, 720, 370, 408, 518, 748, 756, 223, + 370, 408, 442, 94, 159, 201, 208, 211, 370, 404, + 408, 442, 612, 600, 602, 266, 223, 115, 199, 335, + 408, 442, 622, 623, 370, 408, 412, 442, 157, 200, + 372, 476, 354, 94, 100, 208, 370, 408, 442, 641, + 642, 588, 237, 408, 581, 588, 223, 408, 442, 622, + 1222, 571, 302, 190, 355, 531, 570, 973, 98, 203, + 515, 560, 568, 894, 1152, 1191, 1192, 1355, 1152, 1212, + 560, 1223, 1356, 1211, 568, 570, 229, 354, 490, 606, + 609, 722, 1008, 507, 1001, 354, 901, 567, 838, 1222, + 1129, 889, 348, 143, 230, 925, 889, 889, 237, 1129, + 838, 1222, 1222, 568, 682, 1222, 141, 1129, 339, 242, + 567, 806, 581, 107, 995, 1222, 339, 581, 530, 260, + 1220, 581, 838, 838, 806, 503, 660, 354, 237, 953, + 954, 581, 339, 117, 596, 339, 493, 755, 339, 1013, + 159, 370, 732, 157, 200, 372, 476, 107, 806, 237, + 260, 581, 519, 260, 1220, 260, 709, 1220, 1220, 519, + 838, 872, 1225, 488, 1225, 1225, 1222, 237, 1222, 730, + 72, 1251, 1354, 572, 1252, 1249, 109, 123, 179, 279, + 335, 431, 223, 132, 414, 570, 627, 223, 567, 223, + 581, 516, 1146, 1146, 1146, 567, 1134, 1134, 382, 567, + 1136, 223, 138, 139, 1146, 1134, 1131, 528, 549, 567, + 1149, 567, 1149, 570, 627, 106, 1130, 567, 183, 322, + 544, 567, 1150, 839, 1134, 530, 223, 570, 627, 223, + 570, 260, 837, 260, 838, 260, 838, 223, 570, 627, + 1231, 223, 627, 223, 223, 627, 223, 627, 223, 157, + 200, 372, 476, 237, 223, 627, 223, 237, 260, 223, + 570, 627, 223, 570, 627, 223, 354, 568, 1379, 1380, + 1378, 570, 574, 1190, 1311, 1386, 1387, 471, 1047, 568, + 1018, 851, 1046, 851, 1046, 1389, 1390, 851, 1046, 851, + 1046, 1390, 851, 1046, 1046, 1046, 851, 13, 453, 1362, + 1365, 1370, 1046, 567, 683, 684, 1354, 683, 98, 182, + 206, 239, 244, 294, 295, 390, 423, 429, 436, 471, + 474, 493, 857, 1219, 1231, 856, 1222, 266, 570, 1036, + 1046, 1046, 1374, 1307, 1129, 1194, 107, 1231, 872, 568, + 1220, 1222, 302, 1354, 237, 237, 857, 1231, 428, 1354, + 609, 354, 567, 565, 1050, 1195, 1152, 1209, 567, 567, + 237, 567, 567, 1050, 567, 567, 567, 567, 567, 567, + 567, 1152, 567, 567, 567, 567, 567, 567, 567, 567, + 1050, 567, 567, 567, 567, 567, 567, 567, 567, 1152, + 1152, 1152, 513, 1050, 1152, 1190, 1213, 1374, 567, 1374, + 80, 83, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 233, 234, 235, 236, 238, 239, 240, 241, 243, 244, + 245, 246, 247, 249, 250, 252, 253, 254, 256, 257, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 285, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 320, 321, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 352, 353, 355, + 356, 357, 358, 359, 361, 362, 363, 364, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 517, 518, 519, 520, 521, 522, 524, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 545, 546, 547, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 1185, 1187, 1189, 1233, + 1238, 1376, 527, 1168, 366, 1152, 286, 570, 1061, 1387, + 567, 1374, 1213, 21, 1369, 1370, 1214, 1061, 350, 354, + 1339, 1339, 9, 512, 1326, 1327, 1329, 1306, 1306, 191, + 262, 618, 570, 140, 188, 609, 107, 188, 307, 607, + 722, 1148, 1374, 1376, 1374, 162, 205, 1164, 171, 188, + 603, 604, 606, 722, 188, 603, 1387, 1387, 302, 1220, + 163, 413, 842, 288, 568, 1010, 104, 114, 121, 147, + 261, 266, 288, 303, 356, 359, 447, 568, 570, 1056, + 1221, 107, 568, 570, 1013, 1052, 1052, 1069, 1070, 1152, + 1052, 234, 330, 1080, 292, 335, 396, 445, 505, 98, + 1075, 1152, 558, 559, 1076, 1077, 1152, 1154, 1089, 1090, + 1074, 1073, 1071, 1072, 237, 1092, 349, 1094, 1071, 1089, + 1109, 1025, 1220, 107, 1354, 442, 1190, 1299, 560, 570, + 571, 1357, 1276, 1279, 1276, 282, 183, 258, 319, 1151, + 319, 1151, 1151, 322, 1227, 319, 322, 433, 1373, 1373, + 570, 1268, 187, 1306, 506, 1254, 1256, 1222, 453, 1227, + 1328, 1370, 570, 557, 1222, 13, 1227, 1373, 1227, 1373, + 570, 1286, 1222, 567, 567, 1358, 137, 483, 483, 429, + 266, 277, 360, 363, 444, 515, 560, 892, 893, 894, + 896, 898, 900, 1129, 1355, 483, 518, 483, 429, 1223, + 569, 483, 483, 429, 304, 483, 483, 474, 599, 370, + 981, 983, 557, 985, 237, 248, 266, 418, 867, 868, + 141, 160, 219, 239, 386, 500, 679, 680, 160, 188, + 339, 483, 160, 483, 188, 339, 429, 160, 201, 211, + 370, 408, 803, 429, 738, 97, 135, 206, 244, 356, + 390, 423, 486, 493, 833, 834, 1222, 223, 408, 442, + 622, 354, 722, 434, 299, 483, 1354, 483, 344, 722, + 192, 287, 429, 440, 485, 601, 838, 414, 442, 905, + 918, 196, 568, 887, 892, 483, 506, 474, 1220, 149, + 219, 260, 667, 679, 1354, 149, 160, 941, 374, 354, + 425, 427, 488, 160, 941, 101, 411, 425, 427, 488, + 425, 1220, 238, 272, 349, 838, 567, 483, 483, 259, + 567, 631, 313, 474, 503, 528, 631, 160, 570, 196, + 370, 266, 223, 408, 442, 622, 944, 507, 507, 336, + 1129, 483, 429, 567, 923, 1222, 1220, 483, 483, 429, + 918, 196, 471, 471, 483, 483, 471, 806, 182, 442, + 613, 483, 583, 613, 483, 483, 429, 918, 196, 1220, + 483, 483, 1220, 1131, 722, 128, 721, 722, 722, 180, + 317, 320, 128, 483, 581, 324, 429, 581, 335, 720, + 483, 483, 344, 1374, 748, 838, 483, 483, 429, 458, + 393, 1374, 393, 483, 393, 483, 393, 806, 474, 1107, + 374, 374, 160, 483, 941, 429, 483, 483, 631, 631, + 838, 838, 838, 838, 1220, 116, 512, 116, 116, 483, + 116, 483, 512, 429, 567, 570, 613, 506, 764, 1230, + 483, 583, 613, 1220, 483, 941, 429, 370, 408, 396, + 409, 438, 605, 973, 1191, 1191, 1192, 568, 85, 86, + 570, 1067, 1068, 566, 572, 1220, 1006, 1222, 1220, 288, + 1129, 288, 354, 288, 288, 722, 838, 838, 288, 288, + 288, 1129, 288, 288, 288, 354, 483, 242, 483, 645, + 493, 567, 107, 223, 838, 807, 808, 1356, 981, 1129, + 354, 223, 735, 1222, 339, 374, 567, 582, 820, 507, + 400, 519, 1220, 98, 471, 526, 913, 582, 223, 1230, + 167, 248, 597, 659, 715, 778, 852, 870, 977, 223, + 1374, 756, 757, 223, 354, 1374, 1230, 310, 838, 838, + 838, 838, 215, 395, 567, 764, 339, 582, 1220, 339, + 717, 719, 339, 107, 349, 374, 567, 682, 682, 260, + 712, 1220, 237, 260, 873, 1222, 567, 810, 899, 1222, + 567, 890, 890, 107, 1129, 96, 119, 281, 779, 294, + 569, 1227, 1252, 526, 528, 1048, 431, 902, 901, 1129, + 1222, 567, 567, 1190, 1227, 840, 1146, 1146, 106, 1130, + 481, 481, 1227, 1227, 1129, 565, 565, 1227, 483, 483, + 1227, 1134, 888, 889, 1231, 1230, 223, 627, 223, 507, + 223, 507, 924, 925, 627, 888, 1231, 888, 1222, 1222, + 1129, 840, 1231, 764, 223, 837, 838, 1221, 1222, 1222, + 838, 568, 574, 1381, 568, 1387, 1388, 1311, 260, 1220, + 179, 1018, 1046, 1046, 1390, 1046, 1046, 1390, 1046, 1046, + 1222, 13, 570, 1369, 683, 568, 570, 568, 245, 391, + 424, 437, 472, 1221, 837, 181, 439, 888, 1221, 348, + 888, 888, 1221, 1219, 1219, 1221, 837, 483, 526, 863, + 218, 304, 761, 762, 92, 221, 425, 445, 1037, 1107, + 343, 1038, 568, 570, 1021, 483, 1220, 937, 938, 855, + 854, 855, 242, 249, 864, 1354, 97, 149, 206, 244, + 295, 390, 423, 493, 833, 834, 1190, 566, 1190, 1195, + 1196, 522, 1206, 1207, 1152, 1190, 567, 1227, 1227, 183, + 258, 319, 322, 433, 544, 1197, 1198, 1374, 1376, 1190, + 1190, 1190, 1227, 1227, 1152, 1152, 923, 1152, 1191, 1193, + 1200, 425, 558, 559, 567, 1153, 1154, 1187, 1201, 568, + 1190, 1152, 1193, 1202, 1152, 126, 242, 298, 484, 1152, + 1190, 1203, 1190, 324, 1154, 1152, 1162, 1163, 1164, 324, + 1152, 1164, 568, 570, 1227, 1150, 1129, 1152, 1152, 1152, + 1152, 1356, 481, 112, 468, 1215, 838, 1152, 567, 1050, + 1204, 203, 205, 229, 331, 332, 333, 334, 338, 339, + 344, 490, 501, 1199, 1152, 567, 1152, 483, 121, 261, + 266, 303, 447, 1152, 1152, 1152, 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 98, 105, 452, 1184, 251, 232, 1169, + 425, 567, 1181, 247, 307, 471, 475, 477, 503, 1062, + 1220, 1218, 242, 1096, 1191, 1222, 1370, 1211, 1096, 1328, + 570, 557, 1220, 485, 567, 1374, 570, 1387, 568, 259, + 259, 627, 1286, 1016, 1005, 1009, 1152, 568, 316, 339, + 1057, 1016, 1014, 570, 108, 198, 507, 882, 425, 426, + 558, 559, 1077, 1079, 1154, 445, 292, 355, 570, 1078, + 1227, 1373, 1078, 425, 426, 1079, 1219, 343, 449, 1039, + 1090, 1072, 507, 1034, 188, 368, 567, 1026, 1049, 107, + 1354, 567, 1041, 1042, 1043, 1354, 568, 571, 1300, 1130, + 574, 1279, 574, 568, 722, 568, 33, 1255, 1331, 1332, + 1370, 1324, 1329, 1377, 1315, 1130, 1364, 1380, 1364, 1130, + 1230, 1222, 1222, 363, 128, 1355, 568, 894, 896, 893, + 896, 1355, 360, 568, 570, 839, 1230, 1222, 1222, 1223, + 1230, 1222, 1222, 1230, 1222, 1222, 188, 606, 1228, 420, + 506, 854, 429, 248, 854, 567, 1222, 507, 874, 292, + 292, 507, 567, 704, 260, 1222, 344, 1230, 1222, 1222, + 1152, 344, 1222, 1222, 101, 411, 483, 483, 1222, 483, + 739, 901, 567, 1129, 889, 143, 230, 925, 889, 889, + 237, 1129, 838, 1222, 254, 335, 370, 408, 511, 742, + 743, 744, 1107, 483, 941, 429, 344, 192, 287, 1230, + 1222, 354, 1222, 354, 568, 570, 1229, 1231, 1222, 408, + 622, 260, 667, 339, 1129, 1222, 1227, 1354, 1220, 1222, + 302, 1222, 98, 506, 1222, 260, 1222, 260, 1354, 427, + 488, 427, 488, 302, 1222, 98, 506, 1222, 302, 425, + 1220, 94, 208, 442, 749, 750, 751, 752, 1356, 1230, + 1222, 188, 243, 340, 507, 630, 633, 634, 1356, 1222, + 145, 352, 1222, 625, 354, 483, 474, 1220, 483, 941, + 429, 196, 1222, 1222, 570, 568, 570, 1230, 1222, 947, + 948, 1356, 354, 408, 483, 772, 1230, 1222, 1222, 354, + 1108, 1108, 1230, 1222, 1108, 1222, 1229, 159, 213, 272, + 376, 498, 506, 509, 584, 1376, 1230, 1222, 1222, 354, + 408, 1230, 1222, 408, 442, 622, 719, 722, 838, 1222, + 722, 838, 1222, 722, 1230, 1222, 442, 1230, 1222, 1222, + 1228, 1221, 1221, 1230, 913, 1222, 1221, 1222, 408, 442, + 622, 623, 1220, 1220, 1222, 1222, 1222, 1222, 1230, 1222, + 94, 100, 208, 370, 408, 442, 370, 408, 442, 806, + 408, 442, 408, 442, 408, 944, 1121, 1354, 260, 816, + 1354, 260, 1354, 1230, 1222, 1222, 1374, 1222, 947, 94, + 642, 439, 1229, 408, 442, 622, 1222, 1222, 1222, 483, + 483, 154, 497, 396, 570, 1067, 1067, 1067, 1152, 1152, + 515, 1192, 568, 1152, 1212, 1001, 344, 844, 1374, 107, + 844, 206, 838, 844, 844, 288, 507, 507, 844, 844, + 844, 294, 844, 844, 844, 838, 392, 646, 646, 270, + 471, 777, 1152, 1129, 838, 568, 570, 557, 671, 1356, + 1222, 132, 242, 429, 518, 736, 743, 744, 223, 349, + 303, 661, 663, 665, 667, 676, 679, 95, 266, 420, + 469, 584, 585, 237, 1222, 519, 1220, 107, 773, 472, + 1108, 806, 595, 1354, 596, 660, 885, 1222, 239, 838, + 567, 706, 707, 1155, 1157, 1158, 1354, 393, 1374, 806, + 806, 806, 806, 567, 806, 1119, 1120, 1121, 439, 223, + 567, 223, 223, 222, 1242, 838, 349, 661, 1354, 507, + 699, 526, 632, 339, 107, 682, 1374, 339, 354, 811, + 812, 1376, 806, 96, 568, 891, 892, 897, 107, 294, + 417, 486, 525, 903, 904, 905, 906, 903, 354, 294, + 349, 193, 280, 491, 505, 780, 781, 1222, 1251, 561, + 257, 257, 237, 627, 107, 581, 238, 989, 990, 1190, + 568, 568, 627, 565, 546, 546, 568, 568, 1227, 566, + 567, 1227, 1354, 1374, 1385, 568, 568, 627, 837, 838, + 1222, 838, 1222, 627, 627, 627, 627, 294, 627, 439, + 237, 627, 627, 354, 627, 339, 1048, 1377, 1365, 568, + 684, 266, 266, 266, 266, 266, 530, 1221, 722, 723, + 251, 858, 859, 1230, 95, 864, 483, 567, 242, 221, + 445, 221, 445, 425, 505, 321, 1129, 1230, 526, 710, + 872, 872, 242, 354, 858, 128, 627, 901, 838, 1129, + 889, 348, 889, 889, 1129, 838, 1222, 568, 566, 566, + 570, 1152, 210, 1207, 1208, 107, 568, 1152, 568, 568, + 568, 242, 568, 568, 568, 568, 568, 568, 570, 570, + 568, 377, 568, 568, 567, 1153, 1153, 1190, 83, 87, + 88, 89, 266, 288, 356, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 1187, 1153, 568, 568, 237, 242, + 447, 568, 568, 107, 1203, 1190, 1203, 1203, 242, 568, + 568, 1356, 375, 1166, 107, 568, 570, 1152, 1356, 570, + 1152, 1214, 1152, 568, 546, 1153, 1153, 216, 1190, 242, + 203, 205, 229, 338, 344, 490, 501, 1199, 338, 216, + 923, 1152, 468, 1215, 1152, 1204, 1152, 483, 567, 1050, + 567, 567, 365, 1173, 567, 1190, 475, 477, 475, 477, + 1220, 1063, 1063, 1063, 297, 426, 543, 567, 1050, 1097, + 1098, 1099, 1107, 1112, 1122, 1157, 1354, 523, 1117, 1067, + 1117, 7, 10, 11, 21, 22, 23, 25, 26, 30, + 31, 32, 181, 324, 382, 493, 1334, 1335, 1337, 1327, + 1328, 974, 1227, 1150, 604, 1130, 1016, 316, 567, 1070, + 356, 1185, 1188, 548, 883, 1227, 1373, 1079, 355, 526, + 505, 1076, 312, 1097, 523, 1118, 513, 470, 506, 1027, + 1028, 1029, 1354, 354, 1030, 1354, 1043, 1044, 570, 1096, + 557, 1214, 572, 1282, 571, 570, 557, 29, 1343, 568, + 568, 571, 900, 839, 896, 896, 128, 898, 562, 1231, + 1231, 354, 1221, 357, 354, 1152, 680, 1222, 567, 567, + 567, 704, 270, 683, 796, 223, 627, 483, 1230, 1222, + 609, 1129, 838, 838, 1129, 726, 1222, 254, 511, 483, + 483, 726, 742, 748, 408, 442, 622, 1222, 1222, 1222, + 278, 344, 226, 892, 369, 442, 483, 339, 223, 155, + 669, 670, 796, 442, 94, 208, 412, 413, 442, 626, + 635, 636, 748, 942, 434, 223, 627, 223, 627, 1222, + 1222, 1222, 1222, 434, 434, 302, 751, 752, 751, 568, + 570, 753, 1374, 270, 568, 570, 557, 569, 226, 1230, + 1222, 408, 442, 622, 1222, 1222, 1222, 354, 370, 408, + 442, 94, 208, 370, 408, 442, 1129, 336, 1129, 568, + 570, 557, 1220, 483, 1231, 507, 769, 226, 304, 376, + 344, 1374, 376, 1231, 504, 226, 483, 483, 429, 458, + 913, 913, 913, 369, 442, 160, 483, 941, 429, 188, + 237, 637, 233, 872, 483, 483, 314, 314, 314, 483, + 483, 429, 483, 483, 429, 483, 429, 483, 429, 483, + 196, 627, 1129, 339, 1374, 442, 942, 223, 627, 483, + 483, 568, 1222, 483, 941, 429, 483, 1230, 1222, 568, + 568, 568, 1192, 566, 1129, 838, 288, 844, 1222, 1222, + 1222, 288, 459, 460, 647, 1374, 647, 254, 568, 568, + 242, 806, 808, 336, 356, 558, 559, 722, 809, 896, + 1188, 1237, 1374, 141, 147, 160, 188, 190, 246, 274, + 339, 344, 386, 402, 500, 672, 673, 675, 222, 522, + 581, 609, 1222, 609, 358, 746, 1220, 1220, 1220, 568, + 570, 1231, 251, 420, 1231, 1227, 493, 1220, 682, 1376, + 237, 774, 117, 596, 471, 755, 181, 1013, 1152, 242, + 570, 1221, 632, 813, 814, 1374, 568, 570, 1222, 237, + 683, 1220, 709, 1220, 1261, 1049, 567, 662, 1220, 568, + 1222, 526, 528, 700, 631, 107, 223, 1049, 699, 483, + 223, 1107, 568, 570, 557, 780, 568, 570, 188, 557, + 907, 1374, 609, 471, 895, 896, 237, 912, 120, 415, + 908, 909, 906, 909, 193, 280, 435, 505, 964, 1222, + 349, 354, 359, 254, 1247, 1049, 1261, 1129, 567, 568, + 570, 568, 1227, 1149, 1149, 566, 1385, 567, 558, 559, + 560, 561, 562, 566, 627, 507, 627, 507, 627, 1222, + 1222, 764, 838, 223, 237, 429, 429, 429, 429, 429, + 1221, 570, 1230, 526, 570, 860, 357, 1108, 439, 221, + 221, 181, 335, 1220, 1222, 1231, 857, 864, 1230, 288, + 288, 288, 288, 722, 288, 288, 288, 288, 288, 1195, + 479, 1152, 214, 1129, 568, 1152, 1199, 1152, 1152, 568, + 1190, 570, 1129, 1153, 1153, 1153, 1153, 203, 205, 339, + 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, + 1152, 1152, 1152, 1129, 568, 568, 568, 1190, 568, 570, + 128, 1154, 1167, 568, 1356, 1163, 383, 464, 1165, 568, + 570, 518, 1159, 107, 568, 1374, 1152, 104, 104, 1152, + 568, 1152, 242, 338, 1152, 568, 216, 1153, 1153, 216, + 216, 1152, 1152, 1068, 523, 567, 1174, 1354, 568, 1190, + 570, 1063, 1063, 1063, 1063, 1220, 1220, 1220, 1050, 1112, + 1122, 242, 567, 1050, 1098, 1099, 107, 1100, 1101, 1354, + 570, 168, 243, 276, 291, 301, 327, 419, 1104, 1101, + 107, 1100, 1103, 1354, 1101, 549, 1116, 1213, 1152, 251, + 1081, 568, 1081, 570, 557, 568, 1343, 1021, 567, 883, + 234, 296, 355, 526, 480, 171, 1152, 416, 1032, 512, + 568, 570, 1214, 158, 1032, 568, 570, 1042, 1118, 1152, + 1227, 557, 1301, 1332, 1337, 568, 562, 900, 493, 245, + 424, 430, 437, 472, 494, 869, 237, 869, 568, 567, + 687, 688, 877, 1157, 1354, 683, 683, 796, 1222, 568, + 190, 274, 335, 339, 797, 1222, 1222, 107, 507, 507, + 294, 839, 1230, 1222, 483, 941, 429, 483, 278, 1222, + 128, 474, 1222, 223, 667, 188, 1354, 746, 458, 246, + 225, 259, 339, 631, 581, 181, 246, 339, 458, 461, + 631, 669, 720, 442, 636, 493, 1222, 1354, 434, 750, + 1222, 634, 809, 1356, 1222, 369, 442, 483, 941, 429, + 483, 226, 483, 483, 429, 244, 356, 461, 818, 819, + 244, 356, 826, 827, 483, 483, 429, 568, 568, 568, + 948, 336, 722, 896, 949, 1188, 1237, 1374, 408, 1222, + 567, 526, 770, 1222, 1228, 1374, 1374, 1374, 1222, 1222, + 1222, 1222, 1228, 128, 474, 1222, 1222, 1222, 1222, 513, + 1222, 1222, 237, 237, 410, 237, 260, 1230, 1222, 1222, + 1230, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 354, 147, + 628, 223, 96, 119, 493, 1354, 1222, 1374, 748, 1222, + 1222, 1222, 1222, 1067, 568, 288, 844, 288, 288, 288, + 844, 581, 507, 652, 653, 726, 796, 526, 528, 838, + 567, 838, 1222, 1153, 101, 128, 674, 191, 262, 190, + 344, 292, 1220, 913, 244, 390, 792, 799, 800, 1354, + 735, 567, 374, 567, 662, 677, 273, 694, 665, 1231, + 1231, 1129, 567, 632, 98, 193, 280, 435, 505, 775, + 483, 771, 1230, 260, 1220, 757, 530, 354, 568, 1097, + 707, 913, 568, 570, 1121, 746, 764, 568, 717, 107, + 349, 374, 567, 1023, 710, 664, 666, 668, 679, 1354, + 374, 695, 696, 662, 694, 631, 352, 354, 701, 1049, + 712, 710, 632, 1374, 1222, 874, 812, 1376, 809, 354, + 897, 1152, 1152, 570, 567, 903, 493, 570, 113, 1152, + 483, 567, 683, 1220, 781, 726, 80, 1258, 568, 989, + 990, 566, 568, 1286, 1385, 1385, 1385, 1385, 1385, 1222, + 1222, 627, 439, 627, 1221, 1221, 1221, 1221, 1221, 722, + 248, 859, 864, 568, 1222, 181, 864, 242, 627, 344, + 847, 1374, 847, 847, 847, 288, 847, 847, 847, 847, + 847, 1152, 568, 568, 568, 242, 568, 1152, 242, 203, + 205, 242, 237, 216, 568, 533, 1161, 1190, 401, 512, + 128, 1167, 1154, 524, 524, 568, 1152, 335, 1152, 570, + 1160, 1131, 1152, 1152, 1152, 1152, 104, 104, 1152, 1152, + 216, 568, 568, 1152, 1175, 1354, 568, 1152, 1220, 1220, + 1220, 1220, 1101, 1103, 1101, 567, 538, 1154, 568, 1354, + 567, 1098, 291, 364, 1105, 1098, 1105, 291, 1104, 1105, + 291, 473, 1110, 567, 1354, 567, 361, 128, 255, 1088, + 1374, 1088, 1335, 559, 1328, 1336, 1373, 1374, 1374, 568, + 923, 480, 349, 1217, 1049, 368, 1049, 1029, 354, 567, + 1031, 557, 1043, 1032, 1381, 493, 568, 483, 854, 242, + 796, 1152, 568, 570, 526, 147, 876, 880, 876, 568, + 568, 267, 685, 191, 262, 272, 190, 509, 627, 1129, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1231, 1222, 667, + 671, 1228, 674, 260, 260, 344, 722, 674, 344, 1228, + 1354, 1129, 627, 627, 557, 128, 474, 1222, 1222, 1222, + 1222, 1222, 1230, 1222, 1222, 1227, 1227, 1129, 570, 1227, + 1227, 570, 1230, 1222, 1222, 483, 1152, 141, 1231, 1222, + 483, 483, 242, 266, 526, 1221, 1221, 838, 1221, 223, + 226, 838, 1374, 1374, 1129, 627, 627, 483, 568, 288, + 844, 844, 844, 844, 567, 648, 649, 581, 195, 244, + 277, 244, 1152, 339, 673, 188, 107, 913, 682, 507, + 703, 1225, 104, 222, 266, 747, 751, 349, 661, 637, + 220, 268, 567, 439, 507, 683, 107, 1231, 769, 596, + 339, 567, 239, 1222, 706, 1374, 439, 632, 222, 1243, + 838, 349, 661, 710, 568, 570, 526, 671, 128, 699, + 637, 695, 153, 474, 702, 526, 978, 107, 702, 242, + 354, 567, 1220, 1374, 894, 914, 915, 1355, 909, 1129, + 237, 910, 1220, 242, 483, 934, 403, 782, 275, 727, + 1259, 1354, 627, 568, 568, 627, 627, 1222, 357, 286, + 627, 858, 847, 1152, 568, 1153, 242, 1152, 1152, 1152, + 567, 568, 570, 568, 1167, 568, 512, 455, 568, 568, + 1152, 1152, 1152, 568, 374, 1176, 568, 1113, 1114, 1157, + 567, 1166, 1100, 567, 1221, 1098, 354, 507, 1106, 1098, + 291, 1098, 1225, 1120, 567, 1120, 1354, 1064, 1152, 525, + 1170, 1170, 1227, 1373, 432, 1058, 568, 1046, 1388, 1027, + 160, 875, 877, 204, 1152, 858, 354, 858, 568, 685, + 688, 356, 923, 838, 838, 881, 402, 685, 567, 913, + 568, 483, 442, 1038, 107, 223, 223, 628, 809, 1231, + 1222, 483, 567, 889, 923, 925, 819, 567, 567, 827, + 1222, 568, 567, 442, 1038, 1222, 1222, 567, 567, 567, + 526, 549, 998, 410, 998, 998, 237, 1222, 628, 1222, + 844, 654, 655, 1356, 123, 169, 194, 212, 216, 238, + 241, 256, 344, 394, 650, 648, 1374, 889, 107, 930, + 930, 568, 259, 567, 703, 315, 686, 270, 567, 800, + 792, 567, 568, 570, 1220, 568, 439, 98, 152, 155, + 161, 189, 246, 259, 271, 458, 461, 678, 678, 1219, + 1222, 1222, 568, 1049, 770, 223, 181, 746, 242, 1222, + 107, 1261, 1049, 662, 1220, 568, 1386, 666, 358, 1354, + 700, 695, 699, 193, 208, 383, 1222, 133, 141, 307, + 1049, 838, 1107, 875, 242, 795, 896, 568, 570, 493, + 214, 578, 908, 911, 1117, 453, 453, 568, 329, 353, + 783, 784, 785, 237, 788, 726, 335, 511, 728, 729, + 557, 1260, 1222, 864, 237, 1153, 1162, 1190, 335, 545, + 128, 1067, 568, 570, 107, 1115, 188, 1127, 1128, 1153, + 150, 1221, 568, 1152, 567, 1098, 1106, 567, 568, 1120, + 568, 170, 252, 422, 567, 1082, 1083, 1084, 1085, 1086, + 1087, 1152, 1171, 1172, 1354, 127, 197, 180, 1059, 512, + 1222, 568, 570, 340, 505, 860, 869, 627, 876, 913, + 567, 631, 882, 1220, 913, 683, 703, 1222, 474, 259, + 507, 629, 442, 1038, 1222, 1194, 237, 822, 822, 1194, + 1194, 1152, 474, 1190, 1190, 638, 639, 1232, 837, 838, + 837, 838, 1221, 627, 568, 570, 560, 567, 606, 656, + 722, 995, 1374, 995, 339, 344, 394, 995, 995, 1117, + 930, 111, 264, 335, 681, 567, 718, 1152, 243, 373, + 448, 354, 690, 691, 692, 474, 568, 1225, 76, 801, + 751, 662, 694, 1222, 568, 746, 230, 821, 632, 978, + 1220, 530, 1097, 746, 1049, 1023, 710, 695, 662, 694, + 671, 567, 701, 699, 700, 426, 426, 141, 357, 141, + 710, 874, 568, 1220, 796, 903, 914, 1129, 571, 204, + 526, 526, 784, 425, 471, 786, 209, 789, 522, 791, + 511, 726, 1227, 1368, 1376, 80, 746, 627, 1152, 568, + 568, 512, 1190, 253, 395, 426, 1177, 1116, 1113, 567, + 1153, 568, 570, 107, 1123, 1124, 1354, 568, 1221, 1190, + 568, 567, 443, 567, 568, 570, 570, 107, 234, 234, + 683, 1049, 1117, 877, 442, 242, 703, 923, 882, 883, + 682, 703, 568, 796, 1222, 718, 1152, 474, 568, 360, + 432, 399, 823, 823, 568, 568, 568, 1222, 568, 568, + 568, 570, 1227, 998, 655, 606, 657, 658, 1374, 1374, + 344, 683, 560, 683, 1374, 1374, 272, 719, 568, 193, + 505, 354, 692, 354, 691, 1222, 567, 568, 570, 637, + 439, 746, 838, 107, 107, 567, 1222, 978, 710, 699, + 637, 695, 567, 697, 698, 1157, 1354, 702, 700, 701, + 357, 357, 567, 267, 878, 237, 909, 99, 281, 965, + 244, 244, 995, 425, 457, 790, 567, 222, 1259, 121, + 171, 496, 1152, 1178, 1179, 1178, 1178, 568, 1120, 570, + 1128, 1356, 568, 570, 237, 1129, 568, 568, 1190, 567, + 1190, 1083, 1172, 1174, 128, 128, 442, 1041, 858, 523, + 689, 568, 883, 686, 796, 1038, 1222, 889, 128, 1038, + 483, 638, 838, 568, 570, 683, 568, 462, 132, 335, + 414, 442, 693, 693, 568, 76, 439, 1222, 818, 1049, + 746, 1386, 700, 695, 699, 1152, 568, 570, 880, 880, + 701, 702, 875, 567, 632, 209, 340, 567, 960, 962, + 966, 1024, 1033, 1040, 1049, 889, 889, 787, 1354, 1152, + 792, 1179, 425, 236, 381, 236, 381, 219, 1180, 1180, + 1180, 568, 1154, 1124, 361, 188, 339, 344, 1125, 1126, + 1376, 107, 1102, 409, 1111, 568, 1082, 568, 683, 683, + 1354, 1117, 627, 567, 796, 690, 1038, 838, 567, 658, + 93, 188, 344, 1222, 746, 978, 701, 699, 700, 568, + 698, 838, 881, 881, 702, 568, 877, 879, 702, 425, + 961, 962, 963, 1050, 1051, 570, 570, 568, 1225, 104, + 171, 251, 335, 480, 1166, 1153, 344, 1126, 1153, 1354, + 567, 568, 442, 442, 483, 507, 1152, 796, 1190, 746, + 702, 700, 701, 880, 878, 568, 570, 1117, 791, 568, + 571, 483, 242, 567, 1179, 425, 362, 150, 1152, 1354, + 1354, 1225, 1226, 1354, 568, 568, 701, 702, 881, 632, + 877, 222, 963, 453, 453, 793, 794, 1227, 1356, 1373, + 1374, 1123, 568, 567, 188, 702, 702, 792, 526, 526, + 568, 570, 568, 1191, 1226, 1117, 1225, 244, 244, 794, + 1067, 507, 567, 889, 889, 568, 1354, 793, 568 +}; + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_int16 yyr1[] = +{ + 0, 575, 576, 577, 577, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 579, + 580, 581, 581, 581, 582, 582, 583, 583, 584, 584, + 584, 584, 584, 584, 584, 584, 584, 585, 585, 585, + 585, 585, 585, 586, 587, 587, 588, 588, 589, 589, + 589, 589, 590, 590, 590, 590, 590, 590, 591, 592, + 593, 593, 594, 594, 594, 594, 595, 595, 596, 596, + 597, 597, 597, 597, 597, 597, 598, 598, 598, 599, + 599, 599, 600, 600, 600, 600, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 602, 602, 603, + 603, 604, 604, 605, 605, 605, 605, 606, 606, 606, + 606, 607, 607, 607, 607, 607, 607, 607, 608, 608, + 608, 609, 609, 610, 611, 611, 611, 611, 612, 612, + 613, 613, 614, 614, 615, 615, 615, 615, 615, 616, + 617, 617, 618, 618, 619, 620, 620, 620, 620, 620, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 622, 622, 623, 623, 623, 624, 625, 625, 625, + 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, + 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, + 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, + 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, + 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, + 625, 625, 625, 625, 625, 625, 626, 626, 627, 627, + 627, 628, 628, 629, 629, 630, 630, 630, 630, 631, + 632, 632, 633, 633, 634, 634, 634, 634, 635, 635, + 636, 636, 636, 636, 637, 637, 637, 637, 638, 639, + 639, 640, 641, 641, 642, 642, 642, 642, 643, 643, + 644, 644, 645, 645, 646, 646, 647, 647, 647, 648, + 648, 649, 649, 650, 650, 650, 650, 650, 650, 650, + 650, 650, 650, 650, 650, 650, 651, 651, 652, 652, + 653, 653, 654, 654, 655, 656, 656, 656, 656, 656, + 657, 657, 658, 659, 659, 659, 659, 659, 659, 660, + 660, 660, 660, 660, 660, 660, 660, 661, 661, 662, + 662, 663, 663, 664, 664, 665, 665, 665, 666, 666, + 667, 668, 668, 669, 669, 670, 670, 671, 671, 672, + 672, 672, 672, 673, 673, 673, 673, 673, 673, 673, + 673, 673, 674, 674, 675, 675, 675, 675, 676, 677, + 677, 677, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 679, 679, 680, 680, 680, 680, 680, 680, + 680, 681, 681, 682, 682, 683, 683, 684, 685, 685, + 686, 686, 686, 686, 687, 687, 688, 688, 689, 689, + 690, 690, 690, 690, 690, 691, 692, 693, 693, 693, + 693, 693, 694, 694, 695, 695, 696, 697, 697, 698, + 698, 698, 699, 699, 700, 700, 700, 701, 701, 701, + 701, 702, 702, 703, 703, 704, 705, 705, 706, 706, + 707, 707, 707, 708, 708, 709, 710, 710, 710, 711, + 711, 712, 713, 713, 714, 715, 715, 716, 716, 717, + 717, 718, 718, 719, 719, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 721, + 721, 722, 722, 722, 722, 723, 723, 724, 724, 725, + 725, 726, 726, 727, 727, 728, 728, 729, 729, 730, + 730, 731, 732, 732, 733, 733, 734, 734, 735, 735, + 736, 736, 736, 736, 737, 738, 738, 739, 740, 740, + 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, + 740, 741, 742, 742, 742, 742, 743, 743, 744, 744, + 745, 745, 746, 746, 747, 747, 748, 749, 749, 750, + 750, 750, 750, 751, 752, 753, 754, 754, 755, 755, + 756, 756, 757, 757, 758, 758, 758, 759, 759, 759, + 759, 760, 761, 761, 762, 762, 763, 763, 764, 764, + 765, 765, 766, 767, 768, 769, 769, 770, 770, 771, + 771, 772, 772, 773, 773, 774, 774, 775, 775, 775, + 775, 775, 776, 777, 777, 778, 778, 779, 779, 779, + 780, 780, 781, 781, 781, 781, 781, 782, 782, 783, + 783, 784, 785, 785, 786, 786, 787, 788, 788, 789, + 789, 790, 790, 791, 791, 792, 792, 793, 793, 793, + 794, 794, 794, 794, 795, 795, 796, 796, 797, 797, + 797, 797, 797, 797, 798, 798, 799, 799, 800, 801, + 801, 802, 803, 803, 803, 803, 804, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, + 805, 805, 805, 806, 807, 807, 808, 808, 809, 809, + 809, 809, 809, 809, 810, 811, 811, 812, 813, 813, + 814, 814, 815, 815, 815, 815, 816, 816, 817, 818, + 818, 819, 819, 819, 819, 819, 820, 820, 821, 821, + 822, 822, 822, 823, 823, 824, 825, 825, 826, 826, + 827, 827, 828, 828, 829, 829, 830, 831, 832, 832, + 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, 833, 833, 834, 834, 834, 834, 834, 835, 835, + 835, 835, 835, 835, 835, 835, 836, 836, 836, 837, + 837, 838, 838, 839, 839, 840, 840, 841, 842, 842, + 842, 843, 843, 843, 843, 843, 843, 843, 843, 843, + 843, 843, 843, 843, 843, 843, 843, 843, 843, 844, + 844, 845, 845, 845, 845, 845, 845, 845, 845, 845, + 845, 846, 846, 847, 847, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 849, 849, 849, 849, + 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, + 850, 850, 851, 851, 852, 853, 853, 854, 854, 854, + 854, 854, 855, 855, 856, 856, 856, 856, 857, 857, + 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, + 857, 857, 857, 857, 857, 857, 857, 857, 858, 858, + 859, 859, 860, 860, 861, 862, 862, 863, 863, 864, + 864, 865, 866, 866, 867, 867, 867, 868, 868, 868, + 869, 869, 869, 869, 869, 869, 870, 870, 871, 871, + 872, 872, 873, 873, 874, 874, 875, 875, 876, 876, + 877, 877, 877, 878, 878, 879, 879, 880, 880, 881, + 881, 882, 882, 882, 883, 883, 883, 884, 884, 884, + 884, 885, 885, 886, 886, 887, 887, 888, 888, 889, + 889, 889, 889, 890, 890, 891, 891, 892, 892, 892, + 892, 892, 893, 893, 893, 893, 893, 894, 895, 896, + 896, 896, 897, 897, 897, 898, 899, 899, 899, 899, + 900, 900, 901, 902, 902, 903, 903, 904, 904, 905, + 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, + 905, 905, 905, 905, 905, 905, 906, 906, 906, 906, + 906, 907, 907, 908, 909, 909, 909, 910, 910, 911, + 911, 912, 912, 913, 913, 914, 915, 915, 916, 916, + 916, 917, 917, 918, 918, 919, 919, 919, 919, 919, + 919, 920, 920, 921, 921, 922, 922, 922, 922, 923, + 923, 924, 924, 925, 926, 927, 927, 928, 928, 929, + 929, 929, 930, 930, 930, 931, 932, 932, 933, 934, + 934, 934, 934, 935, 936, 936, 936, 936, 937, 937, + 938, 938, 938, 939, 939, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, + 941, 941, 942, 942, 943, 943, 943, 943, 943, 943, + 944, 944, 945, 945, 945, 945, 945, 945, 945, 945, + 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, + 945, 945, 945, 945, 945, 945, 945, 945, 945, 946, + 947, 947, 948, 948, 949, 949, 949, 949, 949, 950, + 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, + 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, + 951, 951, 951, 951, 952, 953, 953, 954, 954, 955, + 955, 955, 955, 956, 957, 957, 957, 957, 957, 957, + 957, 957, 958, 958, 959, 960, 960, 960, 961, 961, + 962, 962, 962, 962, 962, 963, 963, 964, 964, 964, + 964, 965, 965, 965, 966, 967, 967, 968, 969, 969, + 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, + 970, 970, 971, 971, 972, 972, 972, 973, 973, 973, + 973, 973, 974, 974, 974, 975, 975, 976, 976, 976, + 977, 977, 977, 977, 978, 978, 978, 978, 979, 980, + 981, 981, 982, 982, 983, 983, 983, 984, 984, 984, + 984, 984, 984, 984, 985, 985, 986, 986, 986, 987, + 988, 988, 988, 988, 989, 989, 990, 991, 992, 992, + 993, 994, 994, 994, 994, 994, 994, 994, 995, 995, + 996, 997, 997, 997, 997, 997, 997, 998, 998, 999, + 1000, 1000, 1000, 1000, 1001, 1001, 1002, 1002, 1003, 1003, + 1004, 1004, 1005, 1005, 1006, 1007, 1007, 1008, 1008, 1008, + 1009, 1009, 1010, 1010, 1011, 1011, 1012, 1012, 1013, 1013, + 1014, 1015, 1015, 1016, 1016, 1017, 1017, 1017, 1017, 1018, + 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1019, 1019, + 1020, 1020, 1021, 1021, 1021, 1021, 1022, 1022, 1022, 1023, + 1023, 1024, 1025, 1025, 1026, 1026, 1026, 1026, 1026, 1027, + 1027, 1028, 1028, 1029, 1030, 1030, 1030, 1031, 1031, 1031, + 1032, 1032, 1033, 1034, 1034, 1035, 1036, 1036, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1038, 1038, 1039, 1039, + 1039, 1040, 1041, 1041, 1042, 1042, 1043, 1044, 1044, 1045, + 1046, 1046, 1047, 1047, 1047, 1047, 1047, 1047, 1048, 1048, + 1048, 1049, 1049, 1050, 1050, 1051, 1051, 1051, 1051, 1051, + 1051, 1051, 1051, 1052, 1052, 1053, 1053, 1053, 1053, 1053, + 1053, 1053, 1054, 1054, 1054, 1055, 1055, 1056, 1057, 1057, + 1057, 1058, 1058, 1058, 1059, 1059, 1059, 1060, 1060, 1061, + 1061, 1061, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, + 1062, 1063, 1063, 1064, 1064, 1064, 1065, 1065, 1066, 1066, + 1067, 1067, 1068, 1069, 1069, 1070, 1070, 1071, 1071, 1071, + 1071, 1072, 1072, 1073, 1073, 1073, 1073, 1073, 1073, 1074, + 1074, 1075, 1075, 1076, 1077, 1077, 1077, 1078, 1078, 1079, + 1079, 1080, 1080, 1081, 1081, 1082, 1082, 1083, 1083, 1083, + 1083, 1083, 1084, 1085, 1086, 1087, 1088, 1088, 1089, 1089, + 1090, 1090, 1091, 1091, 1092, 1093, 1093, 1093, 1093, 1094, + 1094, 1095, 1095, 1096, 1096, 1097, 1097, 1098, 1098, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099, 1099, 1099, + 1099, 1099, 1099, 1100, 1100, 1100, 1100, 1101, 1101, 1102, + 1102, 1103, 1103, 1103, 1103, 1103, 1104, 1104, 1104, 1104, + 1105, 1105, 1106, 1106, 1107, 1107, 1107, 1107, 1108, 1108, + 1109, 1109, 1109, 1110, 1111, 1111, 1112, 1112, 1113, 1114, + 1114, 1115, 1115, 1116, 1116, 1117, 1117, 1118, 1118, 1118, + 1119, 1119, 1120, 1120, 1121, 1122, 1122, 1123, 1123, 1124, + 1124, 1124, 1125, 1125, 1126, 1126, 1126, 1126, 1127, 1127, + 1128, 1128, 1129, 1129, 1129, 1129, 1129, 1129, 1130, 1130, + 1130, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1132, 1132, + 1132, 1132, 1133, 1133, 1134, 1134, 1135, 1135, 1135, 1135, + 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1136, 1136, 1137, + 1137, 1138, 1138, 1139, 1140, 1141, 1141, 1142, 1142, 1143, + 1144, 1145, 1145, 1145, 1145, 1145, 1145, 1146, 1146, 1147, + 1147, 1147, 1147, 1148, 1149, 1149, 1149, 1150, 1150, 1150, + 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, + 1150, 1151, 1151, 1152, 1152, 1152, 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1153, 1153, + 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, + 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, + 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, + 1154, 1154, 1154, 1154, 1155, 1155, 1155, 1155, 1155, 1155, + 1155, 1156, 1156, 1157, 1157, 1158, 1158, 1158, 1158, 1158, + 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, + 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, + 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, + 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, + 1158, 1159, 1159, 1160, 1160, 1160, 1160, 1161, 1162, 1162, + 1163, 1163, 1164, 1164, 1165, 1165, 1165, 1166, 1166, 1166, + 1166, 1167, 1167, 1168, 1168, 1169, 1169, 1170, 1170, 1171, + 1171, 1172, 1173, 1173, 1173, 1174, 1175, 1175, 1176, 1176, + 1177, 1177, 1177, 1177, 1178, 1178, 1179, 1179, 1179, 1179, + 1179, 1180, 1180, 1180, 1180, 1180, 1181, 1181, 1181, 1182, + 1182, 1183, 1184, 1184, 1184, 1185, 1185, 1186, 1186, 1186, + 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1187, + 1187, 1188, 1188, 1189, 1189, 1189, 1189, 1189, 1189, 1190, + 1190, 1191, 1191, 1192, 1192, 1192, 1193, 1193, 1194, 1194, + 1195, 1195, 1195, 1196, 1196, 1197, 1198, 1198, 1198, 1198, + 1198, 1198, 1198, 1198, 1199, 1199, 1199, 1199, 1200, 1200, + 1201, 1202, 1202, 1202, 1202, 1202, 1203, 1203, 1203, 1204, + 1204, 1205, 1206, 1206, 1207, 1208, 1208, 1209, 1209, 1210, + 1210, 1211, 1211, 1211, 1211, 1212, 1212, 1213, 1213, 1214, + 1214, 1215, 1215, 1216, 1216, 1217, 1217, 1218, 1218, 1218, + 1218, 1219, 1219, 1220, 1220, 1221, 1221, 1222, 1223, 1224, + 1225, 1225, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1227, 1228, 1228, + 1228, 1228, 1229, 1230, 1230, 1230, 1230, 1231, 1231, 1232, + 1232, 1232, 1232, 1233, 1233, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 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, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, + 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, 1236, 1236, 1236, 1236, + 1236, 1236, 1236, 1237, 1237, 1237, 1237, 1237, 1237, 1237, + 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, + 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, + 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, + 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, + 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, + 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, + 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + 1238, 1238, 1238, 1238, 1238, 1238, 1239, 1239, 1240, 1240, + 1240, 1240, 1240, 1240, 1240, 1240, 1242, 1241, 1243, 1241, + 1244, 1245, 1245, 1245, 1245, 1246, 1246, 1246, 1246, 1247, + 1247, 1248, 1249, 1250, 1250, 1251, 1251, 1251, 1252, 1252, + 1253, 1253, 1254, 1254, 1255, 1255, 1255, 1255, 1256, 1256, + 1256, 1257, 1258, 1258, 1259, 1259, 1260, 1260, 1260, 1260, + 1261, 1261, 1262, 1263, 1264, 1265, 1266, 1266, 1267, 1268, + 1268, 1269, 1269, 1269, 1269, 1269, 1271, 1270, 1272, 1273, + 1274, 1274, 1275, 1275, 1275, 1275, 1276, 1276, 1278, 1277, + 1280, 1279, 1281, 1279, 1279, 1282, 1282, 1283, 1283, 1283, + 1284, 1284, 1284, 1284, 1285, 1285, 1286, 1286, 1286, 1286, + 1286, 1286, 1287, 1287, 1287, 1288, 1290, 1289, 1291, 1292, + 1291, 1293, 1293, 1294, 1294, 1295, 1295, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1298, 1298, 1299, 1299, + 1300, 1301, 1301, 1302, 1302, 1302, 1303, 1304, 1305, 1305, + 1305, 1305, 1306, 1306, 1306, 1307, 1307, 1308, 1308, 1309, + 1310, 1310, 1311, 1311, 1312, 1312, 1313, 1313, 1314, 1315, + 1315, 1316, 1316, 1316, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1318, 1318, 1318, 1318, 1318, 1319, 1319, + 1320, 1321, 1322, 1323, 1323, 1324, 1325, 1326, 1326, 1327, + 1328, 1328, 1329, 1330, 1331, 1331, 1332, 1333, 1334, 1334, + 1335, 1336, 1336, 1336, 1336, 1336, 1337, 1337, 1337, 1337, + 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, + 1337, 1338, 1338, 1339, 1339, 1340, 1340, 1340, 1342, 1341, + 1343, 1343, 1345, 1344, 1346, 1346, 1346, 1347, 1347, 1347, + 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1348, 1348, 1349, + 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, + 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, + 1349, 1350, 1350, 1350, 1350, 1350, 1350, 1351, 1351, 1351, + 1351, 1351, 1351, 1351, 1352, 1353, 1353, 1353, 1353, 1353, + 1353, 1353, 1353, 1354, 1354, 1354, 1354, 1354, 1354, 1354, + 1355, 1355, 1355, 1355, 1355, 1355, 1356, 1356, 1356, 1356, + 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1357, 1357, 1357, + 1357, 1357, 1358, 1358, 1358, 1358, 1359, 1359, 1359, 1359, + 1359, 1359, 1359, 1360, 1360, 1360, 1361, 1361, 1361, 1361, + 1361, 1361, 1362, 1362, 1363, 1364, 1364, 1365, 1365, 1366, + 1367, 1368, 1369, 1369, 1369, 1370, 1371, 1372, 1373, 1374, + 1375, 1376, 1376, 1377, 1377, 1378, 1378, 1378, 1379, 1379, + 1380, 1380, 1381, 1381, 1382, 1382, 1382, 1382, 1382, 1383, + 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, + 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, + 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, + 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, + 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, + 1383, 1383, 1383, 1383, 1383, 1384, 1384, 1384, 1384, 1385, + 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1386, + 1386, 1386, 1386, 1387, 1387, 1388, 1388, 1389, 1389, 1390, + 1390 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_int8 yyr2[] = +{ + 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, + 5, 1, 1, 0, 2, 0, 2, 0, 2, 2, + 3, 3, 1, 3, 3, 2, 1, 1, 2, 2, + 2, 3, 3, 5, 5, 5, 0, 3, 5, 5, + 5, 5, 3, 5, 3, 5, 3, 5, 5, 6, + 1, 1, 6, 4, 9, 7, 1, 0, 2, 0, + 1, 1, 1, 1, 1, 1, 2, 3, 3, 2, + 5, 1, 3, 3, 3, 3, 1, 3, 3, 2, + 2, 2, 2, 3, 3, 3, 3, 1, 3, 1, + 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, + 1, 1, 1, 3, 5, 1, 1, 1, 1, 1, + 0, 1, 1, 2, 1, 2, 3, 2, 1, 1, + 2, 1, 2, 1, 3, 4, 5, 4, 2, 4, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 4, 6, 4, 6, 10, 13, 4, 6, 4, 10, + 13, 4, 6, 4, 6, 5, 7, 11, 14, 5, + 7, 1, 3, 4, 4, 4, 3, 2, 5, 3, + 6, 4, 6, 6, 5, 7, 6, 6, 5, 5, + 6, 5, 9, 4, 5, 7, 6, 4, 8, 4, + 2, 4, 3, 6, 4, 3, 3, 3, 2, 2, + 3, 4, 4, 3, 3, 3, 3, 3, 3, 4, + 4, 3, 2, 3, 2, 2, 3, 3, 2, 2, + 3, 4, 4, 4, 5, 1, 3, 2, 1, 1, + 0, 2, 0, 2, 0, 1, 1, 1, 3, 3, + 2, 0, 1, 3, 3, 1, 5, 3, 1, 2, + 1, 3, 2, 3, 6, 6, 10, 1, 2, 1, + 3, 4, 1, 3, 4, 6, 4, 8, 2, 2, + 11, 9, 1, 1, 1, 0, 1, 1, 1, 1, + 3, 2, 0, 1, 1, 3, 3, 1, 1, 3, + 3, 3, 3, 4, 3, 2, 1, 0, 3, 0, + 1, 0, 1, 3, 2, 1, 1, 1, 3, 0, + 1, 3, 1, 13, 16, 12, 15, 14, 17, 1, + 1, 2, 2, 2, 2, 1, 0, 1, 0, 3, + 0, 1, 3, 1, 3, 1, 1, 1, 1, 1, + 5, 2, 4, 2, 2, 1, 0, 2, 0, 3, + 1, 1, 2, 2, 1, 3, 4, 5, 2, 5, + 7, 5, 1, 2, 1, 2, 2, 2, 3, 3, + 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 1, 5, 8, 3, 9, 4, 10, + 11, 2, 0, 3, 0, 1, 3, 1, 4, 0, + 2, 2, 2, 0, 1, 3, 3, 6, 4, 0, + 1, 1, 2, 2, 0, 3, 3, 2, 1, 1, + 2, 2, 4, 0, 1, 0, 6, 1, 3, 3, + 3, 5, 2, 0, 2, 2, 0, 3, 4, 4, + 0, 2, 0, 4, 0, 3, 8, 11, 1, 3, + 1, 1, 3, 6, 8, 6, 2, 3, 0, 8, + 11, 5, 1, 0, 6, 5, 8, 4, 6, 1, + 0, 3, 0, 1, 2, 2, 2, 1, 2, 3, + 2, 2, 2, 2, 3, 3, 3, 1, 3, 1, + 0, 1, 2, 2, 1, 1, 3, 6, 10, 1, + 0, 1, 2, 2, 0, 2, 2, 1, 0, 1, + 0, 7, 2, 0, 3, 5, 5, 8, 2, 0, + 2, 2, 2, 1, 5, 2, 0, 2, 6, 6, + 6, 10, 6, 6, 6, 9, 9, 6, 6, 9, + 6, 7, 2, 2, 2, 2, 1, 2, 1, 0, + 7, 6, 4, 0, 1, 3, 4, 1, 3, 1, + 2, 2, 2, 2, 1, 1, 10, 13, 2, 0, + 2, 2, 1, 0, 5, 4, 4, 11, 14, 12, + 15, 11, 2, 1, 4, 0, 8, 11, 1, 1, + 7, 9, 8, 10, 8, 4, 0, 5, 0, 2, + 0, 2, 0, 2, 0, 2, 0, 1, 1, 1, + 1, 1, 8, 1, 1, 17, 21, 1, 1, 2, + 1, 3, 1, 1, 1, 3, 1, 2, 0, 1, + 2, 4, 1, 1, 1, 1, 1, 3, 0, 1, + 0, 1, 1, 4, 0, 1, 1, 1, 3, 0, + 1, 1, 1, 1, 2, 0, 0, 2, 2, 1, + 2, 2, 2, 2, 11, 13, 1, 3, 5, 1, + 3, 5, 1, 2, 2, 1, 8, 6, 5, 4, + 4, 3, 7, 8, 6, 6, 6, 6, 6, 4, + 7, 5, 8, 3, 1, 3, 3, 1, 1, 1, + 1, 1, 1, 1, 3, 1, 3, 3, 1, 0, + 1, 3, 7, 9, 9, 8, 3, 0, 13, 1, + 3, 5, 5, 3, 6, 2, 1, 0, 2, 0, + 2, 4, 0, 1, 0, 6, 8, 8, 1, 3, + 5, 5, 7, 9, 7, 9, 5, 6, 6, 4, + 6, 4, 6, 8, 4, 6, 4, 6, 5, 7, + 1, 1, 1, 2, 1, 2, 1, 1, 1, 3, + 3, 3, 3, 1, 1, 1, 1, 1, 2, 2, + 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 2, 2, 3, 1, 3, 5, 2, 2, + 0, 6, 6, 6, 6, 6, 6, 6, 6, 8, + 9, 8, 6, 6, 9, 9, 9, 7, 10, 1, + 1, 8, 8, 8, 8, 8, 8, 8, 9, 8, + 8, 2, 0, 1, 1, 2, 2, 3, 4, 5, + 4, 5, 3, 4, 3, 4, 1, 2, 3, 3, + 3, 3, 4, 4, 3, 3, 4, 4, 4, 4, + 1, 1, 1, 0, 8, 8, 11, 1, 1, 2, + 4, 5, 1, 3, 2, 2, 2, 2, 1, 2, + 2, 4, 3, 2, 2, 2, 2, 2, 2, 3, + 2, 2, 2, 5, 5, 5, 5, 5, 1, 3, + 1, 2, 3, 0, 6, 6, 9, 3, 0, 3, + 0, 5, 2, 0, 3, 3, 3, 7, 7, 10, + 1, 1, 1, 1, 1, 1, 15, 18, 1, 0, + 1, 0, 1, 0, 2, 0, 1, 3, 4, 5, + 2, 2, 4, 4, 0, 1, 3, 2, 0, 1, + 0, 1, 1, 0, 2, 2, 0, 9, 12, 7, + 7, 2, 0, 3, 2, 1, 3, 1, 3, 2, + 1, 1, 2, 3, 2, 1, 3, 3, 3, 2, + 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 4, 5, 1, 3, 3, 1, 3, 3, 5, 6, + 1, 3, 2, 1, 3, 1, 0, 1, 2, 4, + 5, 1, 1, 1, 1, 3, 3, 2, 2, 1, + 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, + 1, 1, 3, 2, 1, 4, 0, 3, 0, 1, + 1, 3, 5, 2, 0, 2, 1, 3, 5, 5, + 5, 1, 2, 1, 0, 4, 6, 4, 6, 4, + 6, 4, 6, 4, 6, 3, 5, 5, 5, 1, + 3, 1, 3, 2, 2, 1, 2, 1, 2, 11, + 10, 10, 2, 2, 0, 9, 2, 0, 10, 11, + 11, 5, 5, 8, 4, 4, 7, 7, 1, 1, + 1, 1, 1, 5, 5, 6, 6, 6, 6, 6, + 8, 8, 6, 6, 7, 9, 9, 8, 10, 6, + 6, 6, 6, 6, 6, 6, 8, 6, 8, 6, + 8, 7, 9, 6, 8, 7, 9, 8, 10, 8, + 10, 9, 11, 8, 10, 9, 11, 8, 8, 7, + 6, 6, 6, 6, 8, 8, 8, 8, 6, 9, + 1, 0, 2, 0, 8, 8, 8, 10, 9, 8, + 1, 0, 6, 6, 6, 6, 6, 6, 6, 9, + 9, 6, 6, 6, 8, 6, 8, 8, 8, 8, + 6, 8, 6, 8, 7, 9, 7, 9, 6, 7, + 1, 3, 3, 3, 1, 1, 1, 1, 1, 7, + 6, 6, 6, 6, 6, 6, 7, 7, 6, 9, + 9, 6, 6, 6, 6, 6, 6, 8, 8, 8, + 6, 7, 6, 6, 5, 1, 0, 3, 3, 5, + 6, 6, 6, 8, 5, 5, 6, 7, 7, 7, + 4, 4, 4, 6, 13, 1, 1, 3, 3, 1, + 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, + 1, 1, 1, 0, 3, 2, 0, 2, 2, 2, + 3, 3, 3, 3, 2, 3, 2, 5, 4, 3, + 3, 3, 3, 3, 1, 1, 0, 3, 2, 2, + 1, 2, 1, 3, 2, 1, 0, 2, 3, 0, + 9, 11, 12, 14, 3, 4, 4, 0, 2, 5, + 1, 0, 1, 2, 3, 3, 3, 1, 2, 1, + 1, 1, 1, 1, 1, 0, 5, 4, 6, 4, + 3, 5, 7, 9, 1, 3, 1, 5, 4, 4, + 6, 4, 6, 6, 5, 7, 9, 6, 1, 0, + 6, 11, 11, 11, 13, 9, 11, 1, 1, 10, + 4, 6, 2, 5, 2, 0, 6, 5, 3, 5, + 1, 3, 1, 1, 2, 1, 1, 1, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, + 2, 1, 3, 1, 0, 2, 4, 3, 5, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 5, 4, + 3, 0, 1, 1, 1, 1, 4, 10, 13, 3, + 0, 7, 1, 3, 1, 4, 4, 7, 2, 1, + 1, 1, 3, 2, 8, 5, 0, 4, 3, 0, + 3, 0, 7, 2, 0, 5, 3, 0, 2, 2, + 2, 3, 1, 3, 1, 2, 1, 0, 1, 2, + 0, 8, 1, 3, 3, 5, 2, 1, 3, 7, + 1, 1, 0, 3, 2, 2, 2, 2, 0, 2, + 2, 1, 1, 3, 3, 1, 2, 4, 4, 2, + 3, 5, 5, 1, 1, 9, 9, 1, 2, 4, + 4, 4, 2, 2, 3, 1, 3, 9, 1, 2, + 0, 7, 7, 0, 10, 6, 0, 1, 0, 2, + 1, 0, 3, 3, 4, 4, 4, 4, 3, 2, + 1, 1, 0, 1, 1, 0, 1, 5, 1, 0, + 1, 0, 3, 1, 3, 4, 3, 2, 2, 1, + 1, 1, 0, 2, 4, 5, 6, 4, 5, 2, + 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, + 1, 1, 1, 4, 0, 1, 3, 1, 1, 1, + 1, 1, 2, 4, 4, 5, 2, 0, 1, 3, + 1, 0, 1, 2, 3, 2, 4, 2, 3, 2, + 0, 4, 5, 2, 0, 1, 3, 2, 3, 2, + 3, 2, 3, 2, 3, 1, 4, 3, 4, 5, + 4, 5, 4, 5, 2, 4, 1, 1, 0, 2, + 0, 1, 4, 5, 4, 0, 2, 2, 2, 1, + 1, 0, 5, 2, 1, 2, 2, 4, 1, 3, + 1, 2, 3, 6, 4, 0, 2, 6, 2, 1, + 3, 4, 0, 2, 0, 2, 0, 2, 4, 0, + 1, 0, 1, 3, 3, 7, 12, 1, 3, 2, + 3, 3, 1, 2, 2, 2, 2, 1, 1, 3, + 3, 2, 2, 3, 5, 6, 2, 3, 3, 4, + 0, 1, 1, 1, 1, 1, 2, 4, 1, 1, + 1, 1, 2, 3, 3, 0, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 1, 3, 0, 1, + 1, 1, 1, 5, 2, 1, 1, 1, 1, 4, + 1, 2, 2, 1, 3, 3, 2, 1, 0, 5, + 2, 5, 2, 1, 3, 3, 0, 1, 1, 1, + 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, + 0, 1, 4, 1, 3, 3, 5, 2, 2, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 2, 3, 3, 2, 2, 3, 5, 4, + 6, 3, 5, 4, 6, 4, 6, 5, 7, 3, + 2, 4, 2, 3, 3, 4, 3, 4, 3, 4, + 5, 6, 6, 7, 6, 7, 3, 4, 4, 6, + 2, 3, 4, 3, 4, 4, 5, 1, 1, 3, + 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 2, 5, 6, 3, 4, + 1, 1, 2, 4, 1, 1, 1, 2, 2, 2, + 2, 1, 1, 4, 3, 5, 6, 8, 6, 6, + 4, 4, 1, 1, 1, 5, 1, 1, 4, 1, + 4, 1, 4, 1, 4, 1, 1, 1, 1, 1, + 1, 6, 4, 4, 6, 4, 4, 4, 4, 4, + 6, 5, 5, 5, 4, 6, 4, 4, 4, 4, + 5, 7, 7, 9, 5, 4, 6, 5, 7, 7, + 7, 2, 3, 3, 3, 4, 0, 4, 1, 3, + 3, 1, 1, 1, 2, 2, 0, 2, 3, 3, + 4, 2, 2, 5, 0, 5, 0, 2, 0, 1, + 3, 3, 2, 2, 0, 6, 1, 0, 3, 0, + 3, 3, 3, 0, 1, 4, 2, 2, 2, 2, + 2, 3, 2, 2, 3, 0, 4, 3, 5, 4, + 3, 5, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, + 3, 1, 3, 1, 3, 3, 1, 0, 1, 3, + 3, 3, 2, 1, 3, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 7, 5, + 3, 5, 5, 3, 3, 5, 3, 2, 1, 1, + 3, 5, 1, 2, 4, 2, 0, 1, 0, 1, + 2, 2, 2, 3, 5, 1, 0, 1, 2, 0, + 2, 1, 0, 1, 0, 1, 3, 3, 2, 1, + 1, 1, 3, 1, 2, 1, 3, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 2, 6, 2, + 3, 5, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 1, 1, 1, 1, 1, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 2, 4, 3, + 2, 1, 1, 1, 1, 1, 0, 8, 0, 11, + 2, 5, 3, 2, 2, 3, 7, 1, 1, 1, + 0, 2, 2, 1, 0, 1, 3, 1, 2, 0, + 2, 0, 2, 0, 1, 3, 4, 3, 1, 1, + 1, 1, 2, 0, 2, 4, 0, 2, 2, 2, + 1, 1, 3, 7, 3, 1, 1, 1, 1, 2, + 0, 1, 3, 3, 3, 3, 0, 4, 5, 5, + 0, 1, 1, 1, 2, 2, 1, 2, 0, 7, + 0, 5, 0, 4, 2, 2, 0, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, + 2, 1, 3, 2, 2, 3, 0, 5, 1, 0, + 5, 2, 2, 1, 1, 1, 2, 2, 3, 1, + 2, 2, 3, 3, 4, 2, 1, 2, 1, 1, + 2, 2, 3, 1, 1, 1, 1, 0, 1, 3, + 5, 0, 2, 0, 1, 2, 3, 2, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 2, 2, 3, + 0, 1, 2, 1, 4, 3, 4, 3, 2, 1, + 3, 1, 1, 1, 1, 2, 2, 1, 2, 2, + 1, 1, 1, 4, 4, 4, 4, 4, 1, 0, + 3, 3, 4, 1, 3, 3, 4, 1, 3, 3, + 1, 1, 1, 6, 1, 3, 3, 6, 1, 3, + 3, 1, 1, 2, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 1, 1, 4, 4, 3, 0, 7, + 1, 0, 0, 7, 3, 4, 3, 1, 1, 1, + 2, 3, 5, 2, 2, 5, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 0, 1, 2, 1, 2, + 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 3, 1, 2, + 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 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, 3, 2, 3, 1, + 3, 3, 3, 3, 3, 3, 1, 1, 4, 0, + 2, 2, 1, 2, 1, 0, 1, 1, 1, 0, + 1 +}; + + +enum { YYENOMEM = -2 }; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) + +/* Backward compatibility with an undocumented macro. + Use YYerror or YYUNDEF. */ +#define YYERRCODE YYUNDEF + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (0) +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +# ifndef YY_LOCATION_PRINT +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + +/* Print *YYLOCP on YYO. Private, do not rely on its existence. */ + +YY_ATTRIBUTE_UNUSED +static int +yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) +{ + int res = 0; + int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; + if (0 <= yylocp->first_line) + { + res += YYFPRINTF (yyo, "%d", yylocp->first_line); + if (0 <= yylocp->first_column) + res += YYFPRINTF (yyo, ".%d", yylocp->first_column); + } + if (0 <= yylocp->last_line) + { + if (yylocp->first_line < yylocp->last_line) + { + res += YYFPRINTF (yyo, "-%d", yylocp->last_line); + if (0 <= end_col) + res += YYFPRINTF (yyo, ".%d", end_col); + } + else if (0 <= end_col && yylocp->first_column < end_col) + res += YYFPRINTF (yyo, "-%d", end_col); + } + return res; + } + +# define YY_LOCATION_PRINT(File, Loc) \ + yy_location_print_ (File, &(Loc)) + +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +# endif /* !defined YY_LOCATION_PRINT */ + + +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Kind, Value, Location); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) +{ + FILE *yyoutput = yyo; + YY_USE (yyoutput); + YY_USE (yylocationp); + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yykind < YYNTOKENS) + YYPRINT (yyo, yytoknum[yykind], *yyvaluep); +# endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ + +static void +yy_symbol_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) +{ + YYFPRINTF (yyo, "%s %s (", + yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); + + YY_LOCATION_PRINT (yyo, *yylocationp); + YYFPRINTF (yyo, ": "); + yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp); + YYFPRINTF (yyo, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, + int yyrule) +{ + int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), + &yyvsp[(yyi + 1) - (yynrhs)], + &(yylsp[(yyi + 1) - (yynrhs)])); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, yylsp, Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) ((void) 0) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + + + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, + yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp) +{ + YY_USE (yyvaluep); + YY_USE (yylocationp); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + +/* Lookahead token kind. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; +/* Location data for the lookahead symbol. */ +YYLTYPE yylloc +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + = { 1, 1, 1, 1 } +# endif +; +/* Number of syntax errors so far. */ +int yynerrs; + + + + +/*----------. +| yyparse. | +`----------*/ + +int +yyparse (void) +{ + yy_state_fast_t yystate = 0; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus = 0; + + /* Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* Their size. */ + YYPTRDIFF_T yystacksize = YYINITDEPTH; + + /* The state stack: array, bottom, top. */ + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss = yyssa; + yy_state_t *yyssp = yyss; + + /* The semantic value stack: array, bottom, top. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp = yyvs; + + /* The location stack: array, bottom, top. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp = yyls; + + int yyn; + /* The return value of yyparse. */ + int yyresult; + /* Lookahead symbol kind. */ + yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + YYLTYPE yyloc; + + /* The locations where the error started and ended. */ + YYLTYPE yyerror_range[3]; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yychar = YYEMPTY; /* Cause a token to be read. */ + yylsp[0] = yylloc; + goto yysetstate; + + +/*------------------------------------------------------------. +| yynewstate -- push a new state, which is found in yystate. | +`------------------------------------------------------------*/ +yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END + YY_STACK_PRINT (yyss, yyssp); + + if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else + { + /* Get the current used size of the three stacks, in elements. */ + YYPTRDIFF_T yysize = yyssp - yyss + 1; + +# if defined yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + yy_state_t *yyss1 = yyss; + YYSTYPE *yyvs1 = yyvs; + YYLTYPE *yyls1 = yyls; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), + &yyls1, yysize * YYSIZEOF (*yylsp), + &yystacksize); + yyss = yyss1; + yyvs = yyvs1; + yyls = yyls1; + } +# else /* defined YYSTACK_RELOCATE */ + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yy_state_t *yyss1 = yyss; + union yyalloc *yyptr = + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); + YYSTACK_RELOCATE (yyls_alloc, yyls); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + yylsp = yyls + yysize - 1; + + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token\n")); + yychar = yylex (); + } + + if (yychar <= YYEOF) + { + yychar = YYEOF; + yytoken = YYSYMBOL_YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else if (yychar == YYerror) + { + /* The scanner already issued an error message, process directly + to error recovery. But do not keep the error token as + lookahead, it is too special and may lead us to an endless + loop in error recovery. */ + yychar = YYUNDEF; + yytoken = YYSYMBOL_YYerror; + yyerror_range[1] = yylloc; + goto yyerrlab1; + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + *++yylsp = yylloc; + + /* Discard the shifted token. */ + yychar = YYEMPTY; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + '$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + /* Default location. */ + YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); + yyerror_range[1] = yyloc; + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 3: /* toplevel_stmt: stmt */ +#line 1663 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 36452 "preproc.c" + break; + + case 4: /* toplevel_stmt: TransactionStmtLegacy */ +#line 1667 "preproc.y" + { + fprintf(base_yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", (yyvsp[0].str)); + whenever_action(2); + free((yyvsp[0].str)); + } +#line 36462 "preproc.c" + break; + + case 5: /* stmt: AlterEventTrigStmt */ +#line 1677 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36468 "preproc.c" + break; + + case 6: /* stmt: AlterCollationStmt */ +#line 1679 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36474 "preproc.c" + break; + + case 7: /* stmt: AlterDatabaseStmt */ +#line 1681 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36480 "preproc.c" + break; + + case 8: /* stmt: AlterDatabaseSetStmt */ +#line 1683 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36486 "preproc.c" + break; + + case 9: /* stmt: AlterDefaultPrivilegesStmt */ +#line 1685 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36492 "preproc.c" + break; + + case 10: /* stmt: AlterDomainStmt */ +#line 1687 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36498 "preproc.c" + break; + + case 11: /* stmt: AlterEnumStmt */ +#line 1689 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36504 "preproc.c" + break; + + case 12: /* stmt: AlterExtensionStmt */ +#line 1691 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36510 "preproc.c" + break; + + case 13: /* stmt: AlterExtensionContentsStmt */ +#line 1693 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36516 "preproc.c" + break; + + case 14: /* stmt: AlterFdwStmt */ +#line 1695 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36522 "preproc.c" + break; + + case 15: /* stmt: AlterForeignServerStmt */ +#line 1697 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36528 "preproc.c" + break; + + case 16: /* stmt: AlterFunctionStmt */ +#line 1699 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36534 "preproc.c" + break; + + case 17: /* stmt: AlterGroupStmt */ +#line 1701 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36540 "preproc.c" + break; + + case 18: /* stmt: AlterObjectDependsStmt */ +#line 1703 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36546 "preproc.c" + break; + + case 19: /* stmt: AlterObjectSchemaStmt */ +#line 1705 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36552 "preproc.c" + break; + + case 20: /* stmt: AlterOwnerStmt */ +#line 1707 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36558 "preproc.c" + break; + + case 21: /* stmt: AlterOperatorStmt */ +#line 1709 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36564 "preproc.c" + break; + + case 22: /* stmt: AlterTypeStmt */ +#line 1711 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36570 "preproc.c" + break; + + case 23: /* stmt: AlterPolicyStmt */ +#line 1713 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36576 "preproc.c" + break; + + case 24: /* stmt: AlterSeqStmt */ +#line 1715 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36582 "preproc.c" + break; + + case 25: /* stmt: AlterSystemStmt */ +#line 1717 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36588 "preproc.c" + break; + + case 26: /* stmt: AlterTableStmt */ +#line 1719 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36594 "preproc.c" + break; + + case 27: /* stmt: AlterTblSpcStmt */ +#line 1721 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36600 "preproc.c" + break; + + case 28: /* stmt: AlterCompositeTypeStmt */ +#line 1723 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36606 "preproc.c" + break; + + case 29: /* stmt: AlterPublicationStmt */ +#line 1725 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36612 "preproc.c" + break; + + case 30: /* stmt: AlterRoleSetStmt */ +#line 1727 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36618 "preproc.c" + break; + + case 31: /* stmt: AlterRoleStmt */ +#line 1729 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36624 "preproc.c" + break; + + case 32: /* stmt: AlterSubscriptionStmt */ +#line 1731 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36630 "preproc.c" + break; + + case 33: /* stmt: AlterStatsStmt */ +#line 1733 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36636 "preproc.c" + break; + + case 34: /* stmt: AlterTSConfigurationStmt */ +#line 1735 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36642 "preproc.c" + break; + + case 35: /* stmt: AlterTSDictionaryStmt */ +#line 1737 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36648 "preproc.c" + break; + + case 36: /* stmt: AlterUserMappingStmt */ +#line 1739 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36654 "preproc.c" + break; + + case 37: /* stmt: AnalyzeStmt */ +#line 1741 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36660 "preproc.c" + break; + + case 38: /* stmt: CallStmt */ +#line 1743 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36666 "preproc.c" + break; + + case 39: /* stmt: CheckPointStmt */ +#line 1745 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36672 "preproc.c" + break; + + case 40: /* stmt: ClosePortalStmt */ +#line 1747 "preproc.y" + { + if (INFORMIX_MODE) + { + if (pg_strcasecmp((yyvsp[0].str)+strlen("close "), "database") == 0) + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in CLOSE DATABASE statement"); + + fprintf(base_yyout, "{ ECPGdisconnect(__LINE__, \"CURRENT\");"); + whenever_action(2); + free((yyvsp[0].str)); + break; + } + } + + output_statement((yyvsp[0].str), 0, ECPGst_normal); + } +#line 36694 "preproc.c" + break; + + case 41: /* stmt: ClusterStmt */ +#line 1765 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36700 "preproc.c" + break; + + case 42: /* stmt: CommentStmt */ +#line 1767 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36706 "preproc.c" + break; + + case 43: /* stmt: ConstraintsSetStmt */ +#line 1769 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36712 "preproc.c" + break; + + case 44: /* stmt: CopyStmt */ +#line 1771 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36718 "preproc.c" + break; + + case 45: /* stmt: CreateAmStmt */ +#line 1773 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36724 "preproc.c" + break; + + case 46: /* stmt: CreateAsStmt */ +#line 1775 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36730 "preproc.c" + break; + + case 47: /* stmt: CreateAssertionStmt */ +#line 1777 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36736 "preproc.c" + break; + + case 48: /* stmt: CreateCastStmt */ +#line 1779 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36742 "preproc.c" + break; + + case 49: /* stmt: CreateConversionStmt */ +#line 1781 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36748 "preproc.c" + break; + + case 50: /* stmt: CreateDomainStmt */ +#line 1783 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36754 "preproc.c" + break; + + case 51: /* stmt: CreateExtensionStmt */ +#line 1785 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36760 "preproc.c" + break; + + case 52: /* stmt: CreateFdwStmt */ +#line 1787 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36766 "preproc.c" + break; + + case 53: /* stmt: CreateForeignServerStmt */ +#line 1789 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36772 "preproc.c" + break; + + case 54: /* stmt: CreateForeignTableStmt */ +#line 1791 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36778 "preproc.c" + break; + + case 55: /* stmt: CreateFunctionStmt */ +#line 1793 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36784 "preproc.c" + break; + + case 56: /* stmt: CreateGroupStmt */ +#line 1795 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36790 "preproc.c" + break; + + case 57: /* stmt: CreateMatViewStmt */ +#line 1797 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36796 "preproc.c" + break; + + case 58: /* stmt: CreateOpClassStmt */ +#line 1799 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36802 "preproc.c" + break; + + case 59: /* stmt: CreateOpFamilyStmt */ +#line 1801 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36808 "preproc.c" + break; + + case 60: /* stmt: CreatePublicationStmt */ +#line 1803 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36814 "preproc.c" + break; + + case 61: /* stmt: AlterOpFamilyStmt */ +#line 1805 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36820 "preproc.c" + break; + + case 62: /* stmt: CreatePolicyStmt */ +#line 1807 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36826 "preproc.c" + break; + + case 63: /* stmt: CreatePLangStmt */ +#line 1809 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36832 "preproc.c" + break; + + case 64: /* stmt: CreateSchemaStmt */ +#line 1811 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36838 "preproc.c" + break; + + case 65: /* stmt: CreateSeqStmt */ +#line 1813 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36844 "preproc.c" + break; + + case 66: /* stmt: CreateStmt */ +#line 1815 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36850 "preproc.c" + break; + + case 67: /* stmt: CreateSubscriptionStmt */ +#line 1817 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36856 "preproc.c" + break; + + case 68: /* stmt: CreateStatsStmt */ +#line 1819 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36862 "preproc.c" + break; + + case 69: /* stmt: CreateTableSpaceStmt */ +#line 1821 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36868 "preproc.c" + break; + + case 70: /* stmt: CreateTransformStmt */ +#line 1823 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36874 "preproc.c" + break; + + case 71: /* stmt: CreateTrigStmt */ +#line 1825 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36880 "preproc.c" + break; + + case 72: /* stmt: CreateEventTrigStmt */ +#line 1827 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36886 "preproc.c" + break; + + case 73: /* stmt: CreateRoleStmt */ +#line 1829 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36892 "preproc.c" + break; + + case 74: /* stmt: CreateUserStmt */ +#line 1831 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36898 "preproc.c" + break; + + case 75: /* stmt: CreateUserMappingStmt */ +#line 1833 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36904 "preproc.c" + break; + + case 76: /* stmt: CreatedbStmt */ +#line 1835 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36910 "preproc.c" + break; + + case 77: /* stmt: DeallocateStmt */ +#line 1837 "preproc.y" + { + output_deallocate_prepare_statement((yyvsp[0].str)); + } +#line 36918 "preproc.c" + break; + + case 78: /* stmt: DeclareCursorStmt */ +#line 1841 "preproc.y" + { output_simple_statement((yyvsp[0].str), (strncmp((yyvsp[0].str), "ECPGset_var", strlen("ECPGset_var")) == 0) ? 4 : 0); } +#line 36924 "preproc.c" + break; + + case 79: /* stmt: DefineStmt */ +#line 1843 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36930 "preproc.c" + break; + + case 80: /* stmt: DeleteStmt */ +#line 1845 "preproc.y" + { output_statement((yyvsp[0].str), 1, ECPGst_prepnormal); } +#line 36936 "preproc.c" + break; + + case 81: /* stmt: DiscardStmt */ +#line 1847 "preproc.y" + { output_statement((yyvsp[0].str), 1, ECPGst_normal); } +#line 36942 "preproc.c" + break; + + case 82: /* stmt: DoStmt */ +#line 1849 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36948 "preproc.c" + break; + + case 83: /* stmt: DropCastStmt */ +#line 1851 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36954 "preproc.c" + break; + + case 84: /* stmt: DropOpClassStmt */ +#line 1853 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36960 "preproc.c" + break; + + case 85: /* stmt: DropOpFamilyStmt */ +#line 1855 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36966 "preproc.c" + break; + + case 86: /* stmt: DropOwnedStmt */ +#line 1857 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36972 "preproc.c" + break; + + case 87: /* stmt: DropStmt */ +#line 1859 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36978 "preproc.c" + break; + + case 88: /* stmt: DropSubscriptionStmt */ +#line 1861 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36984 "preproc.c" + break; + + case 89: /* stmt: DropTableSpaceStmt */ +#line 1863 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36990 "preproc.c" + break; + + case 90: /* stmt: DropTransformStmt */ +#line 1865 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 36996 "preproc.c" + break; + + case 91: /* stmt: DropRoleStmt */ +#line 1867 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37002 "preproc.c" + break; + + case 92: /* stmt: DropUserMappingStmt */ +#line 1869 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37008 "preproc.c" + break; + + case 93: /* stmt: DropdbStmt */ +#line 1871 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37014 "preproc.c" + break; + + case 94: /* stmt: ExecuteStmt */ +#line 1873 "preproc.y" + { + check_declared_list((yyvsp[0].exec).name); + if ((yyvsp[0].exec).type == NULL || strlen((yyvsp[0].exec).type) == 0) + output_statement((yyvsp[0].exec).name, 1, ECPGst_execute); + else + { + if ((yyvsp[0].exec).name[0] != '"') + /* case of char_variable */ + add_variable_to_tail(&argsinsert, find_variable((yyvsp[0].exec).name), &no_indicator); + else + { + /* case of ecpg_ident or CSTRING */ + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *str = mm_strdup((yyvsp[0].exec).name + 1); + + /* It must be cut off double quotation because new_variable() double-quotes. */ + str[strlen(str) - 1] = '\0'; + sprintf(length, "%zu", strlen(str)); + add_variable_to_tail(&argsinsert, new_variable(str, ECPGmake_simple_type(ECPGt_const, length, 0), 0), &no_indicator); + } + output_statement(cat_str(3, mm_strdup("execute"), mm_strdup("$0"), (yyvsp[0].exec).type), 0, ECPGst_exec_with_exprlist); + } + } +#line 37042 "preproc.c" + break; + + case 95: /* stmt: ExplainStmt */ +#line 1897 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37048 "preproc.c" + break; + + case 96: /* stmt: FetchStmt */ +#line 1899 "preproc.y" + { output_statement((yyvsp[0].str), 1, ECPGst_normal); } +#line 37054 "preproc.c" + break; + + case 97: /* stmt: GrantStmt */ +#line 1901 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37060 "preproc.c" + break; + + case 98: /* stmt: GrantRoleStmt */ +#line 1903 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37066 "preproc.c" + break; + + case 99: /* stmt: ImportForeignSchemaStmt */ +#line 1905 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37072 "preproc.c" + break; + + case 100: /* stmt: IndexStmt */ +#line 1907 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37078 "preproc.c" + break; + + case 101: /* stmt: InsertStmt */ +#line 1909 "preproc.y" + { output_statement((yyvsp[0].str), 1, ECPGst_prepnormal); } +#line 37084 "preproc.c" + break; + + case 102: /* stmt: ListenStmt */ +#line 1911 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37090 "preproc.c" + break; + + case 103: /* stmt: RefreshMatViewStmt */ +#line 1913 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37096 "preproc.c" + break; + + case 104: /* stmt: LoadStmt */ +#line 1915 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37102 "preproc.c" + break; + + case 105: /* stmt: LockStmt */ +#line 1917 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37108 "preproc.c" + break; + + case 106: /* stmt: NotifyStmt */ +#line 1919 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37114 "preproc.c" + break; + + case 107: /* stmt: PrepareStmt */ +#line 1921 "preproc.y" + { + check_declared_list((yyvsp[0].prep).name); + if ((yyvsp[0].prep).type == NULL) + output_prepare_statement((yyvsp[0].prep).name, (yyvsp[0].prep).stmt); + else if (strlen((yyvsp[0].prep).type) == 0) + { + char *stmt = cat_str(3, mm_strdup("\""), (yyvsp[0].prep).stmt, mm_strdup("\"")); + output_prepare_statement((yyvsp[0].prep).name, stmt); + } + else + { + if ((yyvsp[0].prep).name[0] != '"') + /* case of char_variable */ + add_variable_to_tail(&argsinsert, find_variable((yyvsp[0].prep).name), &no_indicator); + else + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *str = mm_strdup((yyvsp[0].prep).name + 1); + + /* It must be cut off double quotation because new_variable() double-quotes. */ + str[strlen(str) - 1] = '\0'; + sprintf(length, "%zu", strlen(str)); + add_variable_to_tail(&argsinsert, new_variable(str, ECPGmake_simple_type(ECPGt_const, length, 0), 0), &no_indicator); + } + output_statement(cat_str(5, mm_strdup("prepare"), mm_strdup("$0"), (yyvsp[0].prep).type, mm_strdup("as"), (yyvsp[0].prep).stmt), 0, ECPGst_prepare); + } + } +#line 37146 "preproc.c" + break; + + case 108: /* stmt: ReassignOwnedStmt */ +#line 1949 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37152 "preproc.c" + break; + + case 109: /* stmt: ReindexStmt */ +#line 1951 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37158 "preproc.c" + break; + + case 110: /* stmt: RemoveAggrStmt */ +#line 1953 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37164 "preproc.c" + break; + + case 111: /* stmt: RemoveFuncStmt */ +#line 1955 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37170 "preproc.c" + break; + + case 112: /* stmt: RemoveOperStmt */ +#line 1957 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37176 "preproc.c" + break; + + case 113: /* stmt: RenameStmt */ +#line 1959 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37182 "preproc.c" + break; + + case 114: /* stmt: RevokeStmt */ +#line 1961 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37188 "preproc.c" + break; + + case 115: /* stmt: RevokeRoleStmt */ +#line 1963 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37194 "preproc.c" + break; + + case 116: /* stmt: RuleStmt */ +#line 1965 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37200 "preproc.c" + break; + + case 117: /* stmt: SecLabelStmt */ +#line 1967 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37206 "preproc.c" + break; + + case 118: /* stmt: SelectStmt */ +#line 1969 "preproc.y" + { output_statement((yyvsp[0].str), 1, ECPGst_prepnormal); } +#line 37212 "preproc.c" + break; + + case 119: /* stmt: TransactionStmt */ +#line 1971 "preproc.y" + { + fprintf(base_yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", (yyvsp[0].str)); + whenever_action(2); + free((yyvsp[0].str)); + } +#line 37222 "preproc.c" + break; + + case 120: /* stmt: TruncateStmt */ +#line 1977 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37228 "preproc.c" + break; + + case 121: /* stmt: UnlistenStmt */ +#line 1979 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37234 "preproc.c" + break; + + case 122: /* stmt: UpdateStmt */ +#line 1981 "preproc.y" + { output_statement((yyvsp[0].str), 1, ECPGst_prepnormal); } +#line 37240 "preproc.c" + break; + + case 123: /* stmt: VacuumStmt */ +#line 1983 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37246 "preproc.c" + break; + + case 124: /* stmt: VariableResetStmt */ +#line 1985 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37252 "preproc.c" + break; + + case 125: /* stmt: VariableSetStmt */ +#line 1987 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37258 "preproc.c" + break; + + case 126: /* stmt: VariableShowStmt */ +#line 1989 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37264 "preproc.c" + break; + + case 127: /* stmt: ViewStmt */ +#line 1991 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_normal); } +#line 37270 "preproc.c" + break; + + case 128: /* stmt: ECPGAllocateDescr */ +#line 1993 "preproc.y" + { + fprintf(base_yyout,"ECPGallocate_desc(__LINE__, %s);",(yyvsp[0].str)); + whenever_action(0); + free((yyvsp[0].str)); + } +#line 37280 "preproc.c" + break; + + case 129: /* stmt: ECPGConnect */ +#line 1999 "preproc.y" + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in CONNECT statement"); + + fprintf(base_yyout, "{ ECPGconnect(__LINE__, %d, %s, %d); ", compat, (yyvsp[0].str), autocommit); + reset_variables(); + whenever_action(2); + free((yyvsp[0].str)); + } +#line 37294 "preproc.c" + break; + + case 130: /* stmt: ECPGDeclareStmt */ +#line 2009 "preproc.y" + { + output_simple_statement((yyvsp[0].str), 0); + } +#line 37302 "preproc.c" + break; + + case 131: /* stmt: ECPGCursorStmt */ +#line 2013 "preproc.y" + { + output_simple_statement((yyvsp[0].str), (strncmp((yyvsp[0].str), "ECPGset_var", strlen("ECPGset_var")) == 0) ? 4 : 0); + } +#line 37310 "preproc.c" + break; + + case 132: /* stmt: ECPGDeallocateDescr */ +#line 2017 "preproc.y" + { + fprintf(base_yyout,"ECPGdeallocate_desc(__LINE__, %s);",(yyvsp[0].str)); + whenever_action(0); + free((yyvsp[0].str)); + } +#line 37320 "preproc.c" + break; + + case 133: /* stmt: ECPGDeclare */ +#line 2023 "preproc.y" + { + output_simple_statement((yyvsp[0].str), 0); + } +#line 37328 "preproc.c" + break; + + case 134: /* stmt: ECPGDescribe */ +#line 2027 "preproc.y" + { + check_declared_list((yyvsp[0].describe).stmt_name); + + fprintf(base_yyout, "{ ECPGdescribe(__LINE__, %d, %d, %s, %s,", compat, (yyvsp[0].describe).input, connection ? connection : "NULL", (yyvsp[0].describe).stmt_name); + dump_variables(argsresult, 1); + fputs("ECPGt_EORT);", base_yyout); + fprintf(base_yyout, "}"); + output_line_number(); + + free((yyvsp[0].describe).stmt_name); + } +#line 37344 "preproc.c" + break; + + case 135: /* stmt: ECPGDisconnect */ +#line 2039 "preproc.y" + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in DISCONNECT statement"); + + fprintf(base_yyout, "{ ECPGdisconnect(__LINE__, %s);", + (yyvsp[0].str) ? (yyvsp[0].str) : "\"CURRENT\""); + whenever_action(2); + free((yyvsp[0].str)); + } +#line 37358 "preproc.c" + break; + + case 136: /* stmt: ECPGExecuteImmediateStmt */ +#line 2048 "preproc.y" + { output_statement((yyvsp[0].str), 0, ECPGst_exec_immediate); } +#line 37364 "preproc.c" + break; + + case 137: /* stmt: ECPGFree */ +#line 2050 "preproc.y" + { + const char *con = connection ? connection : "NULL"; + + if (strcmp((yyvsp[0].str), "all") == 0) + fprintf(base_yyout, "{ ECPGdeallocate_all(__LINE__, %d, %s);", compat, con); + else if ((yyvsp[0].str)[0] == ':') + fprintf(base_yyout, "{ ECPGdeallocate(__LINE__, %d, %s, %s);", compat, con, (yyvsp[0].str)+1); + else + fprintf(base_yyout, "{ ECPGdeallocate(__LINE__, %d, %s, \"%s\");", compat, con, (yyvsp[0].str)); + + whenever_action(2); + free((yyvsp[0].str)); + } +#line 37382 "preproc.c" + break; + + case 138: /* stmt: ECPGGetDescriptor */ +#line 2064 "preproc.y" + { + lookup_descriptor((yyvsp[0].descriptor).name, connection); + output_get_descr((yyvsp[0].descriptor).name, (yyvsp[0].descriptor).str); + free((yyvsp[0].descriptor).name); + free((yyvsp[0].descriptor).str); + } +#line 37393 "preproc.c" + break; + + case 139: /* stmt: ECPGGetDescriptorHeader */ +#line 2071 "preproc.y" + { + lookup_descriptor((yyvsp[0].str), connection); + output_get_descr_header((yyvsp[0].str)); + free((yyvsp[0].str)); + } +#line 37403 "preproc.c" + break; + + case 140: /* stmt: ECPGOpen */ +#line 2077 "preproc.y" + { + struct cursor *ptr; + + if ((ptr = add_additional_variables((yyvsp[0].str), true)) != NULL) + { + connection = ptr->connection ? mm_strdup(ptr->connection) : NULL; + output_statement(mm_strdup(ptr->command), 0, ECPGst_normal); + ptr->opened = true; + } + } +#line 37418 "preproc.c" + break; + + case 141: /* stmt: ECPGSetAutocommit */ +#line 2088 "preproc.y" + { + fprintf(base_yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", (yyvsp[0].str), connection ? connection : "NULL"); + whenever_action(2); + free((yyvsp[0].str)); + } +#line 37428 "preproc.c" + break; + + case 142: /* stmt: ECPGSetConnection */ +#line 2094 "preproc.y" + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in SET CONNECTION statement"); + + fprintf(base_yyout, "{ ECPGsetconn(__LINE__, %s);", (yyvsp[0].str)); + whenever_action(2); + free((yyvsp[0].str)); + } +#line 37441 "preproc.c" + break; + + case 143: /* stmt: ECPGSetDescriptor */ +#line 2103 "preproc.y" + { + lookup_descriptor((yyvsp[0].descriptor).name, connection); + output_set_descr((yyvsp[0].descriptor).name, (yyvsp[0].descriptor).str); + free((yyvsp[0].descriptor).name); + free((yyvsp[0].descriptor).str); + } +#line 37452 "preproc.c" + break; + + case 144: /* stmt: ECPGSetDescriptorHeader */ +#line 2110 "preproc.y" + { + lookup_descriptor((yyvsp[0].str), connection); + output_set_descr_header((yyvsp[0].str)); + free((yyvsp[0].str)); + } +#line 37462 "preproc.c" + break; + + case 145: /* stmt: ECPGTypedef */ +#line 2116 "preproc.y" + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in TYPE statement"); + + fprintf(base_yyout, "%s", (yyvsp[0].str)); + free((yyvsp[0].str)); + output_line_number(); + } +#line 37475 "preproc.c" + break; + + case 146: /* stmt: ECPGVar */ +#line 2125 "preproc.y" + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in VAR statement"); + + output_simple_statement((yyvsp[0].str), 0); + } +#line 37486 "preproc.c" + break; + + case 147: /* stmt: ECPGWhenever */ +#line 2132 "preproc.y" + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in WHENEVER statement"); + + output_simple_statement((yyvsp[0].str), 0); + } +#line 37497 "preproc.c" + break; + + case 148: /* stmt: %empty */ +#line 2139 "preproc.y" + { (yyval.str) = NULL; } +#line 37503 "preproc.c" + break; + + case 149: /* CallStmt: CALL func_application */ +#line 2145 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("call"),(yyvsp[0].str)); +} +#line 37511 "preproc.c" + break; + + case 150: /* CreateRoleStmt: CREATE ROLE RoleId opt_with OptRoleList */ +#line 2153 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create role"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37519 "preproc.c" + break; + + case 151: /* opt_with: WITH */ +#line 2161 "preproc.y" + { + (yyval.str) = mm_strdup("with"); +} +#line 37527 "preproc.c" + break; + + case 152: /* opt_with: WITH_LA */ +#line 2165 "preproc.y" + { + (yyval.str) = mm_strdup("with"); +} +#line 37535 "preproc.c" + break; + + case 153: /* opt_with: %empty */ +#line 2169 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 37542 "preproc.c" + break; + + case 154: /* OptRoleList: OptRoleList CreateOptRoleElem */ +#line 2176 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37550 "preproc.c" + break; + + case 155: /* OptRoleList: %empty */ +#line 2180 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 37557 "preproc.c" + break; + + case 156: /* AlterOptRoleList: AlterOptRoleList AlterOptRoleElem */ +#line 2187 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37565 "preproc.c" + break; + + case 157: /* AlterOptRoleList: %empty */ +#line 2191 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 37572 "preproc.c" + break; + + case 158: /* AlterOptRoleElem: PASSWORD ecpg_sconst */ +#line 2198 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("password"),(yyvsp[0].str)); +} +#line 37580 "preproc.c" + break; + + case 159: /* AlterOptRoleElem: PASSWORD NULL_P */ +#line 2202 "preproc.y" + { + (yyval.str) = mm_strdup("password null"); +} +#line 37588 "preproc.c" + break; + + case 160: /* AlterOptRoleElem: ENCRYPTED PASSWORD ecpg_sconst */ +#line 2206 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("encrypted password"),(yyvsp[0].str)); +} +#line 37596 "preproc.c" + break; + + case 161: /* AlterOptRoleElem: UNENCRYPTED PASSWORD ecpg_sconst */ +#line 2210 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = cat_str(2,mm_strdup("unencrypted password"),(yyvsp[0].str)); +} +#line 37605 "preproc.c" + break; + + case 162: /* AlterOptRoleElem: INHERIT */ +#line 2215 "preproc.y" + { + (yyval.str) = mm_strdup("inherit"); +} +#line 37613 "preproc.c" + break; + + case 163: /* AlterOptRoleElem: CONNECTION LIMIT SignedIconst */ +#line 2219 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("connection limit"),(yyvsp[0].str)); +} +#line 37621 "preproc.c" + break; + + case 164: /* AlterOptRoleElem: VALID UNTIL ecpg_sconst */ +#line 2223 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("valid until"),(yyvsp[0].str)); +} +#line 37629 "preproc.c" + break; + + case 165: /* AlterOptRoleElem: USER role_list */ +#line 2227 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("user"),(yyvsp[0].str)); +} +#line 37637 "preproc.c" + break; + + case 166: /* AlterOptRoleElem: ecpg_ident */ +#line 2231 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 37645 "preproc.c" + break; + + case 167: /* CreateOptRoleElem: AlterOptRoleElem */ +#line 2239 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 37653 "preproc.c" + break; + + case 168: /* CreateOptRoleElem: SYSID Iconst */ +#line 2243 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("sysid"),(yyvsp[0].str)); +} +#line 37661 "preproc.c" + break; + + case 169: /* CreateOptRoleElem: ADMIN role_list */ +#line 2247 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("admin"),(yyvsp[0].str)); +} +#line 37669 "preproc.c" + break; + + case 170: /* CreateOptRoleElem: ROLE role_list */ +#line 2251 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("role"),(yyvsp[0].str)); +} +#line 37677 "preproc.c" + break; + + case 171: /* CreateOptRoleElem: IN_P ROLE role_list */ +#line 2255 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("in role"),(yyvsp[0].str)); +} +#line 37685 "preproc.c" + break; + + case 172: /* CreateOptRoleElem: IN_P GROUP_P role_list */ +#line 2259 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("in group"),(yyvsp[0].str)); +} +#line 37693 "preproc.c" + break; + + case 173: /* CreateUserStmt: CREATE USER RoleId opt_with OptRoleList */ +#line 2267 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create user"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37701 "preproc.c" + break; + + case 174: /* AlterRoleStmt: ALTER ROLE RoleSpec opt_with AlterOptRoleList */ +#line 2275 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter role"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37709 "preproc.c" + break; + + case 175: /* AlterRoleStmt: ALTER USER RoleSpec opt_with AlterOptRoleList */ +#line 2279 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter user"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37717 "preproc.c" + break; + + case 176: /* opt_in_database: %empty */ +#line 2287 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 37724 "preproc.c" + break; + + case 177: /* opt_in_database: IN_P DATABASE name */ +#line 2290 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("in database"),(yyvsp[0].str)); +} +#line 37732 "preproc.c" + break; + + case 178: /* AlterRoleSetStmt: ALTER ROLE RoleSpec opt_in_database SetResetClause */ +#line 2298 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter role"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37740 "preproc.c" + break; + + case 179: /* AlterRoleSetStmt: ALTER ROLE ALL opt_in_database SetResetClause */ +#line 2302 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter role all"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37748 "preproc.c" + break; + + case 180: /* AlterRoleSetStmt: ALTER USER RoleSpec opt_in_database SetResetClause */ +#line 2306 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter user"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37756 "preproc.c" + break; + + case 181: /* AlterRoleSetStmt: ALTER USER ALL opt_in_database SetResetClause */ +#line 2310 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter user all"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37764 "preproc.c" + break; + + case 182: /* DropRoleStmt: DROP ROLE role_list */ +#line 2318 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop role"),(yyvsp[0].str)); +} +#line 37772 "preproc.c" + break; + + case 183: /* DropRoleStmt: DROP ROLE IF_P EXISTS role_list */ +#line 2322 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop role if exists"),(yyvsp[0].str)); +} +#line 37780 "preproc.c" + break; + + case 184: /* DropRoleStmt: DROP USER role_list */ +#line 2326 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop user"),(yyvsp[0].str)); +} +#line 37788 "preproc.c" + break; + + case 185: /* DropRoleStmt: DROP USER IF_P EXISTS role_list */ +#line 2330 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop user if exists"),(yyvsp[0].str)); +} +#line 37796 "preproc.c" + break; + + case 186: /* DropRoleStmt: DROP GROUP_P role_list */ +#line 2334 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop group"),(yyvsp[0].str)); +} +#line 37804 "preproc.c" + break; + + case 187: /* DropRoleStmt: DROP GROUP_P IF_P EXISTS role_list */ +#line 2338 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop group if exists"),(yyvsp[0].str)); +} +#line 37812 "preproc.c" + break; + + case 188: /* CreateGroupStmt: CREATE GROUP_P RoleId opt_with OptRoleList */ +#line 2346 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create group"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37820 "preproc.c" + break; + + case 189: /* AlterGroupStmt: ALTER GROUP_P RoleSpec add_drop USER role_list */ +#line 2354 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter group"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("user"),(yyvsp[0].str)); +} +#line 37828 "preproc.c" + break; + + case 190: /* add_drop: ADD_P */ +#line 2362 "preproc.y" + { + (yyval.str) = mm_strdup("add"); +} +#line 37836 "preproc.c" + break; + + case 191: /* add_drop: DROP */ +#line 2366 "preproc.y" + { + (yyval.str) = mm_strdup("drop"); +} +#line 37844 "preproc.c" + break; + + case 192: /* CreateSchemaStmt: CREATE SCHEMA OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList */ +#line 2374 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("create schema"),(yyvsp[-3].str),mm_strdup("authorization"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37852 "preproc.c" + break; + + case 193: /* CreateSchemaStmt: CREATE SCHEMA ColId OptSchemaEltList */ +#line 2378 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("create schema"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37860 "preproc.c" + break; + + case 194: /* CreateSchemaStmt: CREATE SCHEMA IF_P NOT EXISTS OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList */ +#line 2382 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = cat_str(5,mm_strdup("create schema if not exists"),(yyvsp[-3].str),mm_strdup("authorization"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37869 "preproc.c" + break; + + case 195: /* CreateSchemaStmt: CREATE SCHEMA IF_P NOT EXISTS ColId OptSchemaEltList */ +#line 2387 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = cat_str(3,mm_strdup("create schema if not exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37878 "preproc.c" + break; + + case 196: /* OptSchemaName: ColId */ +#line 2396 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 37886 "preproc.c" + break; + + case 197: /* OptSchemaName: %empty */ +#line 2400 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 37893 "preproc.c" + break; + + case 198: /* OptSchemaEltList: OptSchemaEltList schema_stmt */ +#line 2407 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 37901 "preproc.c" + break; + + case 199: /* OptSchemaEltList: %empty */ +#line 2411 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 37908 "preproc.c" + break; + + case 200: /* schema_stmt: CreateStmt */ +#line 2418 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 37916 "preproc.c" + break; + + case 201: /* schema_stmt: IndexStmt */ +#line 2422 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 37924 "preproc.c" + break; + + case 202: /* schema_stmt: CreateSeqStmt */ +#line 2426 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 37932 "preproc.c" + break; + + case 203: /* schema_stmt: CreateTrigStmt */ +#line 2430 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 37940 "preproc.c" + break; + + case 204: /* schema_stmt: GrantStmt */ +#line 2434 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 37948 "preproc.c" + break; + + case 205: /* schema_stmt: ViewStmt */ +#line 2438 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 37956 "preproc.c" + break; + + case 206: /* VariableSetStmt: SET set_rest */ +#line 2446 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set"),(yyvsp[0].str)); +} +#line 37964 "preproc.c" + break; + + case 207: /* VariableSetStmt: SET LOCAL set_rest */ +#line 2450 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set local"),(yyvsp[0].str)); +} +#line 37972 "preproc.c" + break; + + case 208: /* VariableSetStmt: SET SESSION set_rest */ +#line 2454 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set session"),(yyvsp[0].str)); +} +#line 37980 "preproc.c" + break; + + case 209: /* set_rest: TRANSACTION transaction_mode_list */ +#line 2462 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("transaction"),(yyvsp[0].str)); +} +#line 37988 "preproc.c" + break; + + case 210: /* set_rest: SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list */ +#line 2466 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("session characteristics as transaction"),(yyvsp[0].str)); +} +#line 37996 "preproc.c" + break; + + case 211: /* set_rest: set_rest_more */ +#line 2470 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38004 "preproc.c" + break; + + case 212: /* generic_set: var_name TO var_list */ +#line 2478 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 38012 "preproc.c" + break; + + case 213: /* generic_set: var_name '=' var_list */ +#line 2482 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("="),(yyvsp[0].str)); +} +#line 38020 "preproc.c" + break; + + case 214: /* generic_set: var_name TO DEFAULT */ +#line 2486 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("to default")); +} +#line 38028 "preproc.c" + break; + + case 215: /* generic_set: var_name '=' DEFAULT */ +#line 2490 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("= default")); +} +#line 38036 "preproc.c" + break; + + case 216: /* set_rest_more: generic_set */ +#line 2498 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38044 "preproc.c" + break; + + case 217: /* set_rest_more: var_name FROM CURRENT_P */ +#line 2502 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("from current")); +} +#line 38052 "preproc.c" + break; + + case 218: /* set_rest_more: TIME ZONE zone_value */ +#line 2506 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("time zone"),(yyvsp[0].str)); +} +#line 38060 "preproc.c" + break; + + case 219: /* set_rest_more: CATALOG_P ecpg_sconst */ +#line 2510 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = cat_str(2,mm_strdup("catalog"),(yyvsp[0].str)); +} +#line 38069 "preproc.c" + break; + + case 220: /* set_rest_more: SCHEMA ecpg_sconst */ +#line 2515 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("schema"),(yyvsp[0].str)); +} +#line 38077 "preproc.c" + break; + + case 221: /* set_rest_more: NAMES opt_encoding */ +#line 2519 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("names"),(yyvsp[0].str)); +} +#line 38085 "preproc.c" + break; + + case 222: /* set_rest_more: ROLE NonReservedWord_or_Sconst */ +#line 2523 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("role"),(yyvsp[0].str)); +} +#line 38093 "preproc.c" + break; + + case 223: /* set_rest_more: SESSION AUTHORIZATION NonReservedWord_or_Sconst */ +#line 2527 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("session authorization"),(yyvsp[0].str)); +} +#line 38101 "preproc.c" + break; + + case 224: /* set_rest_more: SESSION AUTHORIZATION DEFAULT */ +#line 2531 "preproc.y" + { + (yyval.str) = mm_strdup("session authorization default"); +} +#line 38109 "preproc.c" + break; + + case 225: /* set_rest_more: XML_P OPTION document_or_content */ +#line 2535 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("xml option"),(yyvsp[0].str)); +} +#line 38117 "preproc.c" + break; + + case 226: /* set_rest_more: TRANSACTION SNAPSHOT ecpg_sconst */ +#line 2539 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("transaction snapshot"),(yyvsp[0].str)); +} +#line 38125 "preproc.c" + break; + + case 227: /* var_name: ECPGColId */ +#line 2547 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38133 "preproc.c" + break; + + case 228: /* var_name: var_name '.' ColId */ +#line 2551 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("."),(yyvsp[0].str)); +} +#line 38141 "preproc.c" + break; + + case 229: /* var_list: var_value */ +#line 2559 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38149 "preproc.c" + break; + + case 230: /* var_list: var_list ',' var_value */ +#line 2563 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 38157 "preproc.c" + break; + + case 231: /* var_value: opt_boolean_or_string */ +#line 2571 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38165 "preproc.c" + break; + + case 232: /* var_value: NumericOnly */ +#line 2575 "preproc.y" + { + if ((yyvsp[0].str)[0] == '$') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + + (yyval.str) = (yyvsp[0].str); +} +#line 38179 "preproc.c" + break; + + case 233: /* iso_level: READ UNCOMMITTED */ +#line 2589 "preproc.y" + { + (yyval.str) = mm_strdup("read uncommitted"); +} +#line 38187 "preproc.c" + break; + + case 234: /* iso_level: READ COMMITTED */ +#line 2593 "preproc.y" + { + (yyval.str) = mm_strdup("read committed"); +} +#line 38195 "preproc.c" + break; + + case 235: /* iso_level: REPEATABLE READ */ +#line 2597 "preproc.y" + { + (yyval.str) = mm_strdup("repeatable read"); +} +#line 38203 "preproc.c" + break; + + case 236: /* iso_level: SERIALIZABLE */ +#line 2601 "preproc.y" + { + (yyval.str) = mm_strdup("serializable"); +} +#line 38211 "preproc.c" + break; + + case 237: /* opt_boolean_or_string: TRUE_P */ +#line 2609 "preproc.y" + { + (yyval.str) = mm_strdup("true"); +} +#line 38219 "preproc.c" + break; + + case 238: /* opt_boolean_or_string: FALSE_P */ +#line 2613 "preproc.y" + { + (yyval.str) = mm_strdup("false"); +} +#line 38227 "preproc.c" + break; + + case 239: /* opt_boolean_or_string: ON */ +#line 2617 "preproc.y" + { + (yyval.str) = mm_strdup("on"); +} +#line 38235 "preproc.c" + break; + + case 240: /* opt_boolean_or_string: NonReservedWord_or_Sconst */ +#line 2621 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38243 "preproc.c" + break; + + case 241: /* zone_value: ecpg_sconst */ +#line 2629 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38251 "preproc.c" + break; + + case 242: /* zone_value: ecpg_ident */ +#line 2633 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38259 "preproc.c" + break; + + case 243: /* zone_value: ConstInterval ecpg_sconst opt_interval */ +#line 2637 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38267 "preproc.c" + break; + + case 244: /* zone_value: ConstInterval '(' Iconst ')' ecpg_sconst */ +#line 2641 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 38275 "preproc.c" + break; + + case 245: /* zone_value: NumericOnly */ +#line 2645 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38283 "preproc.c" + break; + + case 246: /* zone_value: DEFAULT */ +#line 2649 "preproc.y" + { + (yyval.str) = mm_strdup("default"); +} +#line 38291 "preproc.c" + break; + + case 247: /* zone_value: LOCAL */ +#line 2653 "preproc.y" + { + (yyval.str) = mm_strdup("local"); +} +#line 38299 "preproc.c" + break; + + case 248: /* opt_encoding: ecpg_sconst */ +#line 2661 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38307 "preproc.c" + break; + + case 249: /* opt_encoding: DEFAULT */ +#line 2665 "preproc.y" + { + (yyval.str) = mm_strdup("default"); +} +#line 38315 "preproc.c" + break; + + case 250: /* opt_encoding: %empty */ +#line 2669 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 38322 "preproc.c" + break; + + case 251: /* NonReservedWord_or_Sconst: NonReservedWord */ +#line 2676 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38330 "preproc.c" + break; + + case 252: /* NonReservedWord_or_Sconst: ecpg_sconst */ +#line 2680 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38338 "preproc.c" + break; + + case 253: /* VariableResetStmt: RESET reset_rest */ +#line 2688 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("reset"),(yyvsp[0].str)); +} +#line 38346 "preproc.c" + break; + + case 254: /* reset_rest: generic_reset */ +#line 2696 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38354 "preproc.c" + break; + + case 255: /* reset_rest: TIME ZONE */ +#line 2700 "preproc.y" + { + (yyval.str) = mm_strdup("time zone"); +} +#line 38362 "preproc.c" + break; + + case 256: /* reset_rest: TRANSACTION ISOLATION LEVEL */ +#line 2704 "preproc.y" + { + (yyval.str) = mm_strdup("transaction isolation level"); +} +#line 38370 "preproc.c" + break; + + case 257: /* reset_rest: SESSION AUTHORIZATION */ +#line 2708 "preproc.y" + { + (yyval.str) = mm_strdup("session authorization"); +} +#line 38378 "preproc.c" + break; + + case 258: /* generic_reset: var_name */ +#line 2716 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38386 "preproc.c" + break; + + case 259: /* generic_reset: ALL */ +#line 2720 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 38394 "preproc.c" + break; + + case 260: /* SetResetClause: SET set_rest */ +#line 2728 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set"),(yyvsp[0].str)); +} +#line 38402 "preproc.c" + break; + + case 261: /* SetResetClause: VariableResetStmt */ +#line 2732 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38410 "preproc.c" + break; + + case 262: /* FunctionSetResetClause: SET set_rest_more */ +#line 2740 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set"),(yyvsp[0].str)); +} +#line 38418 "preproc.c" + break; + + case 263: /* FunctionSetResetClause: VariableResetStmt */ +#line 2744 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38426 "preproc.c" + break; + + case 264: /* VariableShowStmt: SHOW var_name ecpg_into */ +#line 2752 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("show"),(yyvsp[-1].str)); +} +#line 38434 "preproc.c" + break; + + case 265: /* VariableShowStmt: SHOW TIME ZONE ecpg_into */ +#line 2756 "preproc.y" + { + (yyval.str) = mm_strdup("show time zone"); +} +#line 38442 "preproc.c" + break; + + case 266: /* VariableShowStmt: SHOW TRANSACTION ISOLATION LEVEL ecpg_into */ +#line 2760 "preproc.y" + { + (yyval.str) = mm_strdup("show transaction isolation level"); +} +#line 38450 "preproc.c" + break; + + case 267: /* VariableShowStmt: SHOW SESSION AUTHORIZATION ecpg_into */ +#line 2764 "preproc.y" + { + (yyval.str) = mm_strdup("show session authorization"); +} +#line 38458 "preproc.c" + break; + + case 268: /* VariableShowStmt: SHOW ALL */ +#line 2768 "preproc.y" + { + mmerror(PARSE_ERROR, ET_ERROR, "SHOW ALL is not implemented"); + (yyval.str) = EMPTY; + } +#line 38467 "preproc.c" + break; + + case 269: /* ConstraintsSetStmt: SET CONSTRAINTS constraints_set_list constraints_set_mode */ +#line 2777 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("set constraints"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38475 "preproc.c" + break; + + case 270: /* constraints_set_list: ALL */ +#line 2785 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 38483 "preproc.c" + break; + + case 271: /* constraints_set_list: qualified_name_list */ +#line 2789 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38491 "preproc.c" + break; + + case 272: /* constraints_set_mode: DEFERRED */ +#line 2797 "preproc.y" + { + (yyval.str) = mm_strdup("deferred"); +} +#line 38499 "preproc.c" + break; + + case 273: /* constraints_set_mode: IMMEDIATE */ +#line 2801 "preproc.y" + { + (yyval.str) = mm_strdup("immediate"); +} +#line 38507 "preproc.c" + break; + + case 274: /* CheckPointStmt: CHECKPOINT */ +#line 2809 "preproc.y" + { + (yyval.str) = mm_strdup("checkpoint"); +} +#line 38515 "preproc.c" + break; + + case 275: /* DiscardStmt: DISCARD ALL */ +#line 2817 "preproc.y" + { + (yyval.str) = mm_strdup("discard all"); +} +#line 38523 "preproc.c" + break; + + case 276: /* DiscardStmt: DISCARD TEMP */ +#line 2821 "preproc.y" + { + (yyval.str) = mm_strdup("discard temp"); +} +#line 38531 "preproc.c" + break; + + case 277: /* DiscardStmt: DISCARD TEMPORARY */ +#line 2825 "preproc.y" + { + (yyval.str) = mm_strdup("discard temporary"); +} +#line 38539 "preproc.c" + break; + + case 278: /* DiscardStmt: DISCARD PLANS */ +#line 2829 "preproc.y" + { + (yyval.str) = mm_strdup("discard plans"); +} +#line 38547 "preproc.c" + break; + + case 279: /* DiscardStmt: DISCARD SEQUENCES */ +#line 2833 "preproc.y" + { + (yyval.str) = mm_strdup("discard sequences"); +} +#line 38555 "preproc.c" + break; + + case 280: /* AlterTableStmt: ALTER TABLE relation_expr alter_table_cmds */ +#line 2841 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter table"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38563 "preproc.c" + break; + + case 281: /* AlterTableStmt: ALTER TABLE IF_P EXISTS relation_expr alter_table_cmds */ +#line 2845 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter table if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38571 "preproc.c" + break; + + case 282: /* AlterTableStmt: ALTER TABLE relation_expr partition_cmd */ +#line 2849 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter table"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38579 "preproc.c" + break; + + case 283: /* AlterTableStmt: ALTER TABLE IF_P EXISTS relation_expr partition_cmd */ +#line 2853 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter table if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38587 "preproc.c" + break; + + case 284: /* AlterTableStmt: ALTER TABLE ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait */ +#line 2857 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter table all in tablespace"),(yyvsp[-4].str),mm_strdup("set tablespace"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38595 "preproc.c" + break; + + case 285: /* AlterTableStmt: ALTER TABLE ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait */ +#line 2861 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter table all in tablespace"),(yyvsp[-7].str),mm_strdup("owned by"),(yyvsp[-4].str),mm_strdup("set tablespace"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38603 "preproc.c" + break; + + case 286: /* AlterTableStmt: ALTER INDEX qualified_name alter_table_cmds */ +#line 2865 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter index"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38611 "preproc.c" + break; + + case 287: /* AlterTableStmt: ALTER INDEX IF_P EXISTS qualified_name alter_table_cmds */ +#line 2869 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter index if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38619 "preproc.c" + break; + + case 288: /* AlterTableStmt: ALTER INDEX qualified_name index_partition_cmd */ +#line 2873 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter index"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38627 "preproc.c" + break; + + case 289: /* AlterTableStmt: ALTER INDEX ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait */ +#line 2877 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter index all in tablespace"),(yyvsp[-4].str),mm_strdup("set tablespace"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38635 "preproc.c" + break; + + case 290: /* AlterTableStmt: ALTER INDEX ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait */ +#line 2881 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter index all in tablespace"),(yyvsp[-7].str),mm_strdup("owned by"),(yyvsp[-4].str),mm_strdup("set tablespace"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38643 "preproc.c" + break; + + case 291: /* AlterTableStmt: ALTER SEQUENCE qualified_name alter_table_cmds */ +#line 2885 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter sequence"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38651 "preproc.c" + break; + + case 292: /* AlterTableStmt: ALTER SEQUENCE IF_P EXISTS qualified_name alter_table_cmds */ +#line 2889 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter sequence if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38659 "preproc.c" + break; + + case 293: /* AlterTableStmt: ALTER VIEW qualified_name alter_table_cmds */ +#line 2893 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter view"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38667 "preproc.c" + break; + + case 294: /* AlterTableStmt: ALTER VIEW IF_P EXISTS qualified_name alter_table_cmds */ +#line 2897 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter view if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38675 "preproc.c" + break; + + case 295: /* AlterTableStmt: ALTER MATERIALIZED VIEW qualified_name alter_table_cmds */ +#line 2901 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter materialized view"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38683 "preproc.c" + break; + + case 296: /* AlterTableStmt: ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name alter_table_cmds */ +#line 2905 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter materialized view if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38691 "preproc.c" + break; + + case 297: /* AlterTableStmt: ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait */ +#line 2909 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter materialized view all in tablespace"),(yyvsp[-4].str),mm_strdup("set tablespace"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38699 "preproc.c" + break; + + case 298: /* AlterTableStmt: ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait */ +#line 2913 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter materialized view all in tablespace"),(yyvsp[-7].str),mm_strdup("owned by"),(yyvsp[-4].str),mm_strdup("set tablespace"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38707 "preproc.c" + break; + + case 299: /* AlterTableStmt: ALTER FOREIGN TABLE relation_expr alter_table_cmds */ +#line 2917 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter foreign table"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38715 "preproc.c" + break; + + case 300: /* AlterTableStmt: ALTER FOREIGN TABLE IF_P EXISTS relation_expr alter_table_cmds */ +#line 2921 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter foreign table if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38723 "preproc.c" + break; + + case 301: /* alter_table_cmds: alter_table_cmd */ +#line 2929 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 38731 "preproc.c" + break; + + case 302: /* alter_table_cmds: alter_table_cmds ',' alter_table_cmd */ +#line 2933 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 38739 "preproc.c" + break; + + case 303: /* partition_cmd: ATTACH PARTITION qualified_name PartitionBoundSpec */ +#line 2941 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("attach partition"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38747 "preproc.c" + break; + + case 304: /* partition_cmd: DETACH PARTITION qualified_name opt_concurrently */ +#line 2945 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("detach partition"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38755 "preproc.c" + break; + + case 305: /* partition_cmd: DETACH PARTITION qualified_name FINALIZE */ +#line 2949 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("detach partition"),(yyvsp[-1].str),mm_strdup("finalize")); +} +#line 38763 "preproc.c" + break; + + case 306: /* index_partition_cmd: ATTACH PARTITION qualified_name */ +#line 2957 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("attach partition"),(yyvsp[0].str)); +} +#line 38771 "preproc.c" + break; + + case 307: /* alter_table_cmd: ADD_P columnDef */ +#line 2965 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("add"),(yyvsp[0].str)); +} +#line 38779 "preproc.c" + break; + + case 308: /* alter_table_cmd: ADD_P IF_P NOT EXISTS columnDef */ +#line 2969 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("add if not exists"),(yyvsp[0].str)); +} +#line 38787 "preproc.c" + break; + + case 309: /* alter_table_cmd: ADD_P COLUMN columnDef */ +#line 2973 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("add column"),(yyvsp[0].str)); +} +#line 38795 "preproc.c" + break; + + case 310: /* alter_table_cmd: ADD_P COLUMN IF_P NOT EXISTS columnDef */ +#line 2977 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("add column if not exists"),(yyvsp[0].str)); +} +#line 38803 "preproc.c" + break; + + case 311: /* alter_table_cmd: ALTER opt_column ColId alter_column_default */ +#line 2981 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38811 "preproc.c" + break; + + case 312: /* alter_table_cmd: ALTER opt_column ColId DROP NOT NULL_P */ +#line 2985 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("drop not null")); +} +#line 38819 "preproc.c" + break; + + case 313: /* alter_table_cmd: ALTER opt_column ColId SET NOT NULL_P */ +#line 2989 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("set not null")); +} +#line 38827 "preproc.c" + break; + + case 314: /* alter_table_cmd: ALTER opt_column ColId DROP EXPRESSION */ +#line 2993 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("drop expression")); +} +#line 38835 "preproc.c" + break; + + case 315: /* alter_table_cmd: ALTER opt_column ColId DROP EXPRESSION IF_P EXISTS */ +#line 2997 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("drop expression if exists")); +} +#line 38843 "preproc.c" + break; + + case 316: /* alter_table_cmd: ALTER opt_column ColId SET STATISTICS SignedIconst */ +#line 3001 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("set statistics"),(yyvsp[0].str)); +} +#line 38851 "preproc.c" + break; + + case 317: /* alter_table_cmd: ALTER opt_column Iconst SET STATISTICS SignedIconst */ +#line 3005 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("set statistics"),(yyvsp[0].str)); +} +#line 38859 "preproc.c" + break; + + case 318: /* alter_table_cmd: ALTER opt_column ColId SET reloptions */ +#line 3009 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("set"),(yyvsp[0].str)); +} +#line 38867 "preproc.c" + break; + + case 319: /* alter_table_cmd: ALTER opt_column ColId RESET reloptions */ +#line 3013 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("reset"),(yyvsp[0].str)); +} +#line 38875 "preproc.c" + break; + + case 320: /* alter_table_cmd: ALTER opt_column ColId SET STORAGE ColId */ +#line 3017 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("set storage"),(yyvsp[0].str)); +} +#line 38883 "preproc.c" + break; + + case 321: /* alter_table_cmd: ALTER opt_column ColId SET column_compression */ +#line 3021 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("set"),(yyvsp[0].str)); +} +#line 38891 "preproc.c" + break; + + case 322: /* alter_table_cmd: ALTER opt_column ColId ADD_P GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList */ +#line 3025 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter"),(yyvsp[-7].str),(yyvsp[-6].str),mm_strdup("add generated"),(yyvsp[-3].str),mm_strdup("as identity"),(yyvsp[0].str)); +} +#line 38899 "preproc.c" + break; + + case 323: /* alter_table_cmd: ALTER opt_column ColId alter_identity_column_option_list */ +#line 3029 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38907 "preproc.c" + break; + + case 324: /* alter_table_cmd: ALTER opt_column ColId DROP IDENTITY_P */ +#line 3033 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("drop identity")); +} +#line 38915 "preproc.c" + break; + + case 325: /* alter_table_cmd: ALTER opt_column ColId DROP IDENTITY_P IF_P EXISTS */ +#line 3037 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("drop identity if exists")); +} +#line 38923 "preproc.c" + break; + + case 326: /* alter_table_cmd: DROP opt_column IF_P EXISTS ColId opt_drop_behavior */ +#line 3041 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("drop"),(yyvsp[-4].str),mm_strdup("if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38931 "preproc.c" + break; + + case 327: /* alter_table_cmd: DROP opt_column ColId opt_drop_behavior */ +#line 3045 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("drop"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38939 "preproc.c" + break; + + case 328: /* alter_table_cmd: ALTER opt_column ColId opt_set_data TYPE_P Typename opt_collate_clause alter_using */ +#line 3049 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("alter"),(yyvsp[-6].str),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("type"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38947 "preproc.c" + break; + + case 329: /* alter_table_cmd: ALTER opt_column ColId alter_generic_options */ +#line 3053 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38955 "preproc.c" + break; + + case 330: /* alter_table_cmd: ADD_P TableConstraint */ +#line 3057 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("add"),(yyvsp[0].str)); +} +#line 38963 "preproc.c" + break; + + case 331: /* alter_table_cmd: ALTER CONSTRAINT name ConstraintAttributeSpec */ +#line 3061 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter constraint"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38971 "preproc.c" + break; + + case 332: /* alter_table_cmd: VALIDATE CONSTRAINT name */ +#line 3065 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("validate constraint"),(yyvsp[0].str)); +} +#line 38979 "preproc.c" + break; + + case 333: /* alter_table_cmd: DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior */ +#line 3069 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop constraint if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38987 "preproc.c" + break; + + case 334: /* alter_table_cmd: DROP CONSTRAINT name opt_drop_behavior */ +#line 3073 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop constraint"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 38995 "preproc.c" + break; + + case 335: /* alter_table_cmd: SET WITHOUT OIDS */ +#line 3077 "preproc.y" + { + (yyval.str) = mm_strdup("set without oids"); +} +#line 39003 "preproc.c" + break; + + case 336: /* alter_table_cmd: CLUSTER ON name */ +#line 3081 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("cluster on"),(yyvsp[0].str)); +} +#line 39011 "preproc.c" + break; + + case 337: /* alter_table_cmd: SET WITHOUT CLUSTER */ +#line 3085 "preproc.y" + { + (yyval.str) = mm_strdup("set without cluster"); +} +#line 39019 "preproc.c" + break; + + case 338: /* alter_table_cmd: SET LOGGED */ +#line 3089 "preproc.y" + { + (yyval.str) = mm_strdup("set logged"); +} +#line 39027 "preproc.c" + break; + + case 339: /* alter_table_cmd: SET UNLOGGED */ +#line 3093 "preproc.y" + { + (yyval.str) = mm_strdup("set unlogged"); +} +#line 39035 "preproc.c" + break; + + case 340: /* alter_table_cmd: ENABLE_P TRIGGER name */ +#line 3097 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("enable trigger"),(yyvsp[0].str)); +} +#line 39043 "preproc.c" + break; + + case 341: /* alter_table_cmd: ENABLE_P ALWAYS TRIGGER name */ +#line 3101 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("enable always trigger"),(yyvsp[0].str)); +} +#line 39051 "preproc.c" + break; + + case 342: /* alter_table_cmd: ENABLE_P REPLICA TRIGGER name */ +#line 3105 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("enable replica trigger"),(yyvsp[0].str)); +} +#line 39059 "preproc.c" + break; + + case 343: /* alter_table_cmd: ENABLE_P TRIGGER ALL */ +#line 3109 "preproc.y" + { + (yyval.str) = mm_strdup("enable trigger all"); +} +#line 39067 "preproc.c" + break; + + case 344: /* alter_table_cmd: ENABLE_P TRIGGER USER */ +#line 3113 "preproc.y" + { + (yyval.str) = mm_strdup("enable trigger user"); +} +#line 39075 "preproc.c" + break; + + case 345: /* alter_table_cmd: DISABLE_P TRIGGER name */ +#line 3117 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("disable trigger"),(yyvsp[0].str)); +} +#line 39083 "preproc.c" + break; + + case 346: /* alter_table_cmd: DISABLE_P TRIGGER ALL */ +#line 3121 "preproc.y" + { + (yyval.str) = mm_strdup("disable trigger all"); +} +#line 39091 "preproc.c" + break; + + case 347: /* alter_table_cmd: DISABLE_P TRIGGER USER */ +#line 3125 "preproc.y" + { + (yyval.str) = mm_strdup("disable trigger user"); +} +#line 39099 "preproc.c" + break; + + case 348: /* alter_table_cmd: ENABLE_P RULE name */ +#line 3129 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("enable rule"),(yyvsp[0].str)); +} +#line 39107 "preproc.c" + break; + + case 349: /* alter_table_cmd: ENABLE_P ALWAYS RULE name */ +#line 3133 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("enable always rule"),(yyvsp[0].str)); +} +#line 39115 "preproc.c" + break; + + case 350: /* alter_table_cmd: ENABLE_P REPLICA RULE name */ +#line 3137 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("enable replica rule"),(yyvsp[0].str)); +} +#line 39123 "preproc.c" + break; + + case 351: /* alter_table_cmd: DISABLE_P RULE name */ +#line 3141 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("disable rule"),(yyvsp[0].str)); +} +#line 39131 "preproc.c" + break; + + case 352: /* alter_table_cmd: INHERIT qualified_name */ +#line 3145 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("inherit"),(yyvsp[0].str)); +} +#line 39139 "preproc.c" + break; + + case 353: /* alter_table_cmd: NO INHERIT qualified_name */ +#line 3149 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("no inherit"),(yyvsp[0].str)); +} +#line 39147 "preproc.c" + break; + + case 354: /* alter_table_cmd: OF any_name */ +#line 3153 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("of"),(yyvsp[0].str)); +} +#line 39155 "preproc.c" + break; + + case 355: /* alter_table_cmd: NOT OF */ +#line 3157 "preproc.y" + { + (yyval.str) = mm_strdup("not of"); +} +#line 39163 "preproc.c" + break; + + case 356: /* alter_table_cmd: OWNER TO RoleSpec */ +#line 3161 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 39171 "preproc.c" + break; + + case 357: /* alter_table_cmd: SET TABLESPACE name */ +#line 3165 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set tablespace"),(yyvsp[0].str)); +} +#line 39179 "preproc.c" + break; + + case 358: /* alter_table_cmd: SET reloptions */ +#line 3169 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set"),(yyvsp[0].str)); +} +#line 39187 "preproc.c" + break; + + case 359: /* alter_table_cmd: RESET reloptions */ +#line 3173 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("reset"),(yyvsp[0].str)); +} +#line 39195 "preproc.c" + break; + + case 360: /* alter_table_cmd: REPLICA IDENTITY_P replica_identity */ +#line 3177 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("replica identity"),(yyvsp[0].str)); +} +#line 39203 "preproc.c" + break; + + case 361: /* alter_table_cmd: ENABLE_P ROW LEVEL SECURITY */ +#line 3181 "preproc.y" + { + (yyval.str) = mm_strdup("enable row level security"); +} +#line 39211 "preproc.c" + break; + + case 362: /* alter_table_cmd: DISABLE_P ROW LEVEL SECURITY */ +#line 3185 "preproc.y" + { + (yyval.str) = mm_strdup("disable row level security"); +} +#line 39219 "preproc.c" + break; + + case 363: /* alter_table_cmd: FORCE ROW LEVEL SECURITY */ +#line 3189 "preproc.y" + { + (yyval.str) = mm_strdup("force row level security"); +} +#line 39227 "preproc.c" + break; + + case 364: /* alter_table_cmd: NO FORCE ROW LEVEL SECURITY */ +#line 3193 "preproc.y" + { + (yyval.str) = mm_strdup("no force row level security"); +} +#line 39235 "preproc.c" + break; + + case 365: /* alter_table_cmd: alter_generic_options */ +#line 3197 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39243 "preproc.c" + break; + + case 366: /* alter_column_default: SET DEFAULT a_expr */ +#line 3205 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set default"),(yyvsp[0].str)); +} +#line 39251 "preproc.c" + break; + + case 367: /* alter_column_default: DROP DEFAULT */ +#line 3209 "preproc.y" + { + (yyval.str) = mm_strdup("drop default"); +} +#line 39259 "preproc.c" + break; + + case 368: /* opt_drop_behavior: CASCADE */ +#line 3217 "preproc.y" + { + (yyval.str) = mm_strdup("cascade"); +} +#line 39267 "preproc.c" + break; + + case 369: /* opt_drop_behavior: RESTRICT */ +#line 3221 "preproc.y" + { + (yyval.str) = mm_strdup("restrict"); +} +#line 39275 "preproc.c" + break; + + case 370: /* opt_drop_behavior: %empty */ +#line 3225 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 39282 "preproc.c" + break; + + case 371: /* opt_collate_clause: COLLATE any_name */ +#line 3232 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("collate"),(yyvsp[0].str)); +} +#line 39290 "preproc.c" + break; + + case 372: /* opt_collate_clause: %empty */ +#line 3236 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 39297 "preproc.c" + break; + + case 373: /* alter_using: USING a_expr */ +#line 3243 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("using"),(yyvsp[0].str)); +} +#line 39305 "preproc.c" + break; + + case 374: /* alter_using: %empty */ +#line 3247 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 39312 "preproc.c" + break; + + case 375: /* replica_identity: NOTHING */ +#line 3254 "preproc.y" + { + (yyval.str) = mm_strdup("nothing"); +} +#line 39320 "preproc.c" + break; + + case 376: /* replica_identity: FULL */ +#line 3258 "preproc.y" + { + (yyval.str) = mm_strdup("full"); +} +#line 39328 "preproc.c" + break; + + case 377: /* replica_identity: DEFAULT */ +#line 3262 "preproc.y" + { + (yyval.str) = mm_strdup("default"); +} +#line 39336 "preproc.c" + break; + + case 378: /* replica_identity: USING INDEX name */ +#line 3266 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("using index"),(yyvsp[0].str)); +} +#line 39344 "preproc.c" + break; + + case 379: /* reloptions: '(' reloption_list ')' */ +#line 3274 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 39352 "preproc.c" + break; + + case 380: /* opt_reloptions: WITH reloptions */ +#line 3282 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("with"),(yyvsp[0].str)); +} +#line 39360 "preproc.c" + break; + + case 381: /* opt_reloptions: %empty */ +#line 3286 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 39367 "preproc.c" + break; + + case 382: /* reloption_list: reloption_elem */ +#line 3293 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39375 "preproc.c" + break; + + case 383: /* reloption_list: reloption_list ',' reloption_elem */ +#line 3297 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 39383 "preproc.c" + break; + + case 384: /* reloption_elem: ColLabel '=' def_arg */ +#line 3305 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("="),(yyvsp[0].str)); +} +#line 39391 "preproc.c" + break; + + case 385: /* reloption_elem: ColLabel */ +#line 3309 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39399 "preproc.c" + break; + + case 386: /* reloption_elem: ColLabel '.' ColLabel '=' def_arg */ +#line 3313 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("."),(yyvsp[-2].str),mm_strdup("="),(yyvsp[0].str)); +} +#line 39407 "preproc.c" + break; + + case 387: /* reloption_elem: ColLabel '.' ColLabel */ +#line 3317 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("."),(yyvsp[0].str)); +} +#line 39415 "preproc.c" + break; + + case 388: /* alter_identity_column_option_list: alter_identity_column_option */ +#line 3325 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39423 "preproc.c" + break; + + case 389: /* alter_identity_column_option_list: alter_identity_column_option_list alter_identity_column_option */ +#line 3329 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39431 "preproc.c" + break; + + case 390: /* alter_identity_column_option: RESTART */ +#line 3337 "preproc.y" + { + (yyval.str) = mm_strdup("restart"); +} +#line 39439 "preproc.c" + break; + + case 391: /* alter_identity_column_option: RESTART opt_with NumericOnly */ +#line 3341 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("restart"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39447 "preproc.c" + break; + + case 392: /* alter_identity_column_option: SET SeqOptElem */ +#line 3345 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set"),(yyvsp[0].str)); +} +#line 39455 "preproc.c" + break; + + case 393: /* alter_identity_column_option: SET GENERATED generated_when */ +#line 3349 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set generated"),(yyvsp[0].str)); +} +#line 39463 "preproc.c" + break; + + case 394: /* PartitionBoundSpec: FOR VALUES WITH '(' hash_partbound ')' */ +#line 3357 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("for values with ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 39471 "preproc.c" + break; + + case 395: /* PartitionBoundSpec: FOR VALUES IN_P '(' expr_list ')' */ +#line 3361 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("for values in ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 39479 "preproc.c" + break; + + case 396: /* PartitionBoundSpec: FOR VALUES FROM '(' expr_list ')' TO '(' expr_list ')' */ +#line 3365 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("for values from ("),(yyvsp[-5].str),mm_strdup(") to ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 39487 "preproc.c" + break; + + case 397: /* PartitionBoundSpec: DEFAULT */ +#line 3369 "preproc.y" + { + (yyval.str) = mm_strdup("default"); +} +#line 39495 "preproc.c" + break; + + case 398: /* hash_partbound_elem: NonReservedWord Iconst */ +#line 3377 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39503 "preproc.c" + break; + + case 399: /* hash_partbound: hash_partbound_elem */ +#line 3385 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39511 "preproc.c" + break; + + case 400: /* hash_partbound: hash_partbound ',' hash_partbound_elem */ +#line 3389 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 39519 "preproc.c" + break; + + case 401: /* AlterCompositeTypeStmt: ALTER TYPE_P any_name alter_type_cmds */ +#line 3397 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter type"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39527 "preproc.c" + break; + + case 402: /* alter_type_cmds: alter_type_cmd */ +#line 3405 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39535 "preproc.c" + break; + + case 403: /* alter_type_cmds: alter_type_cmds ',' alter_type_cmd */ +#line 3409 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 39543 "preproc.c" + break; + + case 404: /* alter_type_cmd: ADD_P ATTRIBUTE TableFuncElement opt_drop_behavior */ +#line 3417 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("add attribute"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39551 "preproc.c" + break; + + case 405: /* alter_type_cmd: DROP ATTRIBUTE IF_P EXISTS ColId opt_drop_behavior */ +#line 3421 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop attribute if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39559 "preproc.c" + break; + + case 406: /* alter_type_cmd: DROP ATTRIBUTE ColId opt_drop_behavior */ +#line 3425 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop attribute"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39567 "preproc.c" + break; + + case 407: /* alter_type_cmd: ALTER ATTRIBUTE ColId opt_set_data TYPE_P Typename opt_collate_clause opt_drop_behavior */ +#line 3429 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter attribute"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("type"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39575 "preproc.c" + break; + + case 408: /* ClosePortalStmt: CLOSE cursor_name */ +#line 3437 "preproc.y" + { + char *cursor_marker = (yyvsp[0].str)[0] == ':' ? mm_strdup("$0") : (yyvsp[0].str); + struct cursor *ptr = NULL; + for (ptr = cur; ptr != NULL; ptr = ptr -> next) + { + if (strcmp((yyvsp[0].str), ptr -> name) == 0) + { + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + break; + } + } + (yyval.str) = cat2_str(mm_strdup("close"), cursor_marker); + } +#line 39595 "preproc.c" + break; + + case 409: /* ClosePortalStmt: CLOSE ALL */ +#line 3453 "preproc.y" + { + (yyval.str) = mm_strdup("close all"); +} +#line 39603 "preproc.c" + break; + + case 410: /* CopyStmt: COPY opt_binary qualified_name opt_column_list copy_from opt_program copy_file_name copy_delimiter opt_with copy_options where_clause */ +#line 3461 "preproc.y" + { + if (strcmp((yyvsp[-5].str), "from") == 0 && + (strcmp((yyvsp[-4].str), "stdin") == 0 || strcmp((yyvsp[-4].str), "stdout") == 0)) + mmerror(PARSE_ERROR, ET_WARNING, "COPY FROM STDIN is not implemented"); + + (yyval.str) = cat_str(11,mm_strdup("copy"),(yyvsp[-9].str),(yyvsp[-8].str),(yyvsp[-7].str),(yyvsp[-6].str),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39615 "preproc.c" + break; + + case 411: /* CopyStmt: COPY '(' PreparableStmt ')' TO opt_program copy_file_name opt_with copy_options */ +#line 3469 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("copy ("),(yyvsp[-6].str),mm_strdup(") to"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39623 "preproc.c" + break; + + case 412: /* copy_from: FROM */ +#line 3477 "preproc.y" + { + (yyval.str) = mm_strdup("from"); +} +#line 39631 "preproc.c" + break; + + case 413: /* copy_from: TO */ +#line 3481 "preproc.y" + { + (yyval.str) = mm_strdup("to"); +} +#line 39639 "preproc.c" + break; + + case 414: /* opt_program: PROGRAM */ +#line 3489 "preproc.y" + { + (yyval.str) = mm_strdup("program"); +} +#line 39647 "preproc.c" + break; + + case 415: /* opt_program: %empty */ +#line 3493 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 39654 "preproc.c" + break; + + case 416: /* copy_file_name: ecpg_sconst */ +#line 3500 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39662 "preproc.c" + break; + + case 417: /* copy_file_name: STDIN */ +#line 3504 "preproc.y" + { + (yyval.str) = mm_strdup("stdin"); +} +#line 39670 "preproc.c" + break; + + case 418: /* copy_file_name: STDOUT */ +#line 3508 "preproc.y" + { + (yyval.str) = mm_strdup("stdout"); +} +#line 39678 "preproc.c" + break; + + case 419: /* copy_options: copy_opt_list */ +#line 3516 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39686 "preproc.c" + break; + + case 420: /* copy_options: '(' copy_generic_opt_list ')' */ +#line 3520 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 39694 "preproc.c" + break; + + case 421: /* copy_opt_list: copy_opt_list copy_opt_item */ +#line 3528 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39702 "preproc.c" + break; + + case 422: /* copy_opt_list: %empty */ +#line 3532 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 39709 "preproc.c" + break; + + case 423: /* copy_opt_item: BINARY */ +#line 3539 "preproc.y" + { + (yyval.str) = mm_strdup("binary"); +} +#line 39717 "preproc.c" + break; + + case 424: /* copy_opt_item: FREEZE */ +#line 3543 "preproc.y" + { + (yyval.str) = mm_strdup("freeze"); +} +#line 39725 "preproc.c" + break; + + case 425: /* copy_opt_item: DELIMITER opt_as ecpg_sconst */ +#line 3547 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("delimiter"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39733 "preproc.c" + break; + + case 426: /* copy_opt_item: NULL_P opt_as ecpg_sconst */ +#line 3551 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("null"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39741 "preproc.c" + break; + + case 427: /* copy_opt_item: CSV */ +#line 3555 "preproc.y" + { + (yyval.str) = mm_strdup("csv"); +} +#line 39749 "preproc.c" + break; + + case 428: /* copy_opt_item: HEADER_P */ +#line 3559 "preproc.y" + { + (yyval.str) = mm_strdup("header"); +} +#line 39757 "preproc.c" + break; + + case 429: /* copy_opt_item: QUOTE opt_as ecpg_sconst */ +#line 3563 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("quote"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39765 "preproc.c" + break; + + case 430: /* copy_opt_item: ESCAPE opt_as ecpg_sconst */ +#line 3567 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("escape"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39773 "preproc.c" + break; + + case 431: /* copy_opt_item: FORCE QUOTE columnList */ +#line 3571 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("force quote"),(yyvsp[0].str)); +} +#line 39781 "preproc.c" + break; + + case 432: /* copy_opt_item: FORCE QUOTE '*' */ +#line 3575 "preproc.y" + { + (yyval.str) = mm_strdup("force quote *"); +} +#line 39789 "preproc.c" + break; + + case 433: /* copy_opt_item: FORCE NOT NULL_P columnList */ +#line 3579 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("force not null"),(yyvsp[0].str)); +} +#line 39797 "preproc.c" + break; + + case 434: /* copy_opt_item: FORCE NULL_P columnList */ +#line 3583 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("force null"),(yyvsp[0].str)); +} +#line 39805 "preproc.c" + break; + + case 435: /* copy_opt_item: ENCODING ecpg_sconst */ +#line 3587 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("encoding"),(yyvsp[0].str)); +} +#line 39813 "preproc.c" + break; + + case 436: /* opt_binary: BINARY */ +#line 3595 "preproc.y" + { + (yyval.str) = mm_strdup("binary"); +} +#line 39821 "preproc.c" + break; + + case 437: /* opt_binary: %empty */ +#line 3599 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 39828 "preproc.c" + break; + + case 438: /* copy_delimiter: opt_using DELIMITERS ecpg_sconst */ +#line 3606 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("delimiters"),(yyvsp[0].str)); +} +#line 39836 "preproc.c" + break; + + case 439: /* copy_delimiter: %empty */ +#line 3610 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 39843 "preproc.c" + break; + + case 440: /* opt_using: USING */ +#line 3617 "preproc.y" + { + (yyval.str) = mm_strdup("using"); +} +#line 39851 "preproc.c" + break; + + case 441: /* opt_using: %empty */ +#line 3621 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 39858 "preproc.c" + break; + + case 442: /* copy_generic_opt_list: copy_generic_opt_elem */ +#line 3628 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39866 "preproc.c" + break; + + case 443: /* copy_generic_opt_list: copy_generic_opt_list ',' copy_generic_opt_elem */ +#line 3632 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 39874 "preproc.c" + break; + + case 444: /* copy_generic_opt_elem: ColLabel copy_generic_opt_arg */ +#line 3640 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39882 "preproc.c" + break; + + case 445: /* copy_generic_opt_arg: opt_boolean_or_string */ +#line 3648 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39890 "preproc.c" + break; + + case 446: /* copy_generic_opt_arg: NumericOnly */ +#line 3652 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39898 "preproc.c" + break; + + case 447: /* copy_generic_opt_arg: '*' */ +#line 3656 "preproc.y" + { + (yyval.str) = mm_strdup("*"); +} +#line 39906 "preproc.c" + break; + + case 448: /* copy_generic_opt_arg: '(' copy_generic_opt_arg_list ')' */ +#line 3660 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 39914 "preproc.c" + break; + + case 449: /* copy_generic_opt_arg: %empty */ +#line 3664 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 39921 "preproc.c" + break; + + case 450: /* copy_generic_opt_arg_list: copy_generic_opt_arg_list_item */ +#line 3671 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39929 "preproc.c" + break; + + case 451: /* copy_generic_opt_arg_list: copy_generic_opt_arg_list ',' copy_generic_opt_arg_list_item */ +#line 3675 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 39937 "preproc.c" + break; + + case 452: /* copy_generic_opt_arg_list_item: opt_boolean_or_string */ +#line 3683 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 39945 "preproc.c" + break; + + case 453: /* CreateStmt: CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')' OptInherit OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3691 "preproc.y" + { + (yyval.str) = cat_str(13,mm_strdup("create"),(yyvsp[-11].str),mm_strdup("table"),(yyvsp[-9].str),mm_strdup("("),(yyvsp[-7].str),mm_strdup(")"),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39953 "preproc.c" + break; + + case 454: /* CreateStmt: CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name '(' OptTableElementList ')' OptInherit OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3695 "preproc.y" + { + (yyval.str) = cat_str(13,mm_strdup("create"),(yyvsp[-14].str),mm_strdup("table if not exists"),(yyvsp[-9].str),mm_strdup("("),(yyvsp[-7].str),mm_strdup(")"),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39961 "preproc.c" + break; + + case 455: /* CreateStmt: CREATE OptTemp TABLE qualified_name OF any_name OptTypedTableElementList OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3699 "preproc.y" + { + (yyval.str) = cat_str(12,mm_strdup("create"),(yyvsp[-10].str),mm_strdup("table"),(yyvsp[-8].str),mm_strdup("of"),(yyvsp[-6].str),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39969 "preproc.c" + break; + + case 456: /* CreateStmt: CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name OF any_name OptTypedTableElementList OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3703 "preproc.y" + { + (yyval.str) = cat_str(12,mm_strdup("create"),(yyvsp[-13].str),mm_strdup("table if not exists"),(yyvsp[-8].str),mm_strdup("of"),(yyvsp[-6].str),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39977 "preproc.c" + break; + + case 457: /* CreateStmt: CREATE OptTemp TABLE qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3707 "preproc.y" + { + (yyval.str) = cat_str(13,mm_strdup("create"),(yyvsp[-12].str),mm_strdup("table"),(yyvsp[-10].str),mm_strdup("partition of"),(yyvsp[-7].str),(yyvsp[-6].str),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39985 "preproc.c" + break; + + case 458: /* CreateStmt: CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3711 "preproc.y" + { + (yyval.str) = cat_str(13,mm_strdup("create"),(yyvsp[-15].str),mm_strdup("table if not exists"),(yyvsp[-10].str),mm_strdup("partition of"),(yyvsp[-7].str),(yyvsp[-6].str),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 39993 "preproc.c" + break; + + case 459: /* OptTemp: TEMPORARY */ +#line 3719 "preproc.y" + { + (yyval.str) = mm_strdup("temporary"); +} +#line 40001 "preproc.c" + break; + + case 460: /* OptTemp: TEMP */ +#line 3723 "preproc.y" + { + (yyval.str) = mm_strdup("temp"); +} +#line 40009 "preproc.c" + break; + + case 461: /* OptTemp: LOCAL TEMPORARY */ +#line 3727 "preproc.y" + { + (yyval.str) = mm_strdup("local temporary"); +} +#line 40017 "preproc.c" + break; + + case 462: /* OptTemp: LOCAL TEMP */ +#line 3731 "preproc.y" + { + (yyval.str) = mm_strdup("local temp"); +} +#line 40025 "preproc.c" + break; + + case 463: /* OptTemp: GLOBAL TEMPORARY */ +#line 3735 "preproc.y" + { + (yyval.str) = mm_strdup("global temporary"); +} +#line 40033 "preproc.c" + break; + + case 464: /* OptTemp: GLOBAL TEMP */ +#line 3739 "preproc.y" + { + (yyval.str) = mm_strdup("global temp"); +} +#line 40041 "preproc.c" + break; + + case 465: /* OptTemp: UNLOGGED */ +#line 3743 "preproc.y" + { + (yyval.str) = mm_strdup("unlogged"); +} +#line 40049 "preproc.c" + break; + + case 466: /* OptTemp: %empty */ +#line 3747 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40056 "preproc.c" + break; + + case 467: /* OptTableElementList: TableElementList */ +#line 3754 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40064 "preproc.c" + break; + + case 468: /* OptTableElementList: %empty */ +#line 3758 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40071 "preproc.c" + break; + + case 469: /* OptTypedTableElementList: '(' TypedTableElementList ')' */ +#line 3765 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 40079 "preproc.c" + break; + + case 470: /* OptTypedTableElementList: %empty */ +#line 3769 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40086 "preproc.c" + break; + + case 471: /* TableElementList: TableElement */ +#line 3776 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40094 "preproc.c" + break; + + case 472: /* TableElementList: TableElementList ',' TableElement */ +#line 3780 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 40102 "preproc.c" + break; + + case 473: /* TypedTableElementList: TypedTableElement */ +#line 3788 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40110 "preproc.c" + break; + + case 474: /* TypedTableElementList: TypedTableElementList ',' TypedTableElement */ +#line 3792 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 40118 "preproc.c" + break; + + case 475: /* TableElement: columnDef */ +#line 3800 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40126 "preproc.c" + break; + + case 476: /* TableElement: TableLikeClause */ +#line 3804 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40134 "preproc.c" + break; + + case 477: /* TableElement: TableConstraint */ +#line 3808 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40142 "preproc.c" + break; + + case 478: /* TypedTableElement: columnOptions */ +#line 3816 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40150 "preproc.c" + break; + + case 479: /* TypedTableElement: TableConstraint */ +#line 3820 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40158 "preproc.c" + break; + + case 480: /* columnDef: ColId Typename opt_column_compression create_generic_options ColQualList */ +#line 3828 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40166 "preproc.c" + break; + + case 481: /* columnOptions: ColId ColQualList */ +#line 3836 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40174 "preproc.c" + break; + + case 482: /* columnOptions: ColId WITH OPTIONS ColQualList */ +#line 3840 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-3].str),mm_strdup("with options"),(yyvsp[0].str)); +} +#line 40182 "preproc.c" + break; + + case 483: /* column_compression: COMPRESSION ColId */ +#line 3848 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("compression"),(yyvsp[0].str)); +} +#line 40190 "preproc.c" + break; + + case 484: /* column_compression: COMPRESSION DEFAULT */ +#line 3852 "preproc.y" + { + (yyval.str) = mm_strdup("compression default"); +} +#line 40198 "preproc.c" + break; + + case 485: /* opt_column_compression: column_compression */ +#line 3860 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40206 "preproc.c" + break; + + case 486: /* opt_column_compression: %empty */ +#line 3864 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40213 "preproc.c" + break; + + case 487: /* ColQualList: ColQualList ColConstraint */ +#line 3871 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40221 "preproc.c" + break; + + case 488: /* ColQualList: %empty */ +#line 3875 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40228 "preproc.c" + break; + + case 489: /* ColConstraint: CONSTRAINT name ColConstraintElem */ +#line 3882 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("constraint"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40236 "preproc.c" + break; + + case 490: /* ColConstraint: ColConstraintElem */ +#line 3886 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40244 "preproc.c" + break; + + case 491: /* ColConstraint: ConstraintAttr */ +#line 3890 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40252 "preproc.c" + break; + + case 492: /* ColConstraint: COLLATE any_name */ +#line 3894 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("collate"),(yyvsp[0].str)); +} +#line 40260 "preproc.c" + break; + + case 493: /* ColConstraintElem: NOT NULL_P */ +#line 3902 "preproc.y" + { + (yyval.str) = mm_strdup("not null"); +} +#line 40268 "preproc.c" + break; + + case 494: /* ColConstraintElem: NULL_P */ +#line 3906 "preproc.y" + { + (yyval.str) = mm_strdup("null"); +} +#line 40276 "preproc.c" + break; + + case 495: /* ColConstraintElem: UNIQUE opt_definition OptConsTableSpace */ +#line 3910 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("unique"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40284 "preproc.c" + break; + + case 496: /* ColConstraintElem: PRIMARY KEY opt_definition OptConsTableSpace */ +#line 3914 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("primary key"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40292 "preproc.c" + break; + + case 497: /* ColConstraintElem: CHECK '(' a_expr ')' opt_no_inherit */ +#line 3918 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("check ("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 40300 "preproc.c" + break; + + case 498: /* ColConstraintElem: DEFAULT b_expr */ +#line 3922 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("default"),(yyvsp[0].str)); +} +#line 40308 "preproc.c" + break; + + case 499: /* ColConstraintElem: GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList */ +#line 3926 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("generated"),(yyvsp[-3].str),mm_strdup("as identity"),(yyvsp[0].str)); +} +#line 40316 "preproc.c" + break; + + case 500: /* ColConstraintElem: GENERATED generated_when AS '(' a_expr ')' STORED */ +#line 3930 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("generated"),(yyvsp[-5].str),mm_strdup("as ("),(yyvsp[-2].str),mm_strdup(") stored")); +} +#line 40324 "preproc.c" + break; + + case 501: /* ColConstraintElem: REFERENCES qualified_name opt_column_list key_match key_actions */ +#line 3934 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("references"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40332 "preproc.c" + break; + + case 502: /* generated_when: ALWAYS */ +#line 3942 "preproc.y" + { + (yyval.str) = mm_strdup("always"); +} +#line 40340 "preproc.c" + break; + + case 503: /* generated_when: BY DEFAULT */ +#line 3946 "preproc.y" + { + (yyval.str) = mm_strdup("by default"); +} +#line 40348 "preproc.c" + break; + + case 504: /* ConstraintAttr: DEFERRABLE */ +#line 3954 "preproc.y" + { + (yyval.str) = mm_strdup("deferrable"); +} +#line 40356 "preproc.c" + break; + + case 505: /* ConstraintAttr: NOT DEFERRABLE */ +#line 3958 "preproc.y" + { + (yyval.str) = mm_strdup("not deferrable"); +} +#line 40364 "preproc.c" + break; + + case 506: /* ConstraintAttr: INITIALLY DEFERRED */ +#line 3962 "preproc.y" + { + (yyval.str) = mm_strdup("initially deferred"); +} +#line 40372 "preproc.c" + break; + + case 507: /* ConstraintAttr: INITIALLY IMMEDIATE */ +#line 3966 "preproc.y" + { + (yyval.str) = mm_strdup("initially immediate"); +} +#line 40380 "preproc.c" + break; + + case 508: /* TableLikeClause: LIKE qualified_name TableLikeOptionList */ +#line 3974 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("like"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40388 "preproc.c" + break; + + case 509: /* TableLikeOptionList: TableLikeOptionList INCLUDING TableLikeOption */ +#line 3982 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("including"),(yyvsp[0].str)); +} +#line 40396 "preproc.c" + break; + + case 510: /* TableLikeOptionList: TableLikeOptionList EXCLUDING TableLikeOption */ +#line 3986 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("excluding"),(yyvsp[0].str)); +} +#line 40404 "preproc.c" + break; + + case 511: /* TableLikeOptionList: %empty */ +#line 3990 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40411 "preproc.c" + break; + + case 512: /* TableLikeOption: COMMENTS */ +#line 3997 "preproc.y" + { + (yyval.str) = mm_strdup("comments"); +} +#line 40419 "preproc.c" + break; + + case 513: /* TableLikeOption: COMPRESSION */ +#line 4001 "preproc.y" + { + (yyval.str) = mm_strdup("compression"); +} +#line 40427 "preproc.c" + break; + + case 514: /* TableLikeOption: CONSTRAINTS */ +#line 4005 "preproc.y" + { + (yyval.str) = mm_strdup("constraints"); +} +#line 40435 "preproc.c" + break; + + case 515: /* TableLikeOption: DEFAULTS */ +#line 4009 "preproc.y" + { + (yyval.str) = mm_strdup("defaults"); +} +#line 40443 "preproc.c" + break; + + case 516: /* TableLikeOption: IDENTITY_P */ +#line 4013 "preproc.y" + { + (yyval.str) = mm_strdup("identity"); +} +#line 40451 "preproc.c" + break; + + case 517: /* TableLikeOption: GENERATED */ +#line 4017 "preproc.y" + { + (yyval.str) = mm_strdup("generated"); +} +#line 40459 "preproc.c" + break; + + case 518: /* TableLikeOption: INDEXES */ +#line 4021 "preproc.y" + { + (yyval.str) = mm_strdup("indexes"); +} +#line 40467 "preproc.c" + break; + + case 519: /* TableLikeOption: STATISTICS */ +#line 4025 "preproc.y" + { + (yyval.str) = mm_strdup("statistics"); +} +#line 40475 "preproc.c" + break; + + case 520: /* TableLikeOption: STORAGE */ +#line 4029 "preproc.y" + { + (yyval.str) = mm_strdup("storage"); +} +#line 40483 "preproc.c" + break; + + case 521: /* TableLikeOption: ALL */ +#line 4033 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 40491 "preproc.c" + break; + + case 522: /* TableConstraint: CONSTRAINT name ConstraintElem */ +#line 4041 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("constraint"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40499 "preproc.c" + break; + + case 523: /* TableConstraint: ConstraintElem */ +#line 4045 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40507 "preproc.c" + break; + + case 524: /* ConstraintElem: CHECK '(' a_expr ')' ConstraintAttributeSpec */ +#line 4053 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("check ("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 40515 "preproc.c" + break; + + case 525: /* ConstraintElem: UNIQUE '(' columnList ')' opt_c_include opt_definition OptConsTableSpace ConstraintAttributeSpec */ +#line 4057 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("unique ("),(yyvsp[-5].str),mm_strdup(")"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40523 "preproc.c" + break; + + case 526: /* ConstraintElem: UNIQUE ExistingIndex ConstraintAttributeSpec */ +#line 4061 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("unique"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40531 "preproc.c" + break; + + case 527: /* ConstraintElem: PRIMARY KEY '(' columnList ')' opt_c_include opt_definition OptConsTableSpace ConstraintAttributeSpec */ +#line 4065 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("primary key ("),(yyvsp[-5].str),mm_strdup(")"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40539 "preproc.c" + break; + + case 528: /* ConstraintElem: PRIMARY KEY ExistingIndex ConstraintAttributeSpec */ +#line 4069 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("primary key"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40547 "preproc.c" + break; + + case 529: /* ConstraintElem: EXCLUDE access_method_clause '(' ExclusionConstraintList ')' opt_c_include opt_definition OptConsTableSpace OptWhereClause ConstraintAttributeSpec */ +#line 4073 "preproc.y" + { + (yyval.str) = cat_str(10,mm_strdup("exclude"),(yyvsp[-8].str),mm_strdup("("),(yyvsp[-6].str),mm_strdup(")"),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40555 "preproc.c" + break; + + case 530: /* ConstraintElem: FOREIGN KEY '(' columnList ')' REFERENCES qualified_name opt_column_list key_match key_actions ConstraintAttributeSpec */ +#line 4077 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("foreign key ("),(yyvsp[-7].str),mm_strdup(") references"),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40563 "preproc.c" + break; + + case 531: /* opt_no_inherit: NO INHERIT */ +#line 4085 "preproc.y" + { + (yyval.str) = mm_strdup("no inherit"); +} +#line 40571 "preproc.c" + break; + + case 532: /* opt_no_inherit: %empty */ +#line 4089 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40578 "preproc.c" + break; + + case 533: /* opt_column_list: '(' columnList ')' */ +#line 4096 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 40586 "preproc.c" + break; + + case 534: /* opt_column_list: %empty */ +#line 4100 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40593 "preproc.c" + break; + + case 535: /* columnList: columnElem */ +#line 4107 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40601 "preproc.c" + break; + + case 536: /* columnList: columnList ',' columnElem */ +#line 4111 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 40609 "preproc.c" + break; + + case 537: /* columnElem: ColId */ +#line 4119 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40617 "preproc.c" + break; + + case 538: /* opt_c_include: INCLUDE '(' columnList ')' */ +#line 4127 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("include ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 40625 "preproc.c" + break; + + case 539: /* opt_c_include: %empty */ +#line 4131 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40632 "preproc.c" + break; + + case 540: /* key_match: MATCH FULL */ +#line 4138 "preproc.y" + { + (yyval.str) = mm_strdup("match full"); +} +#line 40640 "preproc.c" + break; + + case 541: /* key_match: MATCH PARTIAL */ +#line 4142 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = mm_strdup("match partial"); +} +#line 40649 "preproc.c" + break; + + case 542: /* key_match: MATCH SIMPLE */ +#line 4147 "preproc.y" + { + (yyval.str) = mm_strdup("match simple"); +} +#line 40657 "preproc.c" + break; + + case 543: /* key_match: %empty */ +#line 4151 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40664 "preproc.c" + break; + + case 544: /* ExclusionConstraintList: ExclusionConstraintElem */ +#line 4158 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40672 "preproc.c" + break; + + case 545: /* ExclusionConstraintList: ExclusionConstraintList ',' ExclusionConstraintElem */ +#line 4162 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 40680 "preproc.c" + break; + + case 546: /* ExclusionConstraintElem: index_elem WITH any_operator */ +#line 4170 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("with"),(yyvsp[0].str)); +} +#line 40688 "preproc.c" + break; + + case 547: /* ExclusionConstraintElem: index_elem WITH OPERATOR '(' any_operator ')' */ +#line 4174 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-5].str),mm_strdup("with operator ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 40696 "preproc.c" + break; + + case 548: /* OptWhereClause: WHERE '(' a_expr ')' */ +#line 4182 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("where ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 40704 "preproc.c" + break; + + case 549: /* OptWhereClause: %empty */ +#line 4186 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40711 "preproc.c" + break; + + case 550: /* key_actions: key_update */ +#line 4193 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40719 "preproc.c" + break; + + case 551: /* key_actions: key_delete */ +#line 4197 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40727 "preproc.c" + break; + + case 552: /* key_actions: key_update key_delete */ +#line 4201 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40735 "preproc.c" + break; + + case 553: /* key_actions: key_delete key_update */ +#line 4205 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40743 "preproc.c" + break; + + case 554: /* key_actions: %empty */ +#line 4209 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40750 "preproc.c" + break; + + case 555: /* key_update: ON UPDATE key_action */ +#line 4216 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("on update"),(yyvsp[0].str)); +} +#line 40758 "preproc.c" + break; + + case 556: /* key_delete: ON DELETE_P key_action */ +#line 4224 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("on delete"),(yyvsp[0].str)); +} +#line 40766 "preproc.c" + break; + + case 557: /* key_action: NO ACTION */ +#line 4232 "preproc.y" + { + (yyval.str) = mm_strdup("no action"); +} +#line 40774 "preproc.c" + break; + + case 558: /* key_action: RESTRICT */ +#line 4236 "preproc.y" + { + (yyval.str) = mm_strdup("restrict"); +} +#line 40782 "preproc.c" + break; + + case 559: /* key_action: CASCADE */ +#line 4240 "preproc.y" + { + (yyval.str) = mm_strdup("cascade"); +} +#line 40790 "preproc.c" + break; + + case 560: /* key_action: SET NULL_P */ +#line 4244 "preproc.y" + { + (yyval.str) = mm_strdup("set null"); +} +#line 40798 "preproc.c" + break; + + case 561: /* key_action: SET DEFAULT */ +#line 4248 "preproc.y" + { + (yyval.str) = mm_strdup("set default"); +} +#line 40806 "preproc.c" + break; + + case 562: /* OptInherit: INHERITS '(' qualified_name_list ')' */ +#line 4256 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("inherits ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 40814 "preproc.c" + break; + + case 563: /* OptInherit: %empty */ +#line 4260 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40821 "preproc.c" + break; + + case 564: /* OptPartitionSpec: PartitionSpec */ +#line 4267 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40829 "preproc.c" + break; + + case 565: /* OptPartitionSpec: %empty */ +#line 4271 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40836 "preproc.c" + break; + + case 566: /* PartitionSpec: PARTITION BY ColId '(' part_params ')' */ +#line 4278 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("partition by"),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 40844 "preproc.c" + break; + + case 567: /* part_params: part_elem */ +#line 4286 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 40852 "preproc.c" + break; + + case 568: /* part_params: part_params ',' part_elem */ +#line 4290 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 40860 "preproc.c" + break; + + case 569: /* part_elem: ColId opt_collate opt_class */ +#line 4298 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40868 "preproc.c" + break; + + case 570: /* part_elem: func_expr_windowless opt_collate opt_class */ +#line 4302 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40876 "preproc.c" + break; + + case 571: /* part_elem: '(' a_expr ')' opt_collate opt_class */ +#line 4306 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("("),(yyvsp[-3].str),mm_strdup(")"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 40884 "preproc.c" + break; + + case 572: /* table_access_method_clause: USING name */ +#line 4314 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("using"),(yyvsp[0].str)); +} +#line 40892 "preproc.c" + break; + + case 573: /* table_access_method_clause: %empty */ +#line 4318 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40899 "preproc.c" + break; + + case 574: /* OptWith: WITH reloptions */ +#line 4325 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("with"),(yyvsp[0].str)); +} +#line 40907 "preproc.c" + break; + + case 575: /* OptWith: WITHOUT OIDS */ +#line 4329 "preproc.y" + { + (yyval.str) = mm_strdup("without oids"); +} +#line 40915 "preproc.c" + break; + + case 576: /* OptWith: %empty */ +#line 4333 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40922 "preproc.c" + break; + + case 577: /* OnCommitOption: ON COMMIT DROP */ +#line 4340 "preproc.y" + { + (yyval.str) = mm_strdup("on commit drop"); +} +#line 40930 "preproc.c" + break; + + case 578: /* OnCommitOption: ON COMMIT DELETE_P ROWS */ +#line 4344 "preproc.y" + { + (yyval.str) = mm_strdup("on commit delete rows"); +} +#line 40938 "preproc.c" + break; + + case 579: /* OnCommitOption: ON COMMIT PRESERVE ROWS */ +#line 4348 "preproc.y" + { + (yyval.str) = mm_strdup("on commit preserve rows"); +} +#line 40946 "preproc.c" + break; + + case 580: /* OnCommitOption: %empty */ +#line 4352 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40953 "preproc.c" + break; + + case 581: /* OptTableSpace: TABLESPACE name */ +#line 4359 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("tablespace"),(yyvsp[0].str)); +} +#line 40961 "preproc.c" + break; + + case 582: /* OptTableSpace: %empty */ +#line 4363 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40968 "preproc.c" + break; + + case 583: /* OptConsTableSpace: USING INDEX TABLESPACE name */ +#line 4370 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("using index tablespace"),(yyvsp[0].str)); +} +#line 40976 "preproc.c" + break; + + case 584: /* OptConsTableSpace: %empty */ +#line 4374 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 40983 "preproc.c" + break; + + case 585: /* ExistingIndex: USING INDEX name */ +#line 4381 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("using index"),(yyvsp[0].str)); +} +#line 40991 "preproc.c" + break; + + case 586: /* CreateStatsStmt: CREATE STATISTICS any_name opt_name_list ON stats_params FROM from_list */ +#line 4389 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("create statistics"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("on"),(yyvsp[-2].str),mm_strdup("from"),(yyvsp[0].str)); +} +#line 40999 "preproc.c" + break; + + case 587: /* CreateStatsStmt: CREATE STATISTICS IF_P NOT EXISTS any_name opt_name_list ON stats_params FROM from_list */ +#line 4393 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("create statistics if not exists"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("on"),(yyvsp[-2].str),mm_strdup("from"),(yyvsp[0].str)); +} +#line 41007 "preproc.c" + break; + + case 588: /* stats_params: stats_param */ +#line 4401 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41015 "preproc.c" + break; + + case 589: /* stats_params: stats_params ',' stats_param */ +#line 4405 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 41023 "preproc.c" + break; + + case 590: /* stats_param: ColId */ +#line 4413 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41031 "preproc.c" + break; + + case 591: /* stats_param: func_expr_windowless */ +#line 4417 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41039 "preproc.c" + break; + + case 592: /* stats_param: '(' a_expr ')' */ +#line 4421 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 41047 "preproc.c" + break; + + case 593: /* AlterStatsStmt: ALTER STATISTICS any_name SET STATISTICS SignedIconst */ +#line 4429 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter statistics"),(yyvsp[-3].str),mm_strdup("set statistics"),(yyvsp[0].str)); +} +#line 41055 "preproc.c" + break; + + case 594: /* AlterStatsStmt: ALTER STATISTICS IF_P EXISTS any_name SET STATISTICS SignedIconst */ +#line 4433 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter statistics if exists"),(yyvsp[-3].str),mm_strdup("set statistics"),(yyvsp[0].str)); +} +#line 41063 "preproc.c" + break; + + case 595: /* create_as_target: qualified_name opt_column_list table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 4441 "preproc.y" + { + (yyval.str) = cat_str(6,(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41071 "preproc.c" + break; + + case 596: /* opt_with_data: WITH DATA_P */ +#line 4449 "preproc.y" + { + (yyval.str) = mm_strdup("with data"); +} +#line 41079 "preproc.c" + break; + + case 597: /* opt_with_data: WITH NO DATA_P */ +#line 4453 "preproc.y" + { + (yyval.str) = mm_strdup("with no data"); +} +#line 41087 "preproc.c" + break; + + case 598: /* opt_with_data: %empty */ +#line 4457 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41094 "preproc.c" + break; + + case 599: /* CreateMatViewStmt: CREATE OptNoLog MATERIALIZED VIEW create_mv_target AS SelectStmt opt_with_data */ +#line 4464 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("create"),(yyvsp[-6].str),mm_strdup("materialized view"),(yyvsp[-3].str),mm_strdup("as"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41102 "preproc.c" + break; + + case 600: /* CreateMatViewStmt: CREATE OptNoLog MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data */ +#line 4468 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("create"),(yyvsp[-9].str),mm_strdup("materialized view if not exists"),(yyvsp[-3].str),mm_strdup("as"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41110 "preproc.c" + break; + + case 601: /* create_mv_target: qualified_name opt_column_list table_access_method_clause opt_reloptions OptTableSpace */ +#line 4476 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41118 "preproc.c" + break; + + case 602: /* OptNoLog: UNLOGGED */ +#line 4484 "preproc.y" + { + (yyval.str) = mm_strdup("unlogged"); +} +#line 41126 "preproc.c" + break; + + case 603: /* OptNoLog: %empty */ +#line 4488 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41133 "preproc.c" + break; + + case 604: /* RefreshMatViewStmt: REFRESH MATERIALIZED VIEW opt_concurrently qualified_name opt_with_data */ +#line 4495 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("refresh materialized view"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41141 "preproc.c" + break; + + case 605: /* CreateSeqStmt: CREATE OptTemp SEQUENCE qualified_name OptSeqOptList */ +#line 4503 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("create"),(yyvsp[-3].str),mm_strdup("sequence"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41149 "preproc.c" + break; + + case 606: /* CreateSeqStmt: CREATE OptTemp SEQUENCE IF_P NOT EXISTS qualified_name OptSeqOptList */ +#line 4507 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("create"),(yyvsp[-6].str),mm_strdup("sequence if not exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41157 "preproc.c" + break; + + case 607: /* AlterSeqStmt: ALTER SEQUENCE qualified_name SeqOptList */ +#line 4515 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter sequence"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41165 "preproc.c" + break; + + case 608: /* AlterSeqStmt: ALTER SEQUENCE IF_P EXISTS qualified_name SeqOptList */ +#line 4519 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter sequence if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41173 "preproc.c" + break; + + case 609: /* OptSeqOptList: SeqOptList */ +#line 4527 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41181 "preproc.c" + break; + + case 610: /* OptSeqOptList: %empty */ +#line 4531 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41188 "preproc.c" + break; + + case 611: /* OptParenthesizedSeqOptList: '(' SeqOptList ')' */ +#line 4538 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 41196 "preproc.c" + break; + + case 612: /* OptParenthesizedSeqOptList: %empty */ +#line 4542 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41203 "preproc.c" + break; + + case 613: /* SeqOptList: SeqOptElem */ +#line 4549 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41211 "preproc.c" + break; + + case 614: /* SeqOptList: SeqOptList SeqOptElem */ +#line 4553 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41219 "preproc.c" + break; + + case 615: /* SeqOptElem: AS SimpleTypename */ +#line 4561 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("as"),(yyvsp[0].str)); +} +#line 41227 "preproc.c" + break; + + case 616: /* SeqOptElem: CACHE NumericOnly */ +#line 4565 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("cache"),(yyvsp[0].str)); +} +#line 41235 "preproc.c" + break; + + case 617: /* SeqOptElem: CYCLE */ +#line 4569 "preproc.y" + { + (yyval.str) = mm_strdup("cycle"); +} +#line 41243 "preproc.c" + break; + + case 618: /* SeqOptElem: NO CYCLE */ +#line 4573 "preproc.y" + { + (yyval.str) = mm_strdup("no cycle"); +} +#line 41251 "preproc.c" + break; + + case 619: /* SeqOptElem: INCREMENT opt_by NumericOnly */ +#line 4577 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("increment"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41259 "preproc.c" + break; + + case 620: /* SeqOptElem: MAXVALUE NumericOnly */ +#line 4581 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("maxvalue"),(yyvsp[0].str)); +} +#line 41267 "preproc.c" + break; + + case 621: /* SeqOptElem: MINVALUE NumericOnly */ +#line 4585 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("minvalue"),(yyvsp[0].str)); +} +#line 41275 "preproc.c" + break; + + case 622: /* SeqOptElem: NO MAXVALUE */ +#line 4589 "preproc.y" + { + (yyval.str) = mm_strdup("no maxvalue"); +} +#line 41283 "preproc.c" + break; + + case 623: /* SeqOptElem: NO MINVALUE */ +#line 4593 "preproc.y" + { + (yyval.str) = mm_strdup("no minvalue"); +} +#line 41291 "preproc.c" + break; + + case 624: /* SeqOptElem: OWNED BY any_name */ +#line 4597 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("owned by"),(yyvsp[0].str)); +} +#line 41299 "preproc.c" + break; + + case 625: /* SeqOptElem: SEQUENCE NAME_P any_name */ +#line 4601 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("sequence name"),(yyvsp[0].str)); +} +#line 41307 "preproc.c" + break; + + case 626: /* SeqOptElem: START opt_with NumericOnly */ +#line 4605 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("start"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41315 "preproc.c" + break; + + case 627: /* SeqOptElem: RESTART */ +#line 4609 "preproc.y" + { + (yyval.str) = mm_strdup("restart"); +} +#line 41323 "preproc.c" + break; + + case 628: /* SeqOptElem: RESTART opt_with NumericOnly */ +#line 4613 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("restart"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41331 "preproc.c" + break; + + case 629: /* opt_by: BY */ +#line 4621 "preproc.y" + { + (yyval.str) = mm_strdup("by"); +} +#line 41339 "preproc.c" + break; + + case 630: /* opt_by: %empty */ +#line 4625 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41346 "preproc.c" + break; + + case 631: /* NumericOnly: ecpg_fconst */ +#line 4632 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41354 "preproc.c" + break; + + case 632: /* NumericOnly: '+' ecpg_fconst */ +#line 4636 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("+"),(yyvsp[0].str)); +} +#line 41362 "preproc.c" + break; + + case 633: /* NumericOnly: '-' ecpg_fconst */ +#line 4640 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("-"),(yyvsp[0].str)); +} +#line 41370 "preproc.c" + break; + + case 634: /* NumericOnly: SignedIconst */ +#line 4644 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41378 "preproc.c" + break; + + case 635: /* NumericOnly_list: NumericOnly */ +#line 4652 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41386 "preproc.c" + break; + + case 636: /* NumericOnly_list: NumericOnly_list ',' NumericOnly */ +#line 4656 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 41394 "preproc.c" + break; + + case 637: /* CreatePLangStmt: CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE name */ +#line 4664 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("create"),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("language"),(yyvsp[0].str)); +} +#line 41402 "preproc.c" + break; + + case 638: /* CreatePLangStmt: CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE name HANDLER handler_name opt_inline_handler opt_validator */ +#line 4668 "preproc.y" + { + (yyval.str) = cat_str(10,mm_strdup("create"),(yyvsp[-8].str),(yyvsp[-7].str),(yyvsp[-6].str),mm_strdup("language"),(yyvsp[-4].str),mm_strdup("handler"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41410 "preproc.c" + break; + + case 639: /* opt_trusted: TRUSTED */ +#line 4676 "preproc.y" + { + (yyval.str) = mm_strdup("trusted"); +} +#line 41418 "preproc.c" + break; + + case 640: /* opt_trusted: %empty */ +#line 4680 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41425 "preproc.c" + break; + + case 641: /* handler_name: name */ +#line 4687 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41433 "preproc.c" + break; + + case 642: /* handler_name: name attrs */ +#line 4691 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41441 "preproc.c" + break; + + case 643: /* opt_inline_handler: INLINE_P handler_name */ +#line 4699 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("inline"),(yyvsp[0].str)); +} +#line 41449 "preproc.c" + break; + + case 644: /* opt_inline_handler: %empty */ +#line 4703 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41456 "preproc.c" + break; + + case 645: /* validator_clause: VALIDATOR handler_name */ +#line 4710 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("validator"),(yyvsp[0].str)); +} +#line 41464 "preproc.c" + break; + + case 646: /* validator_clause: NO VALIDATOR */ +#line 4714 "preproc.y" + { + (yyval.str) = mm_strdup("no validator"); +} +#line 41472 "preproc.c" + break; + + case 647: /* opt_validator: validator_clause */ +#line 4722 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41480 "preproc.c" + break; + + case 648: /* opt_validator: %empty */ +#line 4726 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41487 "preproc.c" + break; + + case 649: /* opt_procedural: PROCEDURAL */ +#line 4733 "preproc.y" + { + (yyval.str) = mm_strdup("procedural"); +} +#line 41495 "preproc.c" + break; + + case 650: /* opt_procedural: %empty */ +#line 4737 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41502 "preproc.c" + break; + + case 651: /* CreateTableSpaceStmt: CREATE TABLESPACE name OptTableSpaceOwner LOCATION ecpg_sconst opt_reloptions */ +#line 4744 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("create tablespace"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("location"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41510 "preproc.c" + break; + + case 652: /* OptTableSpaceOwner: OWNER RoleSpec */ +#line 4752 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("owner"),(yyvsp[0].str)); +} +#line 41518 "preproc.c" + break; + + case 653: /* OptTableSpaceOwner: %empty */ +#line 4756 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41525 "preproc.c" + break; + + case 654: /* DropTableSpaceStmt: DROP TABLESPACE name */ +#line 4763 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop tablespace"),(yyvsp[0].str)); +} +#line 41533 "preproc.c" + break; + + case 655: /* DropTableSpaceStmt: DROP TABLESPACE IF_P EXISTS name */ +#line 4767 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop tablespace if exists"),(yyvsp[0].str)); +} +#line 41541 "preproc.c" + break; + + case 656: /* CreateExtensionStmt: CREATE EXTENSION name opt_with create_extension_opt_list */ +#line 4775 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create extension"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41549 "preproc.c" + break; + + case 657: /* CreateExtensionStmt: CREATE EXTENSION IF_P NOT EXISTS name opt_with create_extension_opt_list */ +#line 4779 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create extension if not exists"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41557 "preproc.c" + break; + + case 658: /* create_extension_opt_list: create_extension_opt_list create_extension_opt_item */ +#line 4787 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41565 "preproc.c" + break; + + case 659: /* create_extension_opt_list: %empty */ +#line 4791 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41572 "preproc.c" + break; + + case 660: /* create_extension_opt_item: SCHEMA name */ +#line 4798 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("schema"),(yyvsp[0].str)); +} +#line 41580 "preproc.c" + break; + + case 661: /* create_extension_opt_item: VERSION_P NonReservedWord_or_Sconst */ +#line 4802 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("version"),(yyvsp[0].str)); +} +#line 41588 "preproc.c" + break; + + case 662: /* create_extension_opt_item: FROM NonReservedWord_or_Sconst */ +#line 4806 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = cat_str(2,mm_strdup("from"),(yyvsp[0].str)); +} +#line 41597 "preproc.c" + break; + + case 663: /* create_extension_opt_item: CASCADE */ +#line 4811 "preproc.y" + { + (yyval.str) = mm_strdup("cascade"); +} +#line 41605 "preproc.c" + break; + + case 664: /* AlterExtensionStmt: ALTER EXTENSION name UPDATE alter_extension_opt_list */ +#line 4819 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter extension"),(yyvsp[-2].str),mm_strdup("update"),(yyvsp[0].str)); +} +#line 41613 "preproc.c" + break; + + case 665: /* alter_extension_opt_list: alter_extension_opt_list alter_extension_opt_item */ +#line 4827 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41621 "preproc.c" + break; + + case 666: /* alter_extension_opt_list: %empty */ +#line 4831 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41628 "preproc.c" + break; + + case 667: /* alter_extension_opt_item: TO NonReservedWord_or_Sconst */ +#line 4838 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("to"),(yyvsp[0].str)); +} +#line 41636 "preproc.c" + break; + + case 668: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop object_type_name name */ +#line 4846 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter extension"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41644 "preproc.c" + break; + + case 669: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop object_type_any_name any_name */ +#line 4850 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter extension"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41652 "preproc.c" + break; + + case 670: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes */ +#line 4854 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter extension"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("aggregate"),(yyvsp[0].str)); +} +#line 41660 "preproc.c" + break; + + case 671: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')' */ +#line 4858 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("alter extension"),(yyvsp[-7].str),(yyvsp[-6].str),mm_strdup("cast ("),(yyvsp[-3].str),mm_strdup("as"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 41668 "preproc.c" + break; + + case 672: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop DOMAIN_P Typename */ +#line 4862 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter extension"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("domain"),(yyvsp[0].str)); +} +#line 41676 "preproc.c" + break; + + case 673: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop FUNCTION function_with_argtypes */ +#line 4866 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter extension"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("function"),(yyvsp[0].str)); +} +#line 41684 "preproc.c" + break; + + case 674: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes */ +#line 4870 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter extension"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("operator"),(yyvsp[0].str)); +} +#line 41692 "preproc.c" + break; + + case 675: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop OPERATOR CLASS any_name USING name */ +#line 4874 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter extension"),(yyvsp[-6].str),(yyvsp[-5].str),mm_strdup("operator class"),(yyvsp[-2].str),mm_strdup("using"),(yyvsp[0].str)); +} +#line 41700 "preproc.c" + break; + + case 676: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop OPERATOR FAMILY any_name USING name */ +#line 4878 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter extension"),(yyvsp[-6].str),(yyvsp[-5].str),mm_strdup("operator family"),(yyvsp[-2].str),mm_strdup("using"),(yyvsp[0].str)); +} +#line 41708 "preproc.c" + break; + + case 677: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop PROCEDURE function_with_argtypes */ +#line 4882 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter extension"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("procedure"),(yyvsp[0].str)); +} +#line 41716 "preproc.c" + break; + + case 678: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop ROUTINE function_with_argtypes */ +#line 4886 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter extension"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("routine"),(yyvsp[0].str)); +} +#line 41724 "preproc.c" + break; + + case 679: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop TRANSFORM FOR Typename LANGUAGE name */ +#line 4890 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter extension"),(yyvsp[-6].str),(yyvsp[-5].str),mm_strdup("transform for"),(yyvsp[-2].str),mm_strdup("language"),(yyvsp[0].str)); +} +#line 41732 "preproc.c" + break; + + case 680: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop TYPE_P Typename */ +#line 4894 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter extension"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("type"),(yyvsp[0].str)); +} +#line 41740 "preproc.c" + break; + + case 681: /* CreateFdwStmt: CREATE FOREIGN DATA_P WRAPPER name opt_fdw_options create_generic_options */ +#line 4902 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create foreign data wrapper"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41748 "preproc.c" + break; + + case 682: /* fdw_option: HANDLER handler_name */ +#line 4910 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("handler"),(yyvsp[0].str)); +} +#line 41756 "preproc.c" + break; + + case 683: /* fdw_option: NO HANDLER */ +#line 4914 "preproc.y" + { + (yyval.str) = mm_strdup("no handler"); +} +#line 41764 "preproc.c" + break; + + case 684: /* fdw_option: VALIDATOR handler_name */ +#line 4918 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("validator"),(yyvsp[0].str)); +} +#line 41772 "preproc.c" + break; + + case 685: /* fdw_option: NO VALIDATOR */ +#line 4922 "preproc.y" + { + (yyval.str) = mm_strdup("no validator"); +} +#line 41780 "preproc.c" + break; + + case 686: /* fdw_options: fdw_option */ +#line 4930 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41788 "preproc.c" + break; + + case 687: /* fdw_options: fdw_options fdw_option */ +#line 4934 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41796 "preproc.c" + break; + + case 688: /* opt_fdw_options: fdw_options */ +#line 4942 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41804 "preproc.c" + break; + + case 689: /* opt_fdw_options: %empty */ +#line 4946 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41811 "preproc.c" + break; + + case 690: /* AlterFdwStmt: ALTER FOREIGN DATA_P WRAPPER name opt_fdw_options alter_generic_options */ +#line 4953 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter foreign data wrapper"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41819 "preproc.c" + break; + + case 691: /* AlterFdwStmt: ALTER FOREIGN DATA_P WRAPPER name fdw_options */ +#line 4957 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter foreign data wrapper"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41827 "preproc.c" + break; + + case 692: /* create_generic_options: OPTIONS '(' generic_option_list ')' */ +#line 4965 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("options ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 41835 "preproc.c" + break; + + case 693: /* create_generic_options: %empty */ +#line 4969 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41842 "preproc.c" + break; + + case 694: /* generic_option_list: generic_option_elem */ +#line 4976 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41850 "preproc.c" + break; + + case 695: /* generic_option_list: generic_option_list ',' generic_option_elem */ +#line 4980 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 41858 "preproc.c" + break; + + case 696: /* alter_generic_options: OPTIONS '(' alter_generic_option_list ')' */ +#line 4988 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("options ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 41866 "preproc.c" + break; + + case 697: /* alter_generic_option_list: alter_generic_option_elem */ +#line 4996 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41874 "preproc.c" + break; + + case 698: /* alter_generic_option_list: alter_generic_option_list ',' alter_generic_option_elem */ +#line 5000 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 41882 "preproc.c" + break; + + case 699: /* alter_generic_option_elem: generic_option_elem */ +#line 5008 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41890 "preproc.c" + break; + + case 700: /* alter_generic_option_elem: SET generic_option_elem */ +#line 5012 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("set"),(yyvsp[0].str)); +} +#line 41898 "preproc.c" + break; + + case 701: /* alter_generic_option_elem: ADD_P generic_option_elem */ +#line 5016 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("add"),(yyvsp[0].str)); +} +#line 41906 "preproc.c" + break; + + case 702: /* alter_generic_option_elem: DROP generic_option_name */ +#line 5020 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop"),(yyvsp[0].str)); +} +#line 41914 "preproc.c" + break; + + case 703: /* generic_option_elem: generic_option_name generic_option_arg */ +#line 5028 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41922 "preproc.c" + break; + + case 704: /* generic_option_name: ColLabel */ +#line 5036 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41930 "preproc.c" + break; + + case 705: /* generic_option_arg: ecpg_sconst */ +#line 5044 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41938 "preproc.c" + break; + + case 706: /* CreateForeignServerStmt: CREATE SERVER name opt_type opt_foreign_server_version FOREIGN DATA_P WRAPPER name create_generic_options */ +#line 5052 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("create server"),(yyvsp[-7].str),(yyvsp[-6].str),(yyvsp[-5].str),mm_strdup("foreign data wrapper"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41946 "preproc.c" + break; + + case 707: /* CreateForeignServerStmt: CREATE SERVER IF_P NOT EXISTS name opt_type opt_foreign_server_version FOREIGN DATA_P WRAPPER name create_generic_options */ +#line 5056 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("create server if not exists"),(yyvsp[-7].str),(yyvsp[-6].str),(yyvsp[-5].str),mm_strdup("foreign data wrapper"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 41954 "preproc.c" + break; + + case 708: /* opt_type: TYPE_P ecpg_sconst */ +#line 5064 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("type"),(yyvsp[0].str)); +} +#line 41962 "preproc.c" + break; + + case 709: /* opt_type: %empty */ +#line 5068 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 41969 "preproc.c" + break; + + case 710: /* foreign_server_version: VERSION_P ecpg_sconst */ +#line 5075 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("version"),(yyvsp[0].str)); +} +#line 41977 "preproc.c" + break; + + case 711: /* foreign_server_version: VERSION_P NULL_P */ +#line 5079 "preproc.y" + { + (yyval.str) = mm_strdup("version null"); +} +#line 41985 "preproc.c" + break; + + case 712: /* opt_foreign_server_version: foreign_server_version */ +#line 5087 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 41993 "preproc.c" + break; + + case 713: /* opt_foreign_server_version: %empty */ +#line 5091 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42000 "preproc.c" + break; + + case 714: /* AlterForeignServerStmt: ALTER SERVER name foreign_server_version alter_generic_options */ +#line 5098 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter server"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42008 "preproc.c" + break; + + case 715: /* AlterForeignServerStmt: ALTER SERVER name foreign_server_version */ +#line 5102 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter server"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42016 "preproc.c" + break; + + case 716: /* AlterForeignServerStmt: ALTER SERVER name alter_generic_options */ +#line 5106 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter server"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42024 "preproc.c" + break; + + case 717: /* CreateForeignTableStmt: CREATE FOREIGN TABLE qualified_name '(' OptTableElementList ')' OptInherit SERVER name create_generic_options */ +#line 5114 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("create foreign table"),(yyvsp[-7].str),mm_strdup("("),(yyvsp[-5].str),mm_strdup(")"),(yyvsp[-3].str),mm_strdup("server"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42032 "preproc.c" + break; + + case 718: /* CreateForeignTableStmt: CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name '(' OptTableElementList ')' OptInherit SERVER name create_generic_options */ +#line 5118 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("create foreign table if not exists"),(yyvsp[-7].str),mm_strdup("("),(yyvsp[-5].str),mm_strdup(")"),(yyvsp[-3].str),mm_strdup("server"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42040 "preproc.c" + break; + + case 719: /* CreateForeignTableStmt: CREATE FOREIGN TABLE qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec SERVER name create_generic_options */ +#line 5122 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("create foreign table"),(yyvsp[-8].str),mm_strdup("partition of"),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("server"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42048 "preproc.c" + break; + + case 720: /* CreateForeignTableStmt: CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec SERVER name create_generic_options */ +#line 5126 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("create foreign table if not exists"),(yyvsp[-8].str),mm_strdup("partition of"),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("server"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42056 "preproc.c" + break; + + case 721: /* ImportForeignSchemaStmt: IMPORT_P FOREIGN SCHEMA name import_qualification FROM SERVER name INTO name create_generic_options */ +#line 5134 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("import foreign schema"),(yyvsp[-7].str),(yyvsp[-6].str),mm_strdup("from server"),(yyvsp[-3].str),mm_strdup("into"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42064 "preproc.c" + break; + + case 722: /* import_qualification_type: LIMIT TO */ +#line 5142 "preproc.y" + { + (yyval.str) = mm_strdup("limit to"); +} +#line 42072 "preproc.c" + break; + + case 723: /* import_qualification_type: EXCEPT */ +#line 5146 "preproc.y" + { + (yyval.str) = mm_strdup("except"); +} +#line 42080 "preproc.c" + break; + + case 724: /* import_qualification: import_qualification_type '(' relation_expr_list ')' */ +#line 5154 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 42088 "preproc.c" + break; + + case 725: /* import_qualification: %empty */ +#line 5158 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42095 "preproc.c" + break; + + case 726: /* CreateUserMappingStmt: CREATE USER MAPPING FOR auth_ident SERVER name create_generic_options */ +#line 5165 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("create user mapping for"),(yyvsp[-3].str),mm_strdup("server"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42103 "preproc.c" + break; + + case 727: /* CreateUserMappingStmt: CREATE USER MAPPING IF_P NOT EXISTS FOR auth_ident SERVER name create_generic_options */ +#line 5169 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("create user mapping if not exists for"),(yyvsp[-3].str),mm_strdup("server"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42111 "preproc.c" + break; + + case 728: /* auth_ident: RoleSpec */ +#line 5177 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42119 "preproc.c" + break; + + case 729: /* auth_ident: USER */ +#line 5181 "preproc.y" + { + (yyval.str) = mm_strdup("user"); +} +#line 42127 "preproc.c" + break; + + case 730: /* DropUserMappingStmt: DROP USER MAPPING FOR auth_ident SERVER name */ +#line 5189 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("drop user mapping for"),(yyvsp[-2].str),mm_strdup("server"),(yyvsp[0].str)); +} +#line 42135 "preproc.c" + break; + + case 731: /* DropUserMappingStmt: DROP USER MAPPING IF_P EXISTS FOR auth_ident SERVER name */ +#line 5193 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("drop user mapping if exists for"),(yyvsp[-2].str),mm_strdup("server"),(yyvsp[0].str)); +} +#line 42143 "preproc.c" + break; + + case 732: /* AlterUserMappingStmt: ALTER USER MAPPING FOR auth_ident SERVER name alter_generic_options */ +#line 5201 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter user mapping for"),(yyvsp[-3].str),mm_strdup("server"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42151 "preproc.c" + break; + + case 733: /* CreatePolicyStmt: CREATE POLICY name ON qualified_name RowSecurityDefaultPermissive RowSecurityDefaultForCmd RowSecurityDefaultToRole RowSecurityOptionalExpr RowSecurityOptionalWithCheck */ +#line 5209 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("create policy"),(yyvsp[-7].str),mm_strdup("on"),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42159 "preproc.c" + break; + + case 734: /* AlterPolicyStmt: ALTER POLICY name ON qualified_name RowSecurityOptionalToRole RowSecurityOptionalExpr RowSecurityOptionalWithCheck */ +#line 5217 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter policy"),(yyvsp[-5].str),mm_strdup("on"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42167 "preproc.c" + break; + + case 735: /* RowSecurityOptionalExpr: USING '(' a_expr ')' */ +#line 5225 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("using ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 42175 "preproc.c" + break; + + case 736: /* RowSecurityOptionalExpr: %empty */ +#line 5229 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42182 "preproc.c" + break; + + case 737: /* RowSecurityOptionalWithCheck: WITH CHECK '(' a_expr ')' */ +#line 5236 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("with check ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 42190 "preproc.c" + break; + + case 738: /* RowSecurityOptionalWithCheck: %empty */ +#line 5240 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42197 "preproc.c" + break; + + case 739: /* RowSecurityDefaultToRole: TO role_list */ +#line 5247 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("to"),(yyvsp[0].str)); +} +#line 42205 "preproc.c" + break; + + case 740: /* RowSecurityDefaultToRole: %empty */ +#line 5251 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42212 "preproc.c" + break; + + case 741: /* RowSecurityOptionalToRole: TO role_list */ +#line 5258 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("to"),(yyvsp[0].str)); +} +#line 42220 "preproc.c" + break; + + case 742: /* RowSecurityOptionalToRole: %empty */ +#line 5262 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42227 "preproc.c" + break; + + case 743: /* RowSecurityDefaultPermissive: AS ecpg_ident */ +#line 5269 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("as"),(yyvsp[0].str)); +} +#line 42235 "preproc.c" + break; + + case 744: /* RowSecurityDefaultPermissive: %empty */ +#line 5273 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42242 "preproc.c" + break; + + case 745: /* RowSecurityDefaultForCmd: FOR row_security_cmd */ +#line 5280 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("for"),(yyvsp[0].str)); +} +#line 42250 "preproc.c" + break; + + case 746: /* RowSecurityDefaultForCmd: %empty */ +#line 5284 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42257 "preproc.c" + break; + + case 747: /* row_security_cmd: ALL */ +#line 5291 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 42265 "preproc.c" + break; + + case 748: /* row_security_cmd: SELECT */ +#line 5295 "preproc.y" + { + (yyval.str) = mm_strdup("select"); +} +#line 42273 "preproc.c" + break; + + case 749: /* row_security_cmd: INSERT */ +#line 5299 "preproc.y" + { + (yyval.str) = mm_strdup("insert"); +} +#line 42281 "preproc.c" + break; + + case 750: /* row_security_cmd: UPDATE */ +#line 5303 "preproc.y" + { + (yyval.str) = mm_strdup("update"); +} +#line 42289 "preproc.c" + break; + + case 751: /* row_security_cmd: DELETE_P */ +#line 5307 "preproc.y" + { + (yyval.str) = mm_strdup("delete"); +} +#line 42297 "preproc.c" + break; + + case 752: /* CreateAmStmt: CREATE ACCESS METHOD name TYPE_P am_type HANDLER handler_name */ +#line 5315 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("create access method"),(yyvsp[-4].str),mm_strdup("type"),(yyvsp[-2].str),mm_strdup("handler"),(yyvsp[0].str)); +} +#line 42305 "preproc.c" + break; + + case 753: /* am_type: INDEX */ +#line 5323 "preproc.y" + { + (yyval.str) = mm_strdup("index"); +} +#line 42313 "preproc.c" + break; + + case 754: /* am_type: TABLE */ +#line 5327 "preproc.y" + { + (yyval.str) = mm_strdup("table"); +} +#line 42321 "preproc.c" + break; + + case 755: /* CreateTrigStmt: CREATE opt_or_replace TRIGGER name TriggerActionTime TriggerEvents ON qualified_name TriggerReferencing TriggerForSpec TriggerWhen EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' */ +#line 5335 "preproc.y" + { + (yyval.str) = cat_str(17,mm_strdup("create"),(yyvsp[-15].str),mm_strdup("trigger"),(yyvsp[-13].str),(yyvsp[-12].str),(yyvsp[-11].str),mm_strdup("on"),(yyvsp[-9].str),(yyvsp[-8].str),(yyvsp[-7].str),(yyvsp[-6].str),mm_strdup("execute"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 42329 "preproc.c" + break; + + case 756: /* CreateTrigStmt: CREATE opt_or_replace CONSTRAINT TRIGGER name AFTER TriggerEvents ON qualified_name OptConstrFromTable ConstraintAttributeSpec FOR EACH ROW TriggerWhen EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' */ +#line 5339 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = cat_str(18,mm_strdup("create"),(yyvsp[-19].str),mm_strdup("constraint trigger"),(yyvsp[-16].str),mm_strdup("after"),(yyvsp[-14].str),mm_strdup("on"),(yyvsp[-12].str),(yyvsp[-11].str),(yyvsp[-10].str),mm_strdup("for each row"),(yyvsp[-6].str),mm_strdup("execute"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 42338 "preproc.c" + break; + + case 757: /* TriggerActionTime: BEFORE */ +#line 5348 "preproc.y" + { + (yyval.str) = mm_strdup("before"); +} +#line 42346 "preproc.c" + break; + + case 758: /* TriggerActionTime: AFTER */ +#line 5352 "preproc.y" + { + (yyval.str) = mm_strdup("after"); +} +#line 42354 "preproc.c" + break; + + case 759: /* TriggerActionTime: INSTEAD OF */ +#line 5356 "preproc.y" + { + (yyval.str) = mm_strdup("instead of"); +} +#line 42362 "preproc.c" + break; + + case 760: /* TriggerEvents: TriggerOneEvent */ +#line 5364 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42370 "preproc.c" + break; + + case 761: /* TriggerEvents: TriggerEvents OR TriggerOneEvent */ +#line 5368 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("or"),(yyvsp[0].str)); +} +#line 42378 "preproc.c" + break; + + case 762: /* TriggerOneEvent: INSERT */ +#line 5376 "preproc.y" + { + (yyval.str) = mm_strdup("insert"); +} +#line 42386 "preproc.c" + break; + + case 763: /* TriggerOneEvent: DELETE_P */ +#line 5380 "preproc.y" + { + (yyval.str) = mm_strdup("delete"); +} +#line 42394 "preproc.c" + break; + + case 764: /* TriggerOneEvent: UPDATE */ +#line 5384 "preproc.y" + { + (yyval.str) = mm_strdup("update"); +} +#line 42402 "preproc.c" + break; + + case 765: /* TriggerOneEvent: UPDATE OF columnList */ +#line 5388 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("update of"),(yyvsp[0].str)); +} +#line 42410 "preproc.c" + break; + + case 766: /* TriggerOneEvent: TRUNCATE */ +#line 5392 "preproc.y" + { + (yyval.str) = mm_strdup("truncate"); +} +#line 42418 "preproc.c" + break; + + case 767: /* TriggerReferencing: REFERENCING TriggerTransitions */ +#line 5400 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("referencing"),(yyvsp[0].str)); +} +#line 42426 "preproc.c" + break; + + case 768: /* TriggerReferencing: %empty */ +#line 5404 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42433 "preproc.c" + break; + + case 769: /* TriggerTransitions: TriggerTransition */ +#line 5411 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42441 "preproc.c" + break; + + case 770: /* TriggerTransitions: TriggerTransitions TriggerTransition */ +#line 5415 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42449 "preproc.c" + break; + + case 771: /* TriggerTransition: TransitionOldOrNew TransitionRowOrTable opt_as TransitionRelName */ +#line 5423 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42457 "preproc.c" + break; + + case 772: /* TransitionOldOrNew: NEW */ +#line 5431 "preproc.y" + { + (yyval.str) = mm_strdup("new"); +} +#line 42465 "preproc.c" + break; + + case 773: /* TransitionOldOrNew: OLD */ +#line 5435 "preproc.y" + { + (yyval.str) = mm_strdup("old"); +} +#line 42473 "preproc.c" + break; + + case 774: /* TransitionRowOrTable: TABLE */ +#line 5443 "preproc.y" + { + (yyval.str) = mm_strdup("table"); +} +#line 42481 "preproc.c" + break; + + case 775: /* TransitionRowOrTable: ROW */ +#line 5447 "preproc.y" + { + (yyval.str) = mm_strdup("row"); +} +#line 42489 "preproc.c" + break; + + case 776: /* TransitionRelName: ColId */ +#line 5455 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42497 "preproc.c" + break; + + case 777: /* TriggerForSpec: FOR TriggerForOptEach TriggerForType */ +#line 5463 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("for"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42505 "preproc.c" + break; + + case 778: /* TriggerForSpec: %empty */ +#line 5467 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42512 "preproc.c" + break; + + case 779: /* TriggerForOptEach: EACH */ +#line 5474 "preproc.y" + { + (yyval.str) = mm_strdup("each"); +} +#line 42520 "preproc.c" + break; + + case 780: /* TriggerForOptEach: %empty */ +#line 5478 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42527 "preproc.c" + break; + + case 781: /* TriggerForType: ROW */ +#line 5485 "preproc.y" + { + (yyval.str) = mm_strdup("row"); +} +#line 42535 "preproc.c" + break; + + case 782: /* TriggerForType: STATEMENT */ +#line 5489 "preproc.y" + { + (yyval.str) = mm_strdup("statement"); +} +#line 42543 "preproc.c" + break; + + case 783: /* TriggerWhen: WHEN '(' a_expr ')' */ +#line 5497 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("when ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 42551 "preproc.c" + break; + + case 784: /* TriggerWhen: %empty */ +#line 5501 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42558 "preproc.c" + break; + + case 785: /* FUNCTION_or_PROCEDURE: FUNCTION */ +#line 5508 "preproc.y" + { + (yyval.str) = mm_strdup("function"); +} +#line 42566 "preproc.c" + break; + + case 786: /* FUNCTION_or_PROCEDURE: PROCEDURE */ +#line 5512 "preproc.y" + { + (yyval.str) = mm_strdup("procedure"); +} +#line 42574 "preproc.c" + break; + + case 787: /* TriggerFuncArgs: TriggerFuncArg */ +#line 5520 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42582 "preproc.c" + break; + + case 788: /* TriggerFuncArgs: TriggerFuncArgs ',' TriggerFuncArg */ +#line 5524 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 42590 "preproc.c" + break; + + case 789: /* TriggerFuncArgs: %empty */ +#line 5528 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42597 "preproc.c" + break; + + case 790: /* TriggerFuncArg: Iconst */ +#line 5535 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42605 "preproc.c" + break; + + case 791: /* TriggerFuncArg: ecpg_fconst */ +#line 5539 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42613 "preproc.c" + break; + + case 792: /* TriggerFuncArg: ecpg_sconst */ +#line 5543 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42621 "preproc.c" + break; + + case 793: /* TriggerFuncArg: ColLabel */ +#line 5547 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42629 "preproc.c" + break; + + case 794: /* OptConstrFromTable: FROM qualified_name */ +#line 5555 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("from"),(yyvsp[0].str)); +} +#line 42637 "preproc.c" + break; + + case 795: /* OptConstrFromTable: %empty */ +#line 5559 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42644 "preproc.c" + break; + + case 796: /* ConstraintAttributeSpec: %empty */ +#line 5566 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 42651 "preproc.c" + break; + + case 797: /* ConstraintAttributeSpec: ConstraintAttributeSpec ConstraintAttributeElem */ +#line 5569 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42659 "preproc.c" + break; + + case 798: /* ConstraintAttributeElem: NOT DEFERRABLE */ +#line 5577 "preproc.y" + { + (yyval.str) = mm_strdup("not deferrable"); +} +#line 42667 "preproc.c" + break; + + case 799: /* ConstraintAttributeElem: DEFERRABLE */ +#line 5581 "preproc.y" + { + (yyval.str) = mm_strdup("deferrable"); +} +#line 42675 "preproc.c" + break; + + case 800: /* ConstraintAttributeElem: INITIALLY IMMEDIATE */ +#line 5585 "preproc.y" + { + (yyval.str) = mm_strdup("initially immediate"); +} +#line 42683 "preproc.c" + break; + + case 801: /* ConstraintAttributeElem: INITIALLY DEFERRED */ +#line 5589 "preproc.y" + { + (yyval.str) = mm_strdup("initially deferred"); +} +#line 42691 "preproc.c" + break; + + case 802: /* ConstraintAttributeElem: NOT VALID */ +#line 5593 "preproc.y" + { + (yyval.str) = mm_strdup("not valid"); +} +#line 42699 "preproc.c" + break; + + case 803: /* ConstraintAttributeElem: NO INHERIT */ +#line 5597 "preproc.y" + { + (yyval.str) = mm_strdup("no inherit"); +} +#line 42707 "preproc.c" + break; + + case 804: /* CreateEventTrigStmt: CREATE EVENT TRIGGER name ON ColLabel EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')' */ +#line 5605 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("create event trigger"),(yyvsp[-7].str),mm_strdup("on"),(yyvsp[-5].str),mm_strdup("execute"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("( )")); +} +#line 42715 "preproc.c" + break; + + case 805: /* CreateEventTrigStmt: CREATE EVENT TRIGGER name ON ColLabel WHEN event_trigger_when_list EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')' */ +#line 5609 "preproc.y" + { + (yyval.str) = cat_str(10,mm_strdup("create event trigger"),(yyvsp[-9].str),mm_strdup("on"),(yyvsp[-7].str),mm_strdup("when"),(yyvsp[-5].str),mm_strdup("execute"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("( )")); +} +#line 42723 "preproc.c" + break; + + case 806: /* event_trigger_when_list: event_trigger_when_item */ +#line 5617 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42731 "preproc.c" + break; + + case 807: /* event_trigger_when_list: event_trigger_when_list AND event_trigger_when_item */ +#line 5621 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("and"),(yyvsp[0].str)); +} +#line 42739 "preproc.c" + break; + + case 808: /* event_trigger_when_item: ColId IN_P '(' event_trigger_value_list ')' */ +#line 5629 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-4].str),mm_strdup("in ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 42747 "preproc.c" + break; + + case 809: /* event_trigger_value_list: SCONST */ +#line 5637 "preproc.y" + { + (yyval.str) = mm_strdup("sconst"); +} +#line 42755 "preproc.c" + break; + + case 810: /* event_trigger_value_list: event_trigger_value_list ',' SCONST */ +#line 5641 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup(", sconst")); +} +#line 42763 "preproc.c" + break; + + case 811: /* AlterEventTrigStmt: ALTER EVENT TRIGGER name enable_trigger */ +#line 5649 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter event trigger"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42771 "preproc.c" + break; + + case 812: /* enable_trigger: ENABLE_P */ +#line 5657 "preproc.y" + { + (yyval.str) = mm_strdup("enable"); +} +#line 42779 "preproc.c" + break; + + case 813: /* enable_trigger: ENABLE_P REPLICA */ +#line 5661 "preproc.y" + { + (yyval.str) = mm_strdup("enable replica"); +} +#line 42787 "preproc.c" + break; + + case 814: /* enable_trigger: ENABLE_P ALWAYS */ +#line 5665 "preproc.y" + { + (yyval.str) = mm_strdup("enable always"); +} +#line 42795 "preproc.c" + break; + + case 815: /* enable_trigger: DISABLE_P */ +#line 5669 "preproc.y" + { + (yyval.str) = mm_strdup("disable"); +} +#line 42803 "preproc.c" + break; + + case 816: /* CreateAssertionStmt: CREATE ASSERTION any_name CHECK '(' a_expr ')' ConstraintAttributeSpec */ +#line 5677 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = cat_str(6,mm_strdup("create assertion"),(yyvsp[-5].str),mm_strdup("check ("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 42812 "preproc.c" + break; + + case 817: /* DefineStmt: CREATE opt_or_replace AGGREGATE func_name aggr_args definition */ +#line 5686 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("create"),(yyvsp[-4].str),mm_strdup("aggregate"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42820 "preproc.c" + break; + + case 818: /* DefineStmt: CREATE opt_or_replace AGGREGATE func_name old_aggr_definition */ +#line 5690 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("create"),(yyvsp[-3].str),mm_strdup("aggregate"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42828 "preproc.c" + break; + + case 819: /* DefineStmt: CREATE OPERATOR any_operator definition */ +#line 5694 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("create operator"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42836 "preproc.c" + break; + + case 820: /* DefineStmt: CREATE TYPE_P any_name definition */ +#line 5698 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("create type"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42844 "preproc.c" + break; + + case 821: /* DefineStmt: CREATE TYPE_P any_name */ +#line 5702 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("create type"),(yyvsp[0].str)); +} +#line 42852 "preproc.c" + break; + + case 822: /* DefineStmt: CREATE TYPE_P any_name AS '(' OptTableFuncElementList ')' */ +#line 5706 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("create type"),(yyvsp[-4].str),mm_strdup("as ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 42860 "preproc.c" + break; + + case 823: /* DefineStmt: CREATE TYPE_P any_name AS ENUM_P '(' opt_enum_val_list ')' */ +#line 5710 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("create type"),(yyvsp[-5].str),mm_strdup("as enum ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 42868 "preproc.c" + break; + + case 824: /* DefineStmt: CREATE TYPE_P any_name AS RANGE definition */ +#line 5714 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create type"),(yyvsp[-3].str),mm_strdup("as range"),(yyvsp[0].str)); +} +#line 42876 "preproc.c" + break; + + case 825: /* DefineStmt: CREATE TEXT_P SEARCH PARSER any_name definition */ +#line 5718 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("create text search parser"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42884 "preproc.c" + break; + + case 826: /* DefineStmt: CREATE TEXT_P SEARCH DICTIONARY any_name definition */ +#line 5722 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("create text search dictionary"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42892 "preproc.c" + break; + + case 827: /* DefineStmt: CREATE TEXT_P SEARCH TEMPLATE any_name definition */ +#line 5726 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("create text search template"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42900 "preproc.c" + break; + + case 828: /* DefineStmt: CREATE TEXT_P SEARCH CONFIGURATION any_name definition */ +#line 5730 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("create text search configuration"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42908 "preproc.c" + break; + + case 829: /* DefineStmt: CREATE COLLATION any_name definition */ +#line 5734 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("create collation"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42916 "preproc.c" + break; + + case 830: /* DefineStmt: CREATE COLLATION IF_P NOT EXISTS any_name definition */ +#line 5738 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("create collation if not exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 42924 "preproc.c" + break; + + case 831: /* DefineStmt: CREATE COLLATION any_name FROM any_name */ +#line 5742 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create collation"),(yyvsp[-2].str),mm_strdup("from"),(yyvsp[0].str)); +} +#line 42932 "preproc.c" + break; + + case 832: /* DefineStmt: CREATE COLLATION IF_P NOT EXISTS any_name FROM any_name */ +#line 5746 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create collation if not exists"),(yyvsp[-2].str),mm_strdup("from"),(yyvsp[0].str)); +} +#line 42940 "preproc.c" + break; + + case 833: /* definition: '(' def_list ')' */ +#line 5754 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 42948 "preproc.c" + break; + + case 834: /* def_list: def_elem */ +#line 5762 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42956 "preproc.c" + break; + + case 835: /* def_list: def_list ',' def_elem */ +#line 5766 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 42964 "preproc.c" + break; + + case 836: /* def_elem: ColLabel '=' def_arg */ +#line 5774 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("="),(yyvsp[0].str)); +} +#line 42972 "preproc.c" + break; + + case 837: /* def_elem: ColLabel */ +#line 5778 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42980 "preproc.c" + break; + + case 838: /* def_arg: func_type */ +#line 5786 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42988 "preproc.c" + break; + + case 839: /* def_arg: reserved_keyword */ +#line 5790 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 42996 "preproc.c" + break; + + case 840: /* def_arg: qual_all_Op */ +#line 5794 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43004 "preproc.c" + break; + + case 841: /* def_arg: NumericOnly */ +#line 5798 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43012 "preproc.c" + break; + + case 842: /* def_arg: ecpg_sconst */ +#line 5802 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43020 "preproc.c" + break; + + case 843: /* def_arg: NONE */ +#line 5806 "preproc.y" + { + (yyval.str) = mm_strdup("none"); +} +#line 43028 "preproc.c" + break; + + case 844: /* old_aggr_definition: '(' old_aggr_list ')' */ +#line 5814 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 43036 "preproc.c" + break; + + case 845: /* old_aggr_list: old_aggr_elem */ +#line 5822 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43044 "preproc.c" + break; + + case 846: /* old_aggr_list: old_aggr_list ',' old_aggr_elem */ +#line 5826 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 43052 "preproc.c" + break; + + case 847: /* old_aggr_elem: ecpg_ident '=' def_arg */ +#line 5834 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("="),(yyvsp[0].str)); +} +#line 43060 "preproc.c" + break; + + case 848: /* opt_enum_val_list: enum_val_list */ +#line 5842 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43068 "preproc.c" + break; + + case 849: /* opt_enum_val_list: %empty */ +#line 5846 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 43075 "preproc.c" + break; + + case 850: /* enum_val_list: ecpg_sconst */ +#line 5853 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43083 "preproc.c" + break; + + case 851: /* enum_val_list: enum_val_list ',' ecpg_sconst */ +#line 5857 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 43091 "preproc.c" + break; + + case 852: /* AlterEnumStmt: ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists ecpg_sconst */ +#line 5865 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter type"),(yyvsp[-4].str),mm_strdup("add value"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43099 "preproc.c" + break; + + case 853: /* AlterEnumStmt: ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists ecpg_sconst BEFORE ecpg_sconst */ +#line 5869 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter type"),(yyvsp[-6].str),mm_strdup("add value"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("before"),(yyvsp[0].str)); +} +#line 43107 "preproc.c" + break; + + case 854: /* AlterEnumStmt: ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists ecpg_sconst AFTER ecpg_sconst */ +#line 5873 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter type"),(yyvsp[-6].str),mm_strdup("add value"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("after"),(yyvsp[0].str)); +} +#line 43115 "preproc.c" + break; + + case 855: /* AlterEnumStmt: ALTER TYPE_P any_name RENAME VALUE_P ecpg_sconst TO ecpg_sconst */ +#line 5877 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter type"),(yyvsp[-5].str),mm_strdup("rename value"),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 43123 "preproc.c" + break; + + case 856: /* opt_if_not_exists: IF_P NOT EXISTS */ +#line 5885 "preproc.y" + { + (yyval.str) = mm_strdup("if not exists"); +} +#line 43131 "preproc.c" + break; + + case 857: /* opt_if_not_exists: %empty */ +#line 5889 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 43138 "preproc.c" + break; + + case 858: /* CreateOpClassStmt: CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P Typename USING name opt_opfamily AS opclass_item_list */ +#line 5896 "preproc.y" + { + (yyval.str) = cat_str(10,mm_strdup("create operator class"),(yyvsp[-9].str),(yyvsp[-8].str),mm_strdup("for type"),(yyvsp[-5].str),mm_strdup("using"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("as"),(yyvsp[0].str)); +} +#line 43146 "preproc.c" + break; + + case 859: /* opclass_item_list: opclass_item */ +#line 5904 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43154 "preproc.c" + break; + + case 860: /* opclass_item_list: opclass_item_list ',' opclass_item */ +#line 5908 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 43162 "preproc.c" + break; + + case 861: /* opclass_item: OPERATOR Iconst any_operator opclass_purpose opt_recheck */ +#line 5916 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("operator"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43170 "preproc.c" + break; + + case 862: /* opclass_item: OPERATOR Iconst operator_with_argtypes opclass_purpose opt_recheck */ +#line 5920 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("operator"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43178 "preproc.c" + break; + + case 863: /* opclass_item: FUNCTION Iconst function_with_argtypes */ +#line 5924 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("function"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43186 "preproc.c" + break; + + case 864: /* opclass_item: FUNCTION Iconst '(' type_list ')' function_with_argtypes */ +#line 5928 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("function"),(yyvsp[-4].str),mm_strdup("("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 43194 "preproc.c" + break; + + case 865: /* opclass_item: STORAGE Typename */ +#line 5932 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("storage"),(yyvsp[0].str)); +} +#line 43202 "preproc.c" + break; + + case 866: /* opt_default: DEFAULT */ +#line 5940 "preproc.y" + { + (yyval.str) = mm_strdup("default"); +} +#line 43210 "preproc.c" + break; + + case 867: /* opt_default: %empty */ +#line 5944 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 43217 "preproc.c" + break; + + case 868: /* opt_opfamily: FAMILY any_name */ +#line 5951 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("family"),(yyvsp[0].str)); +} +#line 43225 "preproc.c" + break; + + case 869: /* opt_opfamily: %empty */ +#line 5955 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 43232 "preproc.c" + break; + + case 870: /* opclass_purpose: FOR SEARCH */ +#line 5962 "preproc.y" + { + (yyval.str) = mm_strdup("for search"); +} +#line 43240 "preproc.c" + break; + + case 871: /* opclass_purpose: FOR ORDER BY any_name */ +#line 5966 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("for order by"),(yyvsp[0].str)); +} +#line 43248 "preproc.c" + break; + + case 872: /* opclass_purpose: %empty */ +#line 5970 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 43255 "preproc.c" + break; + + case 873: /* opt_recheck: RECHECK */ +#line 5977 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = mm_strdup("recheck"); +} +#line 43264 "preproc.c" + break; + + case 874: /* opt_recheck: %empty */ +#line 5982 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 43271 "preproc.c" + break; + + case 875: /* CreateOpFamilyStmt: CREATE OPERATOR FAMILY any_name USING name */ +#line 5989 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create operator family"),(yyvsp[-2].str),mm_strdup("using"),(yyvsp[0].str)); +} +#line 43279 "preproc.c" + break; + + case 876: /* AlterOpFamilyStmt: ALTER OPERATOR FAMILY any_name USING name ADD_P opclass_item_list */ +#line 5997 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter operator family"),(yyvsp[-4].str),mm_strdup("using"),(yyvsp[-2].str),mm_strdup("add"),(yyvsp[0].str)); +} +#line 43287 "preproc.c" + break; + + case 877: /* AlterOpFamilyStmt: ALTER OPERATOR FAMILY any_name USING name DROP opclass_drop_list */ +#line 6001 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter operator family"),(yyvsp[-4].str),mm_strdup("using"),(yyvsp[-2].str),mm_strdup("drop"),(yyvsp[0].str)); +} +#line 43295 "preproc.c" + break; + + case 878: /* opclass_drop_list: opclass_drop */ +#line 6009 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43303 "preproc.c" + break; + + case 879: /* opclass_drop_list: opclass_drop_list ',' opclass_drop */ +#line 6013 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 43311 "preproc.c" + break; + + case 880: /* opclass_drop: OPERATOR Iconst '(' type_list ')' */ +#line 6021 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("operator"),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 43319 "preproc.c" + break; + + case 881: /* opclass_drop: FUNCTION Iconst '(' type_list ')' */ +#line 6025 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("function"),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 43327 "preproc.c" + break; + + case 882: /* DropOpClassStmt: DROP OPERATOR CLASS any_name USING name opt_drop_behavior */ +#line 6033 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("drop operator class"),(yyvsp[-3].str),mm_strdup("using"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43335 "preproc.c" + break; + + case 883: /* DropOpClassStmt: DROP OPERATOR CLASS IF_P EXISTS any_name USING name opt_drop_behavior */ +#line 6037 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("drop operator class if exists"),(yyvsp[-3].str),mm_strdup("using"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43343 "preproc.c" + break; + + case 884: /* DropOpFamilyStmt: DROP OPERATOR FAMILY any_name USING name opt_drop_behavior */ +#line 6045 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("drop operator family"),(yyvsp[-3].str),mm_strdup("using"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43351 "preproc.c" + break; + + case 885: /* DropOpFamilyStmt: DROP OPERATOR FAMILY IF_P EXISTS any_name USING name opt_drop_behavior */ +#line 6049 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("drop operator family if exists"),(yyvsp[-3].str),mm_strdup("using"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43359 "preproc.c" + break; + + case 886: /* DropOwnedStmt: DROP OWNED BY role_list opt_drop_behavior */ +#line 6057 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop owned by"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43367 "preproc.c" + break; + + case 887: /* ReassignOwnedStmt: REASSIGN OWNED BY role_list TO RoleSpec */ +#line 6065 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("reassign owned by"),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 43375 "preproc.c" + break; + + case 888: /* DropStmt: DROP object_type_any_name IF_P EXISTS any_name_list opt_drop_behavior */ +#line 6073 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("drop"),(yyvsp[-4].str),mm_strdup("if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43383 "preproc.c" + break; + + case 889: /* DropStmt: DROP object_type_any_name any_name_list opt_drop_behavior */ +#line 6077 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("drop"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43391 "preproc.c" + break; + + case 890: /* DropStmt: DROP drop_type_name IF_P EXISTS name_list opt_drop_behavior */ +#line 6081 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("drop"),(yyvsp[-4].str),mm_strdup("if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43399 "preproc.c" + break; + + case 891: /* DropStmt: DROP drop_type_name name_list opt_drop_behavior */ +#line 6085 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("drop"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43407 "preproc.c" + break; + + case 892: /* DropStmt: DROP object_type_name_on_any_name name ON any_name opt_drop_behavior */ +#line 6089 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("drop"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("on"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43415 "preproc.c" + break; + + case 893: /* DropStmt: DROP object_type_name_on_any_name IF_P EXISTS name ON any_name opt_drop_behavior */ +#line 6093 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("drop"),(yyvsp[-6].str),mm_strdup("if exists"),(yyvsp[-3].str),mm_strdup("on"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43423 "preproc.c" + break; + + case 894: /* DropStmt: DROP TYPE_P type_name_list opt_drop_behavior */ +#line 6097 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop type"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43431 "preproc.c" + break; + + case 895: /* DropStmt: DROP TYPE_P IF_P EXISTS type_name_list opt_drop_behavior */ +#line 6101 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop type if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43439 "preproc.c" + break; + + case 896: /* DropStmt: DROP DOMAIN_P type_name_list opt_drop_behavior */ +#line 6105 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop domain"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43447 "preproc.c" + break; + + case 897: /* DropStmt: DROP DOMAIN_P IF_P EXISTS type_name_list opt_drop_behavior */ +#line 6109 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop domain if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43455 "preproc.c" + break; + + case 898: /* DropStmt: DROP INDEX CONCURRENTLY any_name_list opt_drop_behavior */ +#line 6113 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop index concurrently"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43463 "preproc.c" + break; + + case 899: /* DropStmt: DROP INDEX CONCURRENTLY IF_P EXISTS any_name_list opt_drop_behavior */ +#line 6117 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop index concurrently if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43471 "preproc.c" + break; + + case 900: /* object_type_any_name: TABLE */ +#line 6125 "preproc.y" + { + (yyval.str) = mm_strdup("table"); +} +#line 43479 "preproc.c" + break; + + case 901: /* object_type_any_name: SEQUENCE */ +#line 6129 "preproc.y" + { + (yyval.str) = mm_strdup("sequence"); +} +#line 43487 "preproc.c" + break; + + case 902: /* object_type_any_name: VIEW */ +#line 6133 "preproc.y" + { + (yyval.str) = mm_strdup("view"); +} +#line 43495 "preproc.c" + break; + + case 903: /* object_type_any_name: MATERIALIZED VIEW */ +#line 6137 "preproc.y" + { + (yyval.str) = mm_strdup("materialized view"); +} +#line 43503 "preproc.c" + break; + + case 904: /* object_type_any_name: INDEX */ +#line 6141 "preproc.y" + { + (yyval.str) = mm_strdup("index"); +} +#line 43511 "preproc.c" + break; + + case 905: /* object_type_any_name: FOREIGN TABLE */ +#line 6145 "preproc.y" + { + (yyval.str) = mm_strdup("foreign table"); +} +#line 43519 "preproc.c" + break; + + case 906: /* object_type_any_name: COLLATION */ +#line 6149 "preproc.y" + { + (yyval.str) = mm_strdup("collation"); +} +#line 43527 "preproc.c" + break; + + case 907: /* object_type_any_name: CONVERSION_P */ +#line 6153 "preproc.y" + { + (yyval.str) = mm_strdup("conversion"); +} +#line 43535 "preproc.c" + break; + + case 908: /* object_type_any_name: STATISTICS */ +#line 6157 "preproc.y" + { + (yyval.str) = mm_strdup("statistics"); +} +#line 43543 "preproc.c" + break; + + case 909: /* object_type_any_name: TEXT_P SEARCH PARSER */ +#line 6161 "preproc.y" + { + (yyval.str) = mm_strdup("text search parser"); +} +#line 43551 "preproc.c" + break; + + case 910: /* object_type_any_name: TEXT_P SEARCH DICTIONARY */ +#line 6165 "preproc.y" + { + (yyval.str) = mm_strdup("text search dictionary"); +} +#line 43559 "preproc.c" + break; + + case 911: /* object_type_any_name: TEXT_P SEARCH TEMPLATE */ +#line 6169 "preproc.y" + { + (yyval.str) = mm_strdup("text search template"); +} +#line 43567 "preproc.c" + break; + + case 912: /* object_type_any_name: TEXT_P SEARCH CONFIGURATION */ +#line 6173 "preproc.y" + { + (yyval.str) = mm_strdup("text search configuration"); +} +#line 43575 "preproc.c" + break; + + case 913: /* object_type_name: drop_type_name */ +#line 6181 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43583 "preproc.c" + break; + + case 914: /* object_type_name: DATABASE */ +#line 6185 "preproc.y" + { + (yyval.str) = mm_strdup("database"); +} +#line 43591 "preproc.c" + break; + + case 915: /* object_type_name: ROLE */ +#line 6189 "preproc.y" + { + (yyval.str) = mm_strdup("role"); +} +#line 43599 "preproc.c" + break; + + case 916: /* object_type_name: SUBSCRIPTION */ +#line 6193 "preproc.y" + { + (yyval.str) = mm_strdup("subscription"); +} +#line 43607 "preproc.c" + break; + + case 917: /* object_type_name: TABLESPACE */ +#line 6197 "preproc.y" + { + (yyval.str) = mm_strdup("tablespace"); +} +#line 43615 "preproc.c" + break; + + case 918: /* drop_type_name: ACCESS METHOD */ +#line 6205 "preproc.y" + { + (yyval.str) = mm_strdup("access method"); +} +#line 43623 "preproc.c" + break; + + case 919: /* drop_type_name: EVENT TRIGGER */ +#line 6209 "preproc.y" + { + (yyval.str) = mm_strdup("event trigger"); +} +#line 43631 "preproc.c" + break; + + case 920: /* drop_type_name: EXTENSION */ +#line 6213 "preproc.y" + { + (yyval.str) = mm_strdup("extension"); +} +#line 43639 "preproc.c" + break; + + case 921: /* drop_type_name: FOREIGN DATA_P WRAPPER */ +#line 6217 "preproc.y" + { + (yyval.str) = mm_strdup("foreign data wrapper"); +} +#line 43647 "preproc.c" + break; + + case 922: /* drop_type_name: opt_procedural LANGUAGE */ +#line 6221 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("language")); +} +#line 43655 "preproc.c" + break; + + case 923: /* drop_type_name: PUBLICATION */ +#line 6225 "preproc.y" + { + (yyval.str) = mm_strdup("publication"); +} +#line 43663 "preproc.c" + break; + + case 924: /* drop_type_name: SCHEMA */ +#line 6229 "preproc.y" + { + (yyval.str) = mm_strdup("schema"); +} +#line 43671 "preproc.c" + break; + + case 925: /* drop_type_name: SERVER */ +#line 6233 "preproc.y" + { + (yyval.str) = mm_strdup("server"); +} +#line 43679 "preproc.c" + break; + + case 926: /* object_type_name_on_any_name: POLICY */ +#line 6241 "preproc.y" + { + (yyval.str) = mm_strdup("policy"); +} +#line 43687 "preproc.c" + break; + + case 927: /* object_type_name_on_any_name: RULE */ +#line 6245 "preproc.y" + { + (yyval.str) = mm_strdup("rule"); +} +#line 43695 "preproc.c" + break; + + case 928: /* object_type_name_on_any_name: TRIGGER */ +#line 6249 "preproc.y" + { + (yyval.str) = mm_strdup("trigger"); +} +#line 43703 "preproc.c" + break; + + case 929: /* any_name_list: any_name */ +#line 6257 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43711 "preproc.c" + break; + + case 930: /* any_name_list: any_name_list ',' any_name */ +#line 6261 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 43719 "preproc.c" + break; + + case 931: /* any_name: ColId */ +#line 6269 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43727 "preproc.c" + break; + + case 932: /* any_name: ColId attrs */ +#line 6273 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43735 "preproc.c" + break; + + case 933: /* attrs: '.' attr_name */ +#line 6281 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("."),(yyvsp[0].str)); +} +#line 43743 "preproc.c" + break; + + case 934: /* attrs: attrs '.' attr_name */ +#line 6285 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("."),(yyvsp[0].str)); +} +#line 43751 "preproc.c" + break; + + case 935: /* type_name_list: Typename */ +#line 6293 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43759 "preproc.c" + break; + + case 936: /* type_name_list: type_name_list ',' Typename */ +#line 6297 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 43767 "preproc.c" + break; + + case 937: /* TruncateStmt: TRUNCATE opt_table relation_expr_list opt_restart_seqs opt_drop_behavior */ +#line 6305 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("truncate"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 43775 "preproc.c" + break; + + case 938: /* opt_restart_seqs: CONTINUE_P IDENTITY_P */ +#line 6313 "preproc.y" + { + (yyval.str) = mm_strdup("continue identity"); +} +#line 43783 "preproc.c" + break; + + case 939: /* opt_restart_seqs: RESTART IDENTITY_P */ +#line 6317 "preproc.y" + { + (yyval.str) = mm_strdup("restart identity"); +} +#line 43791 "preproc.c" + break; + + case 940: /* opt_restart_seqs: %empty */ +#line 6321 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 43798 "preproc.c" + break; + + case 941: /* CommentStmt: COMMENT ON object_type_any_name any_name IS comment_text */ +#line 6328 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("comment on"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43806 "preproc.c" + break; + + case 942: /* CommentStmt: COMMENT ON COLUMN any_name IS comment_text */ +#line 6332 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("comment on column"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43814 "preproc.c" + break; + + case 943: /* CommentStmt: COMMENT ON object_type_name name IS comment_text */ +#line 6336 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("comment on"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43822 "preproc.c" + break; + + case 944: /* CommentStmt: COMMENT ON TYPE_P Typename IS comment_text */ +#line 6340 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("comment on type"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43830 "preproc.c" + break; + + case 945: /* CommentStmt: COMMENT ON DOMAIN_P Typename IS comment_text */ +#line 6344 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("comment on domain"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43838 "preproc.c" + break; + + case 946: /* CommentStmt: COMMENT ON AGGREGATE aggregate_with_argtypes IS comment_text */ +#line 6348 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("comment on aggregate"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43846 "preproc.c" + break; + + case 947: /* CommentStmt: COMMENT ON FUNCTION function_with_argtypes IS comment_text */ +#line 6352 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("comment on function"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43854 "preproc.c" + break; + + case 948: /* CommentStmt: COMMENT ON OPERATOR operator_with_argtypes IS comment_text */ +#line 6356 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("comment on operator"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43862 "preproc.c" + break; + + case 949: /* CommentStmt: COMMENT ON CONSTRAINT name ON any_name IS comment_text */ +#line 6360 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("comment on constraint"),(yyvsp[-4].str),mm_strdup("on"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43870 "preproc.c" + break; + + case 950: /* CommentStmt: COMMENT ON CONSTRAINT name ON DOMAIN_P any_name IS comment_text */ +#line 6364 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("comment on constraint"),(yyvsp[-5].str),mm_strdup("on domain"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43878 "preproc.c" + break; + + case 951: /* CommentStmt: COMMENT ON object_type_name_on_any_name name ON any_name IS comment_text */ +#line 6368 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("comment on"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("on"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43886 "preproc.c" + break; + + case 952: /* CommentStmt: COMMENT ON PROCEDURE function_with_argtypes IS comment_text */ +#line 6372 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("comment on procedure"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43894 "preproc.c" + break; + + case 953: /* CommentStmt: COMMENT ON ROUTINE function_with_argtypes IS comment_text */ +#line 6376 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("comment on routine"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43902 "preproc.c" + break; + + case 954: /* CommentStmt: COMMENT ON TRANSFORM FOR Typename LANGUAGE name IS comment_text */ +#line 6380 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("comment on transform for"),(yyvsp[-4].str),mm_strdup("language"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43910 "preproc.c" + break; + + case 955: /* CommentStmt: COMMENT ON OPERATOR CLASS any_name USING name IS comment_text */ +#line 6384 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("comment on operator class"),(yyvsp[-4].str),mm_strdup("using"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43918 "preproc.c" + break; + + case 956: /* CommentStmt: COMMENT ON OPERATOR FAMILY any_name USING name IS comment_text */ +#line 6388 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("comment on operator family"),(yyvsp[-4].str),mm_strdup("using"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43926 "preproc.c" + break; + + case 957: /* CommentStmt: COMMENT ON LARGE_P OBJECT_P NumericOnly IS comment_text */ +#line 6392 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("comment on large object"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43934 "preproc.c" + break; + + case 958: /* CommentStmt: COMMENT ON CAST '(' Typename AS Typename ')' IS comment_text */ +#line 6396 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("comment on cast ("),(yyvsp[-5].str),mm_strdup("as"),(yyvsp[-3].str),mm_strdup(") is"),(yyvsp[0].str)); +} +#line 43942 "preproc.c" + break; + + case 959: /* comment_text: ecpg_sconst */ +#line 6404 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 43950 "preproc.c" + break; + + case 960: /* comment_text: NULL_P */ +#line 6408 "preproc.y" + { + (yyval.str) = mm_strdup("null"); +} +#line 43958 "preproc.c" + break; + + case 961: /* SecLabelStmt: SECURITY LABEL opt_provider ON object_type_any_name any_name IS security_label */ +#line 6416 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("security label"),(yyvsp[-5].str),mm_strdup("on"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43966 "preproc.c" + break; + + case 962: /* SecLabelStmt: SECURITY LABEL opt_provider ON COLUMN any_name IS security_label */ +#line 6420 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("security label"),(yyvsp[-5].str),mm_strdup("on column"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43974 "preproc.c" + break; + + case 963: /* SecLabelStmt: SECURITY LABEL opt_provider ON object_type_name name IS security_label */ +#line 6424 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("security label"),(yyvsp[-5].str),mm_strdup("on"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43982 "preproc.c" + break; + + case 964: /* SecLabelStmt: SECURITY LABEL opt_provider ON TYPE_P Typename IS security_label */ +#line 6428 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("security label"),(yyvsp[-5].str),mm_strdup("on type"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43990 "preproc.c" + break; + + case 965: /* SecLabelStmt: SECURITY LABEL opt_provider ON DOMAIN_P Typename IS security_label */ +#line 6432 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("security label"),(yyvsp[-5].str),mm_strdup("on domain"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 43998 "preproc.c" + break; + + case 966: /* SecLabelStmt: SECURITY LABEL opt_provider ON AGGREGATE aggregate_with_argtypes IS security_label */ +#line 6436 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("security label"),(yyvsp[-5].str),mm_strdup("on aggregate"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 44006 "preproc.c" + break; + + case 967: /* SecLabelStmt: SECURITY LABEL opt_provider ON FUNCTION function_with_argtypes IS security_label */ +#line 6440 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("security label"),(yyvsp[-5].str),mm_strdup("on function"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 44014 "preproc.c" + break; + + case 968: /* SecLabelStmt: SECURITY LABEL opt_provider ON LARGE_P OBJECT_P NumericOnly IS security_label */ +#line 6444 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("security label"),(yyvsp[-6].str),mm_strdup("on large object"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 44022 "preproc.c" + break; + + case 969: /* SecLabelStmt: SECURITY LABEL opt_provider ON PROCEDURE function_with_argtypes IS security_label */ +#line 6448 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("security label"),(yyvsp[-5].str),mm_strdup("on procedure"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 44030 "preproc.c" + break; + + case 970: /* SecLabelStmt: SECURITY LABEL opt_provider ON ROUTINE function_with_argtypes IS security_label */ +#line 6452 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("security label"),(yyvsp[-5].str),mm_strdup("on routine"),(yyvsp[-2].str),mm_strdup("is"),(yyvsp[0].str)); +} +#line 44038 "preproc.c" + break; + + case 971: /* opt_provider: FOR NonReservedWord_or_Sconst */ +#line 6460 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("for"),(yyvsp[0].str)); +} +#line 44046 "preproc.c" + break; + + case 972: /* opt_provider: %empty */ +#line 6464 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 44053 "preproc.c" + break; + + case 973: /* security_label: ecpg_sconst */ +#line 6471 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 44061 "preproc.c" + break; + + case 974: /* security_label: NULL_P */ +#line 6475 "preproc.y" + { + (yyval.str) = mm_strdup("null"); +} +#line 44069 "preproc.c" + break; + + case 975: /* FetchStmt: FETCH fetch_args */ +#line 6483 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("fetch"),(yyvsp[0].str)); +} +#line 44077 "preproc.c" + break; + + case 976: /* FetchStmt: MOVE fetch_args */ +#line 6487 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("move"),(yyvsp[0].str)); +} +#line 44085 "preproc.c" + break; + + case 977: /* FetchStmt: FETCH fetch_args ecpg_fetch_into */ +#line 6491 "preproc.y" + { + (yyval.str) = cat2_str(mm_strdup("fetch"), (yyvsp[-1].str)); + } +#line 44093 "preproc.c" + break; + + case 978: /* FetchStmt: FETCH FORWARD cursor_name opt_ecpg_fetch_into */ +#line 6495 "preproc.y" + { + char *cursor_marker = (yyvsp[-1].str)[0] == ':' ? mm_strdup("$0") : (yyvsp[-1].str); + struct cursor *ptr = add_additional_variables((yyvsp[-1].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + (yyval.str) = cat_str(2, mm_strdup("fetch forward"), cursor_marker); + } +#line 44106 "preproc.c" + break; + + case 979: /* FetchStmt: FETCH FORWARD from_in cursor_name opt_ecpg_fetch_into */ +#line 6504 "preproc.y" + { + char *cursor_marker = (yyvsp[-1].str)[0] == ':' ? mm_strdup("$0") : (yyvsp[-1].str); + struct cursor *ptr = add_additional_variables((yyvsp[-1].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + (yyval.str) = cat_str(2, mm_strdup("fetch forward from"), cursor_marker); + } +#line 44119 "preproc.c" + break; + + case 980: /* FetchStmt: FETCH BACKWARD cursor_name opt_ecpg_fetch_into */ +#line 6513 "preproc.y" + { + char *cursor_marker = (yyvsp[-1].str)[0] == ':' ? mm_strdup("$0") : (yyvsp[-1].str); + struct cursor *ptr = add_additional_variables((yyvsp[-1].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + (yyval.str) = cat_str(2, mm_strdup("fetch backward"), cursor_marker); + } +#line 44132 "preproc.c" + break; + + case 981: /* FetchStmt: FETCH BACKWARD from_in cursor_name opt_ecpg_fetch_into */ +#line 6522 "preproc.y" + { + char *cursor_marker = (yyvsp[-1].str)[0] == ':' ? mm_strdup("$0") : (yyvsp[-1].str); + struct cursor *ptr = add_additional_variables((yyvsp[-1].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + (yyval.str) = cat_str(2, mm_strdup("fetch backward from"), cursor_marker); + } +#line 44145 "preproc.c" + break; + + case 982: /* FetchStmt: MOVE FORWARD cursor_name */ +#line 6531 "preproc.y" + { + char *cursor_marker = (yyvsp[0].str)[0] == ':' ? mm_strdup("$0") : (yyvsp[0].str); + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + (yyval.str) = cat_str(2, mm_strdup("move forward"), cursor_marker); + } +#line 44158 "preproc.c" + break; + + case 983: /* FetchStmt: MOVE FORWARD from_in cursor_name */ +#line 6540 "preproc.y" + { + char *cursor_marker = (yyvsp[0].str)[0] == ':' ? mm_strdup("$0") : (yyvsp[0].str); + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + (yyval.str) = cat_str(2, mm_strdup("move forward from"), cursor_marker); + } +#line 44171 "preproc.c" + break; + + case 984: /* FetchStmt: MOVE BACKWARD cursor_name */ +#line 6549 "preproc.y" + { + char *cursor_marker = (yyvsp[0].str)[0] == ':' ? mm_strdup("$0") : (yyvsp[0].str); + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + (yyval.str) = cat_str(2, mm_strdup("move backward"), cursor_marker); + } +#line 44184 "preproc.c" + break; + + case 985: /* FetchStmt: MOVE BACKWARD from_in cursor_name */ +#line 6558 "preproc.y" + { + char *cursor_marker = (yyvsp[0].str)[0] == ':' ? mm_strdup("$0") : (yyvsp[0].str); + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + (yyval.str) = cat_str(2, mm_strdup("move backward from"), cursor_marker); + } +#line 44197 "preproc.c" + break; + + case 986: /* fetch_args: cursor_name */ +#line 6571 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + + (yyval.str) = (yyvsp[0].str); +} +#line 44215 "preproc.c" + break; + + case 987: /* fetch_args: from_in cursor_name */ +#line 6585 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44233 "preproc.c" + break; + + case 988: /* fetch_args: NEXT opt_from_in cursor_name */ +#line 6599 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(3,mm_strdup("next"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44251 "preproc.c" + break; + + case 989: /* fetch_args: PRIOR opt_from_in cursor_name */ +#line 6613 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(3,mm_strdup("prior"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44269 "preproc.c" + break; + + case 990: /* fetch_args: FIRST_P opt_from_in cursor_name */ +#line 6627 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(3,mm_strdup("first"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44287 "preproc.c" + break; + + case 991: /* fetch_args: LAST_P opt_from_in cursor_name */ +#line 6641 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(3,mm_strdup("last"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44305 "preproc.c" + break; + + case 992: /* fetch_args: ABSOLUTE_P SignedIconst opt_from_in cursor_name */ +#line 6655 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + if ((yyvsp[-2].str)[0] == '$') + { + free((yyvsp[-2].str)); + (yyvsp[-2].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(4,mm_strdup("absolute"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44328 "preproc.c" + break; + + case 993: /* fetch_args: RELATIVE_P SignedIconst opt_from_in cursor_name */ +#line 6674 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + if ((yyvsp[-2].str)[0] == '$') + { + free((yyvsp[-2].str)); + (yyvsp[-2].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(4,mm_strdup("relative"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44351 "preproc.c" + break; + + case 994: /* fetch_args: SignedIconst opt_from_in cursor_name */ +#line 6693 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + if ((yyvsp[-2].str)[0] == '$') + { + free((yyvsp[-2].str)); + (yyvsp[-2].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44374 "preproc.c" + break; + + case 995: /* fetch_args: ALL opt_from_in cursor_name */ +#line 6712 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(3,mm_strdup("all"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44392 "preproc.c" + break; + + case 996: /* fetch_args: FORWARD SignedIconst opt_from_in cursor_name */ +#line 6726 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + if ((yyvsp[-2].str)[0] == '$') + { + free((yyvsp[-2].str)); + (yyvsp[-2].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(4,mm_strdup("forward"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44415 "preproc.c" + break; + + case 997: /* fetch_args: FORWARD ALL opt_from_in cursor_name */ +#line 6745 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(3,mm_strdup("forward all"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44433 "preproc.c" + break; + + case 998: /* fetch_args: BACKWARD SignedIconst opt_from_in cursor_name */ +#line 6759 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + if ((yyvsp[-2].str)[0] == '$') + { + free((yyvsp[-2].str)); + (yyvsp[-2].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(4,mm_strdup("backward"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44456 "preproc.c" + break; + + case 999: /* fetch_args: BACKWARD ALL opt_from_in cursor_name */ +#line 6778 "preproc.y" + { + struct cursor *ptr = add_additional_variables((yyvsp[0].str), false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ((yyvsp[0].str)[0] == ':') + { + free((yyvsp[0].str)); + (yyvsp[0].str) = mm_strdup("$0"); + } + + (yyval.str) = cat_str(3,mm_strdup("backward all"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44474 "preproc.c" + break; + + case 1000: /* from_in: FROM */ +#line 6796 "preproc.y" + { + (yyval.str) = mm_strdup("from"); +} +#line 44482 "preproc.c" + break; + + case 1001: /* from_in: IN_P */ +#line 6800 "preproc.y" + { + (yyval.str) = mm_strdup("in"); +} +#line 44490 "preproc.c" + break; + + case 1002: /* opt_from_in: from_in */ +#line 6808 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 44498 "preproc.c" + break; + + case 1003: /* opt_from_in: %empty */ +#line 6812 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 44505 "preproc.c" + break; + + case 1004: /* GrantStmt: GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_option opt_granted_by */ +#line 6819 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("grant"),(yyvsp[-6].str),mm_strdup("on"),(yyvsp[-4].str),mm_strdup("to"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44513 "preproc.c" + break; + + case 1005: /* RevokeStmt: REVOKE privileges ON privilege_target FROM grantee_list opt_granted_by opt_drop_behavior */ +#line 6827 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("revoke"),(yyvsp[-6].str),mm_strdup("on"),(yyvsp[-4].str),mm_strdup("from"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44521 "preproc.c" + break; + + case 1006: /* RevokeStmt: REVOKE GRANT OPTION FOR privileges ON privilege_target FROM grantee_list opt_granted_by opt_drop_behavior */ +#line 6831 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("revoke grant option for"),(yyvsp[-6].str),mm_strdup("on"),(yyvsp[-4].str),mm_strdup("from"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44529 "preproc.c" + break; + + case 1007: /* privileges: privilege_list */ +#line 6839 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 44537 "preproc.c" + break; + + case 1008: /* privileges: ALL */ +#line 6843 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 44545 "preproc.c" + break; + + case 1009: /* privileges: ALL PRIVILEGES */ +#line 6847 "preproc.y" + { + (yyval.str) = mm_strdup("all privileges"); +} +#line 44553 "preproc.c" + break; + + case 1010: /* privileges: ALL '(' columnList ')' */ +#line 6851 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("all ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 44561 "preproc.c" + break; + + case 1011: /* privileges: ALL PRIVILEGES '(' columnList ')' */ +#line 6855 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("all privileges ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 44569 "preproc.c" + break; + + case 1012: /* privilege_list: privilege */ +#line 6863 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 44577 "preproc.c" + break; + + case 1013: /* privilege_list: privilege_list ',' privilege */ +#line 6867 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 44585 "preproc.c" + break; + + case 1014: /* privilege: SELECT opt_column_list */ +#line 6875 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("select"),(yyvsp[0].str)); +} +#line 44593 "preproc.c" + break; + + case 1015: /* privilege: REFERENCES opt_column_list */ +#line 6879 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("references"),(yyvsp[0].str)); +} +#line 44601 "preproc.c" + break; + + case 1016: /* privilege: CREATE opt_column_list */ +#line 6883 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("create"),(yyvsp[0].str)); +} +#line 44609 "preproc.c" + break; + + case 1017: /* privilege: ColId opt_column_list */ +#line 6887 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44617 "preproc.c" + break; + + case 1018: /* privilege_target: qualified_name_list */ +#line 6895 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 44625 "preproc.c" + break; + + case 1019: /* privilege_target: TABLE qualified_name_list */ +#line 6899 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("table"),(yyvsp[0].str)); +} +#line 44633 "preproc.c" + break; + + case 1020: /* privilege_target: SEQUENCE qualified_name_list */ +#line 6903 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("sequence"),(yyvsp[0].str)); +} +#line 44641 "preproc.c" + break; + + case 1021: /* privilege_target: FOREIGN DATA_P WRAPPER name_list */ +#line 6907 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("foreign data wrapper"),(yyvsp[0].str)); +} +#line 44649 "preproc.c" + break; + + case 1022: /* privilege_target: FOREIGN SERVER name_list */ +#line 6911 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("foreign server"),(yyvsp[0].str)); +} +#line 44657 "preproc.c" + break; + + case 1023: /* privilege_target: FUNCTION function_with_argtypes_list */ +#line 6915 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("function"),(yyvsp[0].str)); +} +#line 44665 "preproc.c" + break; + + case 1024: /* privilege_target: PROCEDURE function_with_argtypes_list */ +#line 6919 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("procedure"),(yyvsp[0].str)); +} +#line 44673 "preproc.c" + break; + + case 1025: /* privilege_target: ROUTINE function_with_argtypes_list */ +#line 6923 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("routine"),(yyvsp[0].str)); +} +#line 44681 "preproc.c" + break; + + case 1026: /* privilege_target: DATABASE name_list */ +#line 6927 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("database"),(yyvsp[0].str)); +} +#line 44689 "preproc.c" + break; + + case 1027: /* privilege_target: DOMAIN_P any_name_list */ +#line 6931 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("domain"),(yyvsp[0].str)); +} +#line 44697 "preproc.c" + break; + + case 1028: /* privilege_target: LANGUAGE name_list */ +#line 6935 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("language"),(yyvsp[0].str)); +} +#line 44705 "preproc.c" + break; + + case 1029: /* privilege_target: LARGE_P OBJECT_P NumericOnly_list */ +#line 6939 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("large object"),(yyvsp[0].str)); +} +#line 44713 "preproc.c" + break; + + case 1030: /* privilege_target: SCHEMA name_list */ +#line 6943 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("schema"),(yyvsp[0].str)); +} +#line 44721 "preproc.c" + break; + + case 1031: /* privilege_target: TABLESPACE name_list */ +#line 6947 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("tablespace"),(yyvsp[0].str)); +} +#line 44729 "preproc.c" + break; + + case 1032: /* privilege_target: TYPE_P any_name_list */ +#line 6951 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("type"),(yyvsp[0].str)); +} +#line 44737 "preproc.c" + break; + + case 1033: /* privilege_target: ALL TABLES IN_P SCHEMA name_list */ +#line 6955 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("all tables in schema"),(yyvsp[0].str)); +} +#line 44745 "preproc.c" + break; + + case 1034: /* privilege_target: ALL SEQUENCES IN_P SCHEMA name_list */ +#line 6959 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("all sequences in schema"),(yyvsp[0].str)); +} +#line 44753 "preproc.c" + break; + + case 1035: /* privilege_target: ALL FUNCTIONS IN_P SCHEMA name_list */ +#line 6963 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("all functions in schema"),(yyvsp[0].str)); +} +#line 44761 "preproc.c" + break; + + case 1036: /* privilege_target: ALL PROCEDURES IN_P SCHEMA name_list */ +#line 6967 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("all procedures in schema"),(yyvsp[0].str)); +} +#line 44769 "preproc.c" + break; + + case 1037: /* privilege_target: ALL ROUTINES IN_P SCHEMA name_list */ +#line 6971 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("all routines in schema"),(yyvsp[0].str)); +} +#line 44777 "preproc.c" + break; + + case 1038: /* grantee_list: grantee */ +#line 6979 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 44785 "preproc.c" + break; + + case 1039: /* grantee_list: grantee_list ',' grantee */ +#line 6983 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 44793 "preproc.c" + break; + + case 1040: /* grantee: RoleSpec */ +#line 6991 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 44801 "preproc.c" + break; + + case 1041: /* grantee: GROUP_P RoleSpec */ +#line 6995 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("group"),(yyvsp[0].str)); +} +#line 44809 "preproc.c" + break; + + case 1042: /* opt_grant_grant_option: WITH GRANT OPTION */ +#line 7003 "preproc.y" + { + (yyval.str) = mm_strdup("with grant option"); +} +#line 44817 "preproc.c" + break; + + case 1043: /* opt_grant_grant_option: %empty */ +#line 7007 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 44824 "preproc.c" + break; + + case 1044: /* GrantRoleStmt: GRANT privilege_list TO role_list opt_grant_admin_option opt_granted_by */ +#line 7014 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("grant"),(yyvsp[-4].str),mm_strdup("to"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44832 "preproc.c" + break; + + case 1045: /* RevokeRoleStmt: REVOKE privilege_list FROM role_list opt_granted_by opt_drop_behavior */ +#line 7022 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("revoke"),(yyvsp[-4].str),mm_strdup("from"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44840 "preproc.c" + break; + + case 1046: /* RevokeRoleStmt: REVOKE ADMIN OPTION FOR privilege_list FROM role_list opt_granted_by opt_drop_behavior */ +#line 7026 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("revoke admin option for"),(yyvsp[-4].str),mm_strdup("from"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44848 "preproc.c" + break; + + case 1047: /* opt_grant_admin_option: WITH ADMIN OPTION */ +#line 7034 "preproc.y" + { + (yyval.str) = mm_strdup("with admin option"); +} +#line 44856 "preproc.c" + break; + + case 1048: /* opt_grant_admin_option: %empty */ +#line 7038 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 44863 "preproc.c" + break; + + case 1049: /* opt_granted_by: GRANTED BY RoleSpec */ +#line 7045 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("granted by"),(yyvsp[0].str)); +} +#line 44871 "preproc.c" + break; + + case 1050: /* opt_granted_by: %empty */ +#line 7049 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 44878 "preproc.c" + break; + + case 1051: /* AlterDefaultPrivilegesStmt: ALTER DEFAULT PRIVILEGES DefACLOptionList DefACLAction */ +#line 7056 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter default privileges"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44886 "preproc.c" + break; + + case 1052: /* DefACLOptionList: DefACLOptionList DefACLOption */ +#line 7064 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44894 "preproc.c" + break; + + case 1053: /* DefACLOptionList: %empty */ +#line 7068 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 44901 "preproc.c" + break; + + case 1054: /* DefACLOption: IN_P SCHEMA name_list */ +#line 7075 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("in schema"),(yyvsp[0].str)); +} +#line 44909 "preproc.c" + break; + + case 1055: /* DefACLOption: FOR ROLE role_list */ +#line 7079 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("for role"),(yyvsp[0].str)); +} +#line 44917 "preproc.c" + break; + + case 1056: /* DefACLOption: FOR USER role_list */ +#line 7083 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("for user"),(yyvsp[0].str)); +} +#line 44925 "preproc.c" + break; + + case 1057: /* DefACLAction: GRANT privileges ON defacl_privilege_target TO grantee_list opt_grant_grant_option */ +#line 7091 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("grant"),(yyvsp[-5].str),mm_strdup("on"),(yyvsp[-3].str),mm_strdup("to"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44933 "preproc.c" + break; + + case 1058: /* DefACLAction: REVOKE privileges ON defacl_privilege_target FROM grantee_list opt_drop_behavior */ +#line 7095 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("revoke"),(yyvsp[-5].str),mm_strdup("on"),(yyvsp[-3].str),mm_strdup("from"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44941 "preproc.c" + break; + + case 1059: /* DefACLAction: REVOKE GRANT OPTION FOR privileges ON defacl_privilege_target FROM grantee_list opt_drop_behavior */ +#line 7099 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("revoke grant option for"),(yyvsp[-5].str),mm_strdup("on"),(yyvsp[-3].str),mm_strdup("from"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 44949 "preproc.c" + break; + + case 1060: /* defacl_privilege_target: TABLES */ +#line 7107 "preproc.y" + { + (yyval.str) = mm_strdup("tables"); +} +#line 44957 "preproc.c" + break; + + case 1061: /* defacl_privilege_target: FUNCTIONS */ +#line 7111 "preproc.y" + { + (yyval.str) = mm_strdup("functions"); +} +#line 44965 "preproc.c" + break; + + case 1062: /* defacl_privilege_target: ROUTINES */ +#line 7115 "preproc.y" + { + (yyval.str) = mm_strdup("routines"); +} +#line 44973 "preproc.c" + break; + + case 1063: /* defacl_privilege_target: SEQUENCES */ +#line 7119 "preproc.y" + { + (yyval.str) = mm_strdup("sequences"); +} +#line 44981 "preproc.c" + break; + + case 1064: /* defacl_privilege_target: TYPES_P */ +#line 7123 "preproc.y" + { + (yyval.str) = mm_strdup("types"); +} +#line 44989 "preproc.c" + break; + + case 1065: /* defacl_privilege_target: SCHEMAS */ +#line 7127 "preproc.y" + { + (yyval.str) = mm_strdup("schemas"); +} +#line 44997 "preproc.c" + break; + + case 1066: /* IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name ON relation_expr access_method_clause '(' index_params ')' opt_include opt_reloptions OptTableSpace where_clause */ +#line 7135 "preproc.y" + { + (yyval.str) = cat_str(15,mm_strdup("create"),(yyvsp[-13].str),mm_strdup("index"),(yyvsp[-11].str),(yyvsp[-10].str),mm_strdup("on"),(yyvsp[-8].str),(yyvsp[-7].str),mm_strdup("("),(yyvsp[-5].str),mm_strdup(")"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45005 "preproc.c" + break; + + case 1067: /* IndexStmt: CREATE opt_unique INDEX opt_concurrently IF_P NOT EXISTS name ON relation_expr access_method_clause '(' index_params ')' opt_include opt_reloptions OptTableSpace where_clause */ +#line 7139 "preproc.y" + { + (yyval.str) = cat_str(16,mm_strdup("create"),(yyvsp[-16].str),mm_strdup("index"),(yyvsp[-14].str),mm_strdup("if not exists"),(yyvsp[-10].str),mm_strdup("on"),(yyvsp[-8].str),(yyvsp[-7].str),mm_strdup("("),(yyvsp[-5].str),mm_strdup(")"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45013 "preproc.c" + break; + + case 1068: /* opt_unique: UNIQUE */ +#line 7147 "preproc.y" + { + (yyval.str) = mm_strdup("unique"); +} +#line 45021 "preproc.c" + break; + + case 1069: /* opt_unique: %empty */ +#line 7151 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45028 "preproc.c" + break; + + case 1070: /* opt_concurrently: CONCURRENTLY */ +#line 7158 "preproc.y" + { + (yyval.str) = mm_strdup("concurrently"); +} +#line 45036 "preproc.c" + break; + + case 1071: /* opt_concurrently: %empty */ +#line 7162 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45043 "preproc.c" + break; + + case 1072: /* opt_index_name: name */ +#line 7169 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45051 "preproc.c" + break; + + case 1073: /* opt_index_name: %empty */ +#line 7173 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45058 "preproc.c" + break; + + case 1074: /* access_method_clause: USING name */ +#line 7180 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("using"),(yyvsp[0].str)); +} +#line 45066 "preproc.c" + break; + + case 1075: /* access_method_clause: %empty */ +#line 7184 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45073 "preproc.c" + break; + + case 1076: /* index_params: index_elem */ +#line 7191 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45081 "preproc.c" + break; + + case 1077: /* index_params: index_params ',' index_elem */ +#line 7195 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 45089 "preproc.c" + break; + + case 1078: /* index_elem_options: opt_collate opt_class opt_asc_desc opt_nulls_order */ +#line 7203 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45097 "preproc.c" + break; + + case 1079: /* index_elem_options: opt_collate any_name reloptions opt_asc_desc opt_nulls_order */ +#line 7207 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45105 "preproc.c" + break; + + case 1080: /* index_elem: ColId index_elem_options */ +#line 7215 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45113 "preproc.c" + break; + + case 1081: /* index_elem: func_expr_windowless index_elem_options */ +#line 7219 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45121 "preproc.c" + break; + + case 1082: /* index_elem: '(' a_expr ')' index_elem_options */ +#line 7223 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 45129 "preproc.c" + break; + + case 1083: /* opt_include: INCLUDE '(' index_including_params ')' */ +#line 7231 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("include ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 45137 "preproc.c" + break; + + case 1084: /* opt_include: %empty */ +#line 7235 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45144 "preproc.c" + break; + + case 1085: /* index_including_params: index_elem */ +#line 7242 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45152 "preproc.c" + break; + + case 1086: /* index_including_params: index_including_params ',' index_elem */ +#line 7246 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 45160 "preproc.c" + break; + + case 1087: /* opt_collate: COLLATE any_name */ +#line 7254 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("collate"),(yyvsp[0].str)); +} +#line 45168 "preproc.c" + break; + + case 1088: /* opt_collate: %empty */ +#line 7258 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45175 "preproc.c" + break; + + case 1089: /* opt_class: any_name */ +#line 7265 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45183 "preproc.c" + break; + + case 1090: /* opt_class: %empty */ +#line 7269 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45190 "preproc.c" + break; + + case 1091: /* opt_asc_desc: ASC */ +#line 7276 "preproc.y" + { + (yyval.str) = mm_strdup("asc"); +} +#line 45198 "preproc.c" + break; + + case 1092: /* opt_asc_desc: DESC */ +#line 7280 "preproc.y" + { + (yyval.str) = mm_strdup("desc"); +} +#line 45206 "preproc.c" + break; + + case 1093: /* opt_asc_desc: %empty */ +#line 7284 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45213 "preproc.c" + break; + + case 1094: /* opt_nulls_order: NULLS_LA FIRST_P */ +#line 7291 "preproc.y" + { + (yyval.str) = mm_strdup("nulls first"); +} +#line 45221 "preproc.c" + break; + + case 1095: /* opt_nulls_order: NULLS_LA LAST_P */ +#line 7295 "preproc.y" + { + (yyval.str) = mm_strdup("nulls last"); +} +#line 45229 "preproc.c" + break; + + case 1096: /* opt_nulls_order: %empty */ +#line 7299 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45236 "preproc.c" + break; + + case 1097: /* CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS func_return opt_createfunc_opt_list opt_routine_body */ +#line 7306 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("create"),(yyvsp[-7].str),mm_strdup("function"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("returns"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45244 "preproc.c" + break; + + case 1098: /* CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS TABLE '(' table_func_column_list ')' opt_createfunc_opt_list opt_routine_body */ +#line 7310 "preproc.y" + { + (yyval.str) = cat_str(10,mm_strdup("create"),(yyvsp[-10].str),mm_strdup("function"),(yyvsp[-8].str),(yyvsp[-7].str),mm_strdup("returns table ("),(yyvsp[-3].str),mm_strdup(")"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45252 "preproc.c" + break; + + case 1099: /* CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args_with_defaults opt_createfunc_opt_list opt_routine_body */ +#line 7314 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("create"),(yyvsp[-5].str),mm_strdup("function"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45260 "preproc.c" + break; + + case 1100: /* CreateFunctionStmt: CREATE opt_or_replace PROCEDURE func_name func_args_with_defaults opt_createfunc_opt_list opt_routine_body */ +#line 7318 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("create"),(yyvsp[-5].str),mm_strdup("procedure"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45268 "preproc.c" + break; + + case 1101: /* opt_or_replace: OR REPLACE */ +#line 7326 "preproc.y" + { + (yyval.str) = mm_strdup("or replace"); +} +#line 45276 "preproc.c" + break; + + case 1102: /* opt_or_replace: %empty */ +#line 7330 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45283 "preproc.c" + break; + + case 1103: /* func_args: '(' func_args_list ')' */ +#line 7337 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 45291 "preproc.c" + break; + + case 1104: /* func_args: '(' ')' */ +#line 7341 "preproc.y" + { + (yyval.str) = mm_strdup("( )"); +} +#line 45299 "preproc.c" + break; + + case 1105: /* func_args_list: func_arg */ +#line 7349 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45307 "preproc.c" + break; + + case 1106: /* func_args_list: func_args_list ',' func_arg */ +#line 7353 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 45315 "preproc.c" + break; + + case 1107: /* function_with_argtypes_list: function_with_argtypes */ +#line 7361 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45323 "preproc.c" + break; + + case 1108: /* function_with_argtypes_list: function_with_argtypes_list ',' function_with_argtypes */ +#line 7365 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 45331 "preproc.c" + break; + + case 1109: /* function_with_argtypes: func_name func_args */ +#line 7373 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45339 "preproc.c" + break; + + case 1110: /* function_with_argtypes: type_func_name_keyword */ +#line 7377 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45347 "preproc.c" + break; + + case 1111: /* function_with_argtypes: ColId */ +#line 7381 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45355 "preproc.c" + break; + + case 1112: /* function_with_argtypes: ColId indirection */ +#line 7385 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45363 "preproc.c" + break; + + case 1113: /* func_args_with_defaults: '(' func_args_with_defaults_list ')' */ +#line 7393 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 45371 "preproc.c" + break; + + case 1114: /* func_args_with_defaults: '(' ')' */ +#line 7397 "preproc.y" + { + (yyval.str) = mm_strdup("( )"); +} +#line 45379 "preproc.c" + break; + + case 1115: /* func_args_with_defaults_list: func_arg_with_default */ +#line 7405 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45387 "preproc.c" + break; + + case 1116: /* func_args_with_defaults_list: func_args_with_defaults_list ',' func_arg_with_default */ +#line 7409 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 45395 "preproc.c" + break; + + case 1117: /* func_arg: arg_class param_name func_type */ +#line 7417 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45403 "preproc.c" + break; + + case 1118: /* func_arg: param_name arg_class func_type */ +#line 7421 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45411 "preproc.c" + break; + + case 1119: /* func_arg: param_name func_type */ +#line 7425 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45419 "preproc.c" + break; + + case 1120: /* func_arg: arg_class func_type */ +#line 7429 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45427 "preproc.c" + break; + + case 1121: /* func_arg: func_type */ +#line 7433 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45435 "preproc.c" + break; + + case 1122: /* arg_class: IN_P */ +#line 7441 "preproc.y" + { + (yyval.str) = mm_strdup("in"); +} +#line 45443 "preproc.c" + break; + + case 1123: /* arg_class: OUT_P */ +#line 7445 "preproc.y" + { + (yyval.str) = mm_strdup("out"); +} +#line 45451 "preproc.c" + break; + + case 1124: /* arg_class: INOUT */ +#line 7449 "preproc.y" + { + (yyval.str) = mm_strdup("inout"); +} +#line 45459 "preproc.c" + break; + + case 1125: /* arg_class: IN_P OUT_P */ +#line 7453 "preproc.y" + { + (yyval.str) = mm_strdup("in out"); +} +#line 45467 "preproc.c" + break; + + case 1126: /* arg_class: VARIADIC */ +#line 7457 "preproc.y" + { + (yyval.str) = mm_strdup("variadic"); +} +#line 45475 "preproc.c" + break; + + case 1127: /* param_name: type_function_name */ +#line 7465 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45483 "preproc.c" + break; + + case 1128: /* func_return: func_type */ +#line 7473 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45491 "preproc.c" + break; + + case 1129: /* func_type: Typename */ +#line 7481 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45499 "preproc.c" + break; + + case 1130: /* func_type: type_function_name attrs '%' TYPE_P */ +#line 7485 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("% type")); +} +#line 45507 "preproc.c" + break; + + case 1131: /* func_type: SETOF type_function_name attrs '%' TYPE_P */ +#line 7489 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("setof"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("% type")); +} +#line 45515 "preproc.c" + break; + + case 1132: /* func_arg_with_default: func_arg */ +#line 7497 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45523 "preproc.c" + break; + + case 1133: /* func_arg_with_default: func_arg DEFAULT a_expr */ +#line 7501 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("default"),(yyvsp[0].str)); +} +#line 45531 "preproc.c" + break; + + case 1134: /* func_arg_with_default: func_arg '=' a_expr */ +#line 7505 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("="),(yyvsp[0].str)); +} +#line 45539 "preproc.c" + break; + + case 1135: /* aggr_arg: func_arg */ +#line 7513 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = (yyvsp[0].str); +} +#line 45548 "preproc.c" + break; + + case 1136: /* aggr_args: '(' '*' ')' */ +#line 7522 "preproc.y" + { + (yyval.str) = mm_strdup("( * )"); +} +#line 45556 "preproc.c" + break; + + case 1137: /* aggr_args: '(' aggr_args_list ')' */ +#line 7526 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 45564 "preproc.c" + break; + + case 1138: /* aggr_args: '(' ORDER BY aggr_args_list ')' */ +#line 7530 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("( order by"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 45572 "preproc.c" + break; + + case 1139: /* aggr_args: '(' aggr_args_list ORDER BY aggr_args_list ')' */ +#line 7534 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("("),(yyvsp[-4].str),mm_strdup("order by"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 45580 "preproc.c" + break; + + case 1140: /* aggr_args_list: aggr_arg */ +#line 7542 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45588 "preproc.c" + break; + + case 1141: /* aggr_args_list: aggr_args_list ',' aggr_arg */ +#line 7546 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 45596 "preproc.c" + break; + + case 1142: /* aggregate_with_argtypes: func_name aggr_args */ +#line 7554 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45604 "preproc.c" + break; + + case 1143: /* aggregate_with_argtypes_list: aggregate_with_argtypes */ +#line 7562 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45612 "preproc.c" + break; + + case 1144: /* aggregate_with_argtypes_list: aggregate_with_argtypes_list ',' aggregate_with_argtypes */ +#line 7566 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 45620 "preproc.c" + break; + + case 1145: /* opt_createfunc_opt_list: createfunc_opt_list */ +#line 7574 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45628 "preproc.c" + break; + + case 1146: /* opt_createfunc_opt_list: %empty */ +#line 7578 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45635 "preproc.c" + break; + + case 1147: /* createfunc_opt_list: createfunc_opt_item */ +#line 7585 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45643 "preproc.c" + break; + + case 1148: /* createfunc_opt_list: createfunc_opt_list createfunc_opt_item */ +#line 7589 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45651 "preproc.c" + break; + + case 1149: /* common_func_opt_item: CALLED ON NULL_P INPUT_P */ +#line 7597 "preproc.y" + { + (yyval.str) = mm_strdup("called on null input"); +} +#line 45659 "preproc.c" + break; + + case 1150: /* common_func_opt_item: RETURNS NULL_P ON NULL_P INPUT_P */ +#line 7601 "preproc.y" + { + (yyval.str) = mm_strdup("returns null on null input"); +} +#line 45667 "preproc.c" + break; + + case 1151: /* common_func_opt_item: STRICT_P */ +#line 7605 "preproc.y" + { + (yyval.str) = mm_strdup("strict"); +} +#line 45675 "preproc.c" + break; + + case 1152: /* common_func_opt_item: IMMUTABLE */ +#line 7609 "preproc.y" + { + (yyval.str) = mm_strdup("immutable"); +} +#line 45683 "preproc.c" + break; + + case 1153: /* common_func_opt_item: STABLE */ +#line 7613 "preproc.y" + { + (yyval.str) = mm_strdup("stable"); +} +#line 45691 "preproc.c" + break; + + case 1154: /* common_func_opt_item: VOLATILE */ +#line 7617 "preproc.y" + { + (yyval.str) = mm_strdup("volatile"); +} +#line 45699 "preproc.c" + break; + + case 1155: /* common_func_opt_item: EXTERNAL SECURITY DEFINER */ +#line 7621 "preproc.y" + { + (yyval.str) = mm_strdup("external security definer"); +} +#line 45707 "preproc.c" + break; + + case 1156: /* common_func_opt_item: EXTERNAL SECURITY INVOKER */ +#line 7625 "preproc.y" + { + (yyval.str) = mm_strdup("external security invoker"); +} +#line 45715 "preproc.c" + break; + + case 1157: /* common_func_opt_item: SECURITY DEFINER */ +#line 7629 "preproc.y" + { + (yyval.str) = mm_strdup("security definer"); +} +#line 45723 "preproc.c" + break; + + case 1158: /* common_func_opt_item: SECURITY INVOKER */ +#line 7633 "preproc.y" + { + (yyval.str) = mm_strdup("security invoker"); +} +#line 45731 "preproc.c" + break; + + case 1159: /* common_func_opt_item: LEAKPROOF */ +#line 7637 "preproc.y" + { + (yyval.str) = mm_strdup("leakproof"); +} +#line 45739 "preproc.c" + break; + + case 1160: /* common_func_opt_item: NOT LEAKPROOF */ +#line 7641 "preproc.y" + { + (yyval.str) = mm_strdup("not leakproof"); +} +#line 45747 "preproc.c" + break; + + case 1161: /* common_func_opt_item: COST NumericOnly */ +#line 7645 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("cost"),(yyvsp[0].str)); +} +#line 45755 "preproc.c" + break; + + case 1162: /* common_func_opt_item: ROWS NumericOnly */ +#line 7649 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("rows"),(yyvsp[0].str)); +} +#line 45763 "preproc.c" + break; + + case 1163: /* common_func_opt_item: SUPPORT any_name */ +#line 7653 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("support"),(yyvsp[0].str)); +} +#line 45771 "preproc.c" + break; + + case 1164: /* common_func_opt_item: FunctionSetResetClause */ +#line 7657 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45779 "preproc.c" + break; + + case 1165: /* common_func_opt_item: PARALLEL ColId */ +#line 7661 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("parallel"),(yyvsp[0].str)); +} +#line 45787 "preproc.c" + break; + + case 1166: /* createfunc_opt_item: AS func_as */ +#line 7669 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("as"),(yyvsp[0].str)); +} +#line 45795 "preproc.c" + break; + + case 1167: /* createfunc_opt_item: LANGUAGE NonReservedWord_or_Sconst */ +#line 7673 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("language"),(yyvsp[0].str)); +} +#line 45803 "preproc.c" + break; + + case 1168: /* createfunc_opt_item: TRANSFORM transform_type_list */ +#line 7677 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("transform"),(yyvsp[0].str)); +} +#line 45811 "preproc.c" + break; + + case 1169: /* createfunc_opt_item: WINDOW */ +#line 7681 "preproc.y" + { + (yyval.str) = mm_strdup("window"); +} +#line 45819 "preproc.c" + break; + + case 1170: /* createfunc_opt_item: common_func_opt_item */ +#line 7685 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45827 "preproc.c" + break; + + case 1171: /* func_as: ecpg_sconst */ +#line 7693 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45835 "preproc.c" + break; + + case 1172: /* func_as: ecpg_sconst ',' ecpg_sconst */ +#line 7697 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 45843 "preproc.c" + break; + + case 1173: /* ReturnStmt: RETURN a_expr */ +#line 7705 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("return"),(yyvsp[0].str)); +} +#line 45851 "preproc.c" + break; + + case 1174: /* opt_routine_body: ReturnStmt */ +#line 7713 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45859 "preproc.c" + break; + + case 1175: /* opt_routine_body: BEGIN_P ATOMIC routine_body_stmt_list END_P */ +#line 7717 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("begin atomic"),(yyvsp[-1].str),mm_strdup("end")); +} +#line 45867 "preproc.c" + break; + + case 1176: /* opt_routine_body: %empty */ +#line 7721 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45874 "preproc.c" + break; + + case 1177: /* routine_body_stmt_list: routine_body_stmt_list routine_body_stmt ';' */ +#line 7728 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup(";")); +} +#line 45882 "preproc.c" + break; + + case 1178: /* routine_body_stmt_list: %empty */ +#line 7732 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45889 "preproc.c" + break; + + case 1179: /* routine_body_stmt: stmt */ +#line 7739 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45897 "preproc.c" + break; + + case 1180: /* routine_body_stmt: ReturnStmt */ +#line 7743 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45905 "preproc.c" + break; + + case 1181: /* transform_type_list: FOR TYPE_P Typename */ +#line 7751 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("for type"),(yyvsp[0].str)); +} +#line 45913 "preproc.c" + break; + + case 1182: /* transform_type_list: transform_type_list ',' FOR TYPE_P Typename */ +#line 7755 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-4].str),mm_strdup(", for type"),(yyvsp[0].str)); +} +#line 45921 "preproc.c" + break; + + case 1183: /* opt_definition: WITH definition */ +#line 7763 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("with"),(yyvsp[0].str)); +} +#line 45929 "preproc.c" + break; + + case 1184: /* opt_definition: %empty */ +#line 7767 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 45936 "preproc.c" + break; + + case 1185: /* table_func_column: param_name func_type */ +#line 7774 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45944 "preproc.c" + break; + + case 1186: /* table_func_column_list: table_func_column */ +#line 7782 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45952 "preproc.c" + break; + + case 1187: /* table_func_column_list: table_func_column_list ',' table_func_column */ +#line 7786 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 45960 "preproc.c" + break; + + case 1188: /* AlterFunctionStmt: ALTER FUNCTION function_with_argtypes alterfunc_opt_list opt_restrict */ +#line 7794 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter function"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45968 "preproc.c" + break; + + case 1189: /* AlterFunctionStmt: ALTER PROCEDURE function_with_argtypes alterfunc_opt_list opt_restrict */ +#line 7798 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter procedure"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45976 "preproc.c" + break; + + case 1190: /* AlterFunctionStmt: ALTER ROUTINE function_with_argtypes alterfunc_opt_list opt_restrict */ +#line 7802 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter routine"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 45984 "preproc.c" + break; + + case 1191: /* alterfunc_opt_list: common_func_opt_item */ +#line 7810 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 45992 "preproc.c" + break; + + case 1192: /* alterfunc_opt_list: alterfunc_opt_list common_func_opt_item */ +#line 7814 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46000 "preproc.c" + break; + + case 1193: /* opt_restrict: RESTRICT */ +#line 7822 "preproc.y" + { + (yyval.str) = mm_strdup("restrict"); +} +#line 46008 "preproc.c" + break; + + case 1194: /* opt_restrict: %empty */ +#line 7826 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 46015 "preproc.c" + break; + + case 1195: /* RemoveFuncStmt: DROP FUNCTION function_with_argtypes_list opt_drop_behavior */ +#line 7833 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop function"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46023 "preproc.c" + break; + + case 1196: /* RemoveFuncStmt: DROP FUNCTION IF_P EXISTS function_with_argtypes_list opt_drop_behavior */ +#line 7837 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop function if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46031 "preproc.c" + break; + + case 1197: /* RemoveFuncStmt: DROP PROCEDURE function_with_argtypes_list opt_drop_behavior */ +#line 7841 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop procedure"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46039 "preproc.c" + break; + + case 1198: /* RemoveFuncStmt: DROP PROCEDURE IF_P EXISTS function_with_argtypes_list opt_drop_behavior */ +#line 7845 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop procedure if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46047 "preproc.c" + break; + + case 1199: /* RemoveFuncStmt: DROP ROUTINE function_with_argtypes_list opt_drop_behavior */ +#line 7849 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop routine"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46055 "preproc.c" + break; + + case 1200: /* RemoveFuncStmt: DROP ROUTINE IF_P EXISTS function_with_argtypes_list opt_drop_behavior */ +#line 7853 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop routine if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46063 "preproc.c" + break; + + case 1201: /* RemoveAggrStmt: DROP AGGREGATE aggregate_with_argtypes_list opt_drop_behavior */ +#line 7861 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop aggregate"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46071 "preproc.c" + break; + + case 1202: /* RemoveAggrStmt: DROP AGGREGATE IF_P EXISTS aggregate_with_argtypes_list opt_drop_behavior */ +#line 7865 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop aggregate if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46079 "preproc.c" + break; + + case 1203: /* RemoveOperStmt: DROP OPERATOR operator_with_argtypes_list opt_drop_behavior */ +#line 7873 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop operator"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46087 "preproc.c" + break; + + case 1204: /* RemoveOperStmt: DROP OPERATOR IF_P EXISTS operator_with_argtypes_list opt_drop_behavior */ +#line 7877 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop operator if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46095 "preproc.c" + break; + + case 1205: /* oper_argtypes: '(' Typename ')' */ +#line 7885 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 46103 "preproc.c" + break; + + case 1206: /* oper_argtypes: '(' Typename ',' Typename ')' */ +#line 7889 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("("),(yyvsp[-3].str),mm_strdup(","),(yyvsp[-1].str),mm_strdup(")")); +} +#line 46111 "preproc.c" + break; + + case 1207: /* oper_argtypes: '(' NONE ',' Typename ')' */ +#line 7893 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("( none ,"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 46119 "preproc.c" + break; + + case 1208: /* oper_argtypes: '(' Typename ',' NONE ')' */ +#line 7897 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-3].str),mm_strdup(", none )")); +} +#line 46127 "preproc.c" + break; + + case 1209: /* any_operator: all_Op */ +#line 7905 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 46135 "preproc.c" + break; + + case 1210: /* any_operator: ColId '.' any_operator */ +#line 7909 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("."),(yyvsp[0].str)); +} +#line 46143 "preproc.c" + break; + + case 1211: /* operator_with_argtypes_list: operator_with_argtypes */ +#line 7917 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 46151 "preproc.c" + break; + + case 1212: /* operator_with_argtypes_list: operator_with_argtypes_list ',' operator_with_argtypes */ +#line 7921 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 46159 "preproc.c" + break; + + case 1213: /* operator_with_argtypes: any_operator oper_argtypes */ +#line 7929 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46167 "preproc.c" + break; + + case 1214: /* DoStmt: DO dostmt_opt_list */ +#line 7937 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("do"),(yyvsp[0].str)); +} +#line 46175 "preproc.c" + break; + + case 1215: /* dostmt_opt_list: dostmt_opt_item */ +#line 7945 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 46183 "preproc.c" + break; + + case 1216: /* dostmt_opt_list: dostmt_opt_list dostmt_opt_item */ +#line 7949 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46191 "preproc.c" + break; + + case 1217: /* dostmt_opt_item: ecpg_sconst */ +#line 7957 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 46199 "preproc.c" + break; + + case 1218: /* dostmt_opt_item: LANGUAGE NonReservedWord_or_Sconst */ +#line 7961 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("language"),(yyvsp[0].str)); +} +#line 46207 "preproc.c" + break; + + case 1219: /* CreateCastStmt: CREATE CAST '(' Typename AS Typename ')' WITH FUNCTION function_with_argtypes cast_context */ +#line 7969 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("create cast ("),(yyvsp[-7].str),mm_strdup("as"),(yyvsp[-5].str),mm_strdup(") with function"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46215 "preproc.c" + break; + + case 1220: /* CreateCastStmt: CREATE CAST '(' Typename AS Typename ')' WITHOUT FUNCTION cast_context */ +#line 7973 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("create cast ("),(yyvsp[-6].str),mm_strdup("as"),(yyvsp[-4].str),mm_strdup(") without function"),(yyvsp[0].str)); +} +#line 46223 "preproc.c" + break; + + case 1221: /* CreateCastStmt: CREATE CAST '(' Typename AS Typename ')' WITH INOUT cast_context */ +#line 7977 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("create cast ("),(yyvsp[-6].str),mm_strdup("as"),(yyvsp[-4].str),mm_strdup(") with inout"),(yyvsp[0].str)); +} +#line 46231 "preproc.c" + break; + + case 1222: /* cast_context: AS IMPLICIT_P */ +#line 7985 "preproc.y" + { + (yyval.str) = mm_strdup("as implicit"); +} +#line 46239 "preproc.c" + break; + + case 1223: /* cast_context: AS ASSIGNMENT */ +#line 7989 "preproc.y" + { + (yyval.str) = mm_strdup("as assignment"); +} +#line 46247 "preproc.c" + break; + + case 1224: /* cast_context: %empty */ +#line 7993 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 46254 "preproc.c" + break; + + case 1225: /* DropCastStmt: DROP CAST opt_if_exists '(' Typename AS Typename ')' opt_drop_behavior */ +#line 8000 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("drop cast"),(yyvsp[-6].str),mm_strdup("("),(yyvsp[-4].str),mm_strdup("as"),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 46262 "preproc.c" + break; + + case 1226: /* opt_if_exists: IF_P EXISTS */ +#line 8008 "preproc.y" + { + (yyval.str) = mm_strdup("if exists"); +} +#line 46270 "preproc.c" + break; + + case 1227: /* opt_if_exists: %empty */ +#line 8012 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 46277 "preproc.c" + break; + + case 1228: /* CreateTransformStmt: CREATE opt_or_replace TRANSFORM FOR Typename LANGUAGE name '(' transform_element_list ')' */ +#line 8019 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("create"),(yyvsp[-8].str),mm_strdup("transform for"),(yyvsp[-5].str),mm_strdup("language"),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 46285 "preproc.c" + break; + + case 1229: /* transform_element_list: FROM SQL_P WITH FUNCTION function_with_argtypes ',' TO SQL_P WITH FUNCTION function_with_argtypes */ +#line 8027 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("from sql with function"),(yyvsp[-6].str),mm_strdup(", to sql with function"),(yyvsp[0].str)); +} +#line 46293 "preproc.c" + break; + + case 1230: /* transform_element_list: TO SQL_P WITH FUNCTION function_with_argtypes ',' FROM SQL_P WITH FUNCTION function_with_argtypes */ +#line 8031 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("to sql with function"),(yyvsp[-6].str),mm_strdup(", from sql with function"),(yyvsp[0].str)); +} +#line 46301 "preproc.c" + break; + + case 1231: /* transform_element_list: FROM SQL_P WITH FUNCTION function_with_argtypes */ +#line 8035 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("from sql with function"),(yyvsp[0].str)); +} +#line 46309 "preproc.c" + break; + + case 1232: /* transform_element_list: TO SQL_P WITH FUNCTION function_with_argtypes */ +#line 8039 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("to sql with function"),(yyvsp[0].str)); +} +#line 46317 "preproc.c" + break; + + case 1233: /* DropTransformStmt: DROP TRANSFORM opt_if_exists FOR Typename LANGUAGE name opt_drop_behavior */ +#line 8047 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("drop transform"),(yyvsp[-5].str),mm_strdup("for"),(yyvsp[-3].str),mm_strdup("language"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46325 "preproc.c" + break; + + case 1234: /* ReindexStmt: REINDEX reindex_target_type opt_concurrently qualified_name */ +#line 8055 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("reindex"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46333 "preproc.c" + break; + + case 1235: /* ReindexStmt: REINDEX reindex_target_multitable opt_concurrently name */ +#line 8059 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("reindex"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46341 "preproc.c" + break; + + case 1236: /* ReindexStmt: REINDEX '(' utility_option_list ')' reindex_target_type opt_concurrently qualified_name */ +#line 8063 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("reindex ("),(yyvsp[-4].str),mm_strdup(")"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46349 "preproc.c" + break; + + case 1237: /* ReindexStmt: REINDEX '(' utility_option_list ')' reindex_target_multitable opt_concurrently name */ +#line 8067 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("reindex ("),(yyvsp[-4].str),mm_strdup(")"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46357 "preproc.c" + break; + + case 1238: /* reindex_target_type: INDEX */ +#line 8075 "preproc.y" + { + (yyval.str) = mm_strdup("index"); +} +#line 46365 "preproc.c" + break; + + case 1239: /* reindex_target_type: TABLE */ +#line 8079 "preproc.y" + { + (yyval.str) = mm_strdup("table"); +} +#line 46373 "preproc.c" + break; + + case 1240: /* reindex_target_multitable: SCHEMA */ +#line 8087 "preproc.y" + { + (yyval.str) = mm_strdup("schema"); +} +#line 46381 "preproc.c" + break; + + case 1241: /* reindex_target_multitable: SYSTEM_P */ +#line 8091 "preproc.y" + { + (yyval.str) = mm_strdup("system"); +} +#line 46389 "preproc.c" + break; + + case 1242: /* reindex_target_multitable: DATABASE */ +#line 8095 "preproc.y" + { + (yyval.str) = mm_strdup("database"); +} +#line 46397 "preproc.c" + break; + + case 1243: /* AlterTblSpcStmt: ALTER TABLESPACE name SET reloptions */ +#line 8103 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter tablespace"),(yyvsp[-2].str),mm_strdup("set"),(yyvsp[0].str)); +} +#line 46405 "preproc.c" + break; + + case 1244: /* AlterTblSpcStmt: ALTER TABLESPACE name RESET reloptions */ +#line 8107 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter tablespace"),(yyvsp[-2].str),mm_strdup("reset"),(yyvsp[0].str)); +} +#line 46413 "preproc.c" + break; + + case 1245: /* RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name */ +#line 8115 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter aggregate"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46421 "preproc.c" + break; + + case 1246: /* RenameStmt: ALTER COLLATION any_name RENAME TO name */ +#line 8119 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter collation"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46429 "preproc.c" + break; + + case 1247: /* RenameStmt: ALTER CONVERSION_P any_name RENAME TO name */ +#line 8123 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter conversion"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46437 "preproc.c" + break; + + case 1248: /* RenameStmt: ALTER DATABASE name RENAME TO name */ +#line 8127 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter database"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46445 "preproc.c" + break; + + case 1249: /* RenameStmt: ALTER DOMAIN_P any_name RENAME TO name */ +#line 8131 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter domain"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46453 "preproc.c" + break; + + case 1250: /* RenameStmt: ALTER DOMAIN_P any_name RENAME CONSTRAINT name TO name */ +#line 8135 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter domain"),(yyvsp[-5].str),mm_strdup("rename constraint"),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46461 "preproc.c" + break; + + case 1251: /* RenameStmt: ALTER FOREIGN DATA_P WRAPPER name RENAME TO name */ +#line 8139 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter foreign data wrapper"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46469 "preproc.c" + break; + + case 1252: /* RenameStmt: ALTER FUNCTION function_with_argtypes RENAME TO name */ +#line 8143 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter function"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46477 "preproc.c" + break; + + case 1253: /* RenameStmt: ALTER GROUP_P RoleId RENAME TO RoleId */ +#line 8147 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter group"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46485 "preproc.c" + break; + + case 1254: /* RenameStmt: ALTER opt_procedural LANGUAGE name RENAME TO name */ +#line 8151 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter"),(yyvsp[-5].str),mm_strdup("language"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46493 "preproc.c" + break; + + case 1255: /* RenameStmt: ALTER OPERATOR CLASS any_name USING name RENAME TO name */ +#line 8155 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter operator class"),(yyvsp[-5].str),mm_strdup("using"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46501 "preproc.c" + break; + + case 1256: /* RenameStmt: ALTER OPERATOR FAMILY any_name USING name RENAME TO name */ +#line 8159 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter operator family"),(yyvsp[-5].str),mm_strdup("using"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46509 "preproc.c" + break; + + case 1257: /* RenameStmt: ALTER POLICY name ON qualified_name RENAME TO name */ +#line 8163 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter policy"),(yyvsp[-5].str),mm_strdup("on"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46517 "preproc.c" + break; + + case 1258: /* RenameStmt: ALTER POLICY IF_P EXISTS name ON qualified_name RENAME TO name */ +#line 8167 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter policy if exists"),(yyvsp[-5].str),mm_strdup("on"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46525 "preproc.c" + break; + + case 1259: /* RenameStmt: ALTER PROCEDURE function_with_argtypes RENAME TO name */ +#line 8171 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter procedure"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46533 "preproc.c" + break; + + case 1260: /* RenameStmt: ALTER PUBLICATION name RENAME TO name */ +#line 8175 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter publication"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46541 "preproc.c" + break; + + case 1261: /* RenameStmt: ALTER ROUTINE function_with_argtypes RENAME TO name */ +#line 8179 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter routine"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46549 "preproc.c" + break; + + case 1262: /* RenameStmt: ALTER SCHEMA name RENAME TO name */ +#line 8183 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter schema"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46557 "preproc.c" + break; + + case 1263: /* RenameStmt: ALTER SERVER name RENAME TO name */ +#line 8187 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter server"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46565 "preproc.c" + break; + + case 1264: /* RenameStmt: ALTER SUBSCRIPTION name RENAME TO name */ +#line 8191 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter subscription"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46573 "preproc.c" + break; + + case 1265: /* RenameStmt: ALTER TABLE relation_expr RENAME TO name */ +#line 8195 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter table"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46581 "preproc.c" + break; + + case 1266: /* RenameStmt: ALTER TABLE IF_P EXISTS relation_expr RENAME TO name */ +#line 8199 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter table if exists"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46589 "preproc.c" + break; + + case 1267: /* RenameStmt: ALTER SEQUENCE qualified_name RENAME TO name */ +#line 8203 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter sequence"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46597 "preproc.c" + break; + + case 1268: /* RenameStmt: ALTER SEQUENCE IF_P EXISTS qualified_name RENAME TO name */ +#line 8207 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter sequence if exists"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46605 "preproc.c" + break; + + case 1269: /* RenameStmt: ALTER VIEW qualified_name RENAME TO name */ +#line 8211 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter view"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46613 "preproc.c" + break; + + case 1270: /* RenameStmt: ALTER VIEW IF_P EXISTS qualified_name RENAME TO name */ +#line 8215 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter view if exists"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46621 "preproc.c" + break; + + case 1271: /* RenameStmt: ALTER MATERIALIZED VIEW qualified_name RENAME TO name */ +#line 8219 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter materialized view"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46629 "preproc.c" + break; + + case 1272: /* RenameStmt: ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name RENAME TO name */ +#line 8223 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter materialized view if exists"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46637 "preproc.c" + break; + + case 1273: /* RenameStmt: ALTER INDEX qualified_name RENAME TO name */ +#line 8227 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter index"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46645 "preproc.c" + break; + + case 1274: /* RenameStmt: ALTER INDEX IF_P EXISTS qualified_name RENAME TO name */ +#line 8231 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter index if exists"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46653 "preproc.c" + break; + + case 1275: /* RenameStmt: ALTER FOREIGN TABLE relation_expr RENAME TO name */ +#line 8235 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter foreign table"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46661 "preproc.c" + break; + + case 1276: /* RenameStmt: ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME TO name */ +#line 8239 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter foreign table if exists"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46669 "preproc.c" + break; + + case 1277: /* RenameStmt: ALTER TABLE relation_expr RENAME opt_column name TO name */ +#line 8243 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter table"),(yyvsp[-5].str),mm_strdup("rename"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46677 "preproc.c" + break; + + case 1278: /* RenameStmt: ALTER TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name */ +#line 8247 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter table if exists"),(yyvsp[-5].str),mm_strdup("rename"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46685 "preproc.c" + break; + + case 1279: /* RenameStmt: ALTER VIEW qualified_name RENAME opt_column name TO name */ +#line 8251 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter view"),(yyvsp[-5].str),mm_strdup("rename"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46693 "preproc.c" + break; + + case 1280: /* RenameStmt: ALTER VIEW IF_P EXISTS qualified_name RENAME opt_column name TO name */ +#line 8255 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter view if exists"),(yyvsp[-5].str),mm_strdup("rename"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46701 "preproc.c" + break; + + case 1281: /* RenameStmt: ALTER MATERIALIZED VIEW qualified_name RENAME opt_column name TO name */ +#line 8259 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter materialized view"),(yyvsp[-5].str),mm_strdup("rename"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46709 "preproc.c" + break; + + case 1282: /* RenameStmt: ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name RENAME opt_column name TO name */ +#line 8263 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter materialized view if exists"),(yyvsp[-5].str),mm_strdup("rename"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46717 "preproc.c" + break; + + case 1283: /* RenameStmt: ALTER TABLE relation_expr RENAME CONSTRAINT name TO name */ +#line 8267 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter table"),(yyvsp[-5].str),mm_strdup("rename constraint"),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46725 "preproc.c" + break; + + case 1284: /* RenameStmt: ALTER TABLE IF_P EXISTS relation_expr RENAME CONSTRAINT name TO name */ +#line 8271 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter table if exists"),(yyvsp[-5].str),mm_strdup("rename constraint"),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46733 "preproc.c" + break; + + case 1285: /* RenameStmt: ALTER FOREIGN TABLE relation_expr RENAME opt_column name TO name */ +#line 8275 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter foreign table"),(yyvsp[-5].str),mm_strdup("rename"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46741 "preproc.c" + break; + + case 1286: /* RenameStmt: ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name */ +#line 8279 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter foreign table if exists"),(yyvsp[-5].str),mm_strdup("rename"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 46749 "preproc.c" + break; + + case 1287: /* RenameStmt: ALTER RULE name ON qualified_name RENAME TO name */ +#line 8283 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter rule"),(yyvsp[-5].str),mm_strdup("on"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46757 "preproc.c" + break; + + case 1288: /* RenameStmt: ALTER TRIGGER name ON qualified_name RENAME TO name */ +#line 8287 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter trigger"),(yyvsp[-5].str),mm_strdup("on"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46765 "preproc.c" + break; + + case 1289: /* RenameStmt: ALTER EVENT TRIGGER name RENAME TO name */ +#line 8291 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter event trigger"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46773 "preproc.c" + break; + + case 1290: /* RenameStmt: ALTER ROLE RoleId RENAME TO RoleId */ +#line 8295 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter role"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46781 "preproc.c" + break; + + case 1291: /* RenameStmt: ALTER USER RoleId RENAME TO RoleId */ +#line 8299 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter user"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46789 "preproc.c" + break; + + case 1292: /* RenameStmt: ALTER TABLESPACE name RENAME TO name */ +#line 8303 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter tablespace"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46797 "preproc.c" + break; + + case 1293: /* RenameStmt: ALTER STATISTICS any_name RENAME TO name */ +#line 8307 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter statistics"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46805 "preproc.c" + break; + + case 1294: /* RenameStmt: ALTER TEXT_P SEARCH PARSER any_name RENAME TO name */ +#line 8311 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search parser"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46813 "preproc.c" + break; + + case 1295: /* RenameStmt: ALTER TEXT_P SEARCH DICTIONARY any_name RENAME TO name */ +#line 8315 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search dictionary"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46821 "preproc.c" + break; + + case 1296: /* RenameStmt: ALTER TEXT_P SEARCH TEMPLATE any_name RENAME TO name */ +#line 8319 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search template"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46829 "preproc.c" + break; + + case 1297: /* RenameStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name RENAME TO name */ +#line 8323 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search configuration"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46837 "preproc.c" + break; + + case 1298: /* RenameStmt: ALTER TYPE_P any_name RENAME TO name */ +#line 8327 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter type"),(yyvsp[-3].str),mm_strdup("rename to"),(yyvsp[0].str)); +} +#line 46845 "preproc.c" + break; + + case 1299: /* RenameStmt: ALTER TYPE_P any_name RENAME ATTRIBUTE name TO name opt_drop_behavior */ +#line 8331 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter type"),(yyvsp[-6].str),mm_strdup("rename attribute"),(yyvsp[-3].str),mm_strdup("to"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 46853 "preproc.c" + break; + + case 1300: /* opt_column: COLUMN */ +#line 8339 "preproc.y" + { + (yyval.str) = mm_strdup("column"); +} +#line 46861 "preproc.c" + break; + + case 1301: /* opt_column: %empty */ +#line 8343 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 46868 "preproc.c" + break; + + case 1302: /* opt_set_data: SET DATA_P */ +#line 8350 "preproc.y" + { + (yyval.str) = mm_strdup("set data"); +} +#line 46876 "preproc.c" + break; + + case 1303: /* opt_set_data: %empty */ +#line 8354 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 46883 "preproc.c" + break; + + case 1304: /* AlterObjectDependsStmt: ALTER FUNCTION function_with_argtypes opt_no DEPENDS ON EXTENSION name */ +#line 8361 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter function"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("depends on extension"),(yyvsp[0].str)); +} +#line 46891 "preproc.c" + break; + + case 1305: /* AlterObjectDependsStmt: ALTER PROCEDURE function_with_argtypes opt_no DEPENDS ON EXTENSION name */ +#line 8365 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter procedure"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("depends on extension"),(yyvsp[0].str)); +} +#line 46899 "preproc.c" + break; + + case 1306: /* AlterObjectDependsStmt: ALTER ROUTINE function_with_argtypes opt_no DEPENDS ON EXTENSION name */ +#line 8369 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter routine"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("depends on extension"),(yyvsp[0].str)); +} +#line 46907 "preproc.c" + break; + + case 1307: /* AlterObjectDependsStmt: ALTER TRIGGER name ON qualified_name opt_no DEPENDS ON EXTENSION name */ +#line 8373 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("alter trigger"),(yyvsp[-7].str),mm_strdup("on"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("depends on extension"),(yyvsp[0].str)); +} +#line 46915 "preproc.c" + break; + + case 1308: /* AlterObjectDependsStmt: ALTER MATERIALIZED VIEW qualified_name opt_no DEPENDS ON EXTENSION name */ +#line 8377 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter materialized view"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("depends on extension"),(yyvsp[0].str)); +} +#line 46923 "preproc.c" + break; + + case 1309: /* AlterObjectDependsStmt: ALTER INDEX qualified_name opt_no DEPENDS ON EXTENSION name */ +#line 8381 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter index"),(yyvsp[-5].str),(yyvsp[-4].str),mm_strdup("depends on extension"),(yyvsp[0].str)); +} +#line 46931 "preproc.c" + break; + + case 1310: /* opt_no: NO */ +#line 8389 "preproc.y" + { + (yyval.str) = mm_strdup("no"); +} +#line 46939 "preproc.c" + break; + + case 1311: /* opt_no: %empty */ +#line 8393 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 46946 "preproc.c" + break; + + case 1312: /* AlterObjectSchemaStmt: ALTER AGGREGATE aggregate_with_argtypes SET SCHEMA name */ +#line 8400 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter aggregate"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 46954 "preproc.c" + break; + + case 1313: /* AlterObjectSchemaStmt: ALTER COLLATION any_name SET SCHEMA name */ +#line 8404 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter collation"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 46962 "preproc.c" + break; + + case 1314: /* AlterObjectSchemaStmt: ALTER CONVERSION_P any_name SET SCHEMA name */ +#line 8408 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter conversion"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 46970 "preproc.c" + break; + + case 1315: /* AlterObjectSchemaStmt: ALTER DOMAIN_P any_name SET SCHEMA name */ +#line 8412 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter domain"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 46978 "preproc.c" + break; + + case 1316: /* AlterObjectSchemaStmt: ALTER EXTENSION name SET SCHEMA name */ +#line 8416 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter extension"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 46986 "preproc.c" + break; + + case 1317: /* AlterObjectSchemaStmt: ALTER FUNCTION function_with_argtypes SET SCHEMA name */ +#line 8420 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter function"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 46994 "preproc.c" + break; + + case 1318: /* AlterObjectSchemaStmt: ALTER OPERATOR operator_with_argtypes SET SCHEMA name */ +#line 8424 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter operator"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47002 "preproc.c" + break; + + case 1319: /* AlterObjectSchemaStmt: ALTER OPERATOR CLASS any_name USING name SET SCHEMA name */ +#line 8428 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter operator class"),(yyvsp[-5].str),mm_strdup("using"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47010 "preproc.c" + break; + + case 1320: /* AlterObjectSchemaStmt: ALTER OPERATOR FAMILY any_name USING name SET SCHEMA name */ +#line 8432 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter operator family"),(yyvsp[-5].str),mm_strdup("using"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47018 "preproc.c" + break; + + case 1321: /* AlterObjectSchemaStmt: ALTER PROCEDURE function_with_argtypes SET SCHEMA name */ +#line 8436 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter procedure"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47026 "preproc.c" + break; + + case 1322: /* AlterObjectSchemaStmt: ALTER ROUTINE function_with_argtypes SET SCHEMA name */ +#line 8440 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter routine"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47034 "preproc.c" + break; + + case 1323: /* AlterObjectSchemaStmt: ALTER TABLE relation_expr SET SCHEMA name */ +#line 8444 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter table"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47042 "preproc.c" + break; + + case 1324: /* AlterObjectSchemaStmt: ALTER TABLE IF_P EXISTS relation_expr SET SCHEMA name */ +#line 8448 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter table if exists"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47050 "preproc.c" + break; + + case 1325: /* AlterObjectSchemaStmt: ALTER STATISTICS any_name SET SCHEMA name */ +#line 8452 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter statistics"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47058 "preproc.c" + break; + + case 1326: /* AlterObjectSchemaStmt: ALTER TEXT_P SEARCH PARSER any_name SET SCHEMA name */ +#line 8456 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search parser"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47066 "preproc.c" + break; + + case 1327: /* AlterObjectSchemaStmt: ALTER TEXT_P SEARCH DICTIONARY any_name SET SCHEMA name */ +#line 8460 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search dictionary"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47074 "preproc.c" + break; + + case 1328: /* AlterObjectSchemaStmt: ALTER TEXT_P SEARCH TEMPLATE any_name SET SCHEMA name */ +#line 8464 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search template"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47082 "preproc.c" + break; + + case 1329: /* AlterObjectSchemaStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name SET SCHEMA name */ +#line 8468 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search configuration"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47090 "preproc.c" + break; + + case 1330: /* AlterObjectSchemaStmt: ALTER SEQUENCE qualified_name SET SCHEMA name */ +#line 8472 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter sequence"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47098 "preproc.c" + break; + + case 1331: /* AlterObjectSchemaStmt: ALTER SEQUENCE IF_P EXISTS qualified_name SET SCHEMA name */ +#line 8476 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter sequence if exists"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47106 "preproc.c" + break; + + case 1332: /* AlterObjectSchemaStmt: ALTER VIEW qualified_name SET SCHEMA name */ +#line 8480 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter view"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47114 "preproc.c" + break; + + case 1333: /* AlterObjectSchemaStmt: ALTER VIEW IF_P EXISTS qualified_name SET SCHEMA name */ +#line 8484 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter view if exists"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47122 "preproc.c" + break; + + case 1334: /* AlterObjectSchemaStmt: ALTER MATERIALIZED VIEW qualified_name SET SCHEMA name */ +#line 8488 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter materialized view"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47130 "preproc.c" + break; + + case 1335: /* AlterObjectSchemaStmt: ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name SET SCHEMA name */ +#line 8492 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter materialized view if exists"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47138 "preproc.c" + break; + + case 1336: /* AlterObjectSchemaStmt: ALTER FOREIGN TABLE relation_expr SET SCHEMA name */ +#line 8496 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter foreign table"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47146 "preproc.c" + break; + + case 1337: /* AlterObjectSchemaStmt: ALTER FOREIGN TABLE IF_P EXISTS relation_expr SET SCHEMA name */ +#line 8500 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter foreign table if exists"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47154 "preproc.c" + break; + + case 1338: /* AlterObjectSchemaStmt: ALTER TYPE_P any_name SET SCHEMA name */ +#line 8504 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter type"),(yyvsp[-3].str),mm_strdup("set schema"),(yyvsp[0].str)); +} +#line 47162 "preproc.c" + break; + + case 1339: /* AlterOperatorStmt: ALTER OPERATOR operator_with_argtypes SET '(' operator_def_list ')' */ +#line 8512 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter operator"),(yyvsp[-4].str),mm_strdup("set ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 47170 "preproc.c" + break; + + case 1340: /* operator_def_list: operator_def_elem */ +#line 8520 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47178 "preproc.c" + break; + + case 1341: /* operator_def_list: operator_def_list ',' operator_def_elem */ +#line 8524 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 47186 "preproc.c" + break; + + case 1342: /* operator_def_elem: ColLabel '=' NONE */ +#line 8532 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("= none")); +} +#line 47194 "preproc.c" + break; + + case 1343: /* operator_def_elem: ColLabel '=' operator_def_arg */ +#line 8536 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("="),(yyvsp[0].str)); +} +#line 47202 "preproc.c" + break; + + case 1344: /* operator_def_arg: func_type */ +#line 8544 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47210 "preproc.c" + break; + + case 1345: /* operator_def_arg: reserved_keyword */ +#line 8548 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47218 "preproc.c" + break; + + case 1346: /* operator_def_arg: qual_all_Op */ +#line 8552 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47226 "preproc.c" + break; + + case 1347: /* operator_def_arg: NumericOnly */ +#line 8556 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47234 "preproc.c" + break; + + case 1348: /* operator_def_arg: ecpg_sconst */ +#line 8560 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47242 "preproc.c" + break; + + case 1349: /* AlterTypeStmt: ALTER TYPE_P any_name SET '(' operator_def_list ')' */ +#line 8568 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter type"),(yyvsp[-4].str),mm_strdup("set ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 47250 "preproc.c" + break; + + case 1350: /* AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec */ +#line 8576 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter aggregate"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47258 "preproc.c" + break; + + case 1351: /* AlterOwnerStmt: ALTER COLLATION any_name OWNER TO RoleSpec */ +#line 8580 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter collation"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47266 "preproc.c" + break; + + case 1352: /* AlterOwnerStmt: ALTER CONVERSION_P any_name OWNER TO RoleSpec */ +#line 8584 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter conversion"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47274 "preproc.c" + break; + + case 1353: /* AlterOwnerStmt: ALTER DATABASE name OWNER TO RoleSpec */ +#line 8588 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter database"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47282 "preproc.c" + break; + + case 1354: /* AlterOwnerStmt: ALTER DOMAIN_P any_name OWNER TO RoleSpec */ +#line 8592 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter domain"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47290 "preproc.c" + break; + + case 1355: /* AlterOwnerStmt: ALTER FUNCTION function_with_argtypes OWNER TO RoleSpec */ +#line 8596 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter function"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47298 "preproc.c" + break; + + case 1356: /* AlterOwnerStmt: ALTER opt_procedural LANGUAGE name OWNER TO RoleSpec */ +#line 8600 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter"),(yyvsp[-5].str),mm_strdup("language"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47306 "preproc.c" + break; + + case 1357: /* AlterOwnerStmt: ALTER LARGE_P OBJECT_P NumericOnly OWNER TO RoleSpec */ +#line 8604 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter large object"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47314 "preproc.c" + break; + + case 1358: /* AlterOwnerStmt: ALTER OPERATOR operator_with_argtypes OWNER TO RoleSpec */ +#line 8608 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter operator"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47322 "preproc.c" + break; + + case 1359: /* AlterOwnerStmt: ALTER OPERATOR CLASS any_name USING name OWNER TO RoleSpec */ +#line 8612 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter operator class"),(yyvsp[-5].str),mm_strdup("using"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47330 "preproc.c" + break; + + case 1360: /* AlterOwnerStmt: ALTER OPERATOR FAMILY any_name USING name OWNER TO RoleSpec */ +#line 8616 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter operator family"),(yyvsp[-5].str),mm_strdup("using"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47338 "preproc.c" + break; + + case 1361: /* AlterOwnerStmt: ALTER PROCEDURE function_with_argtypes OWNER TO RoleSpec */ +#line 8620 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter procedure"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47346 "preproc.c" + break; + + case 1362: /* AlterOwnerStmt: ALTER ROUTINE function_with_argtypes OWNER TO RoleSpec */ +#line 8624 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter routine"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47354 "preproc.c" + break; + + case 1363: /* AlterOwnerStmt: ALTER SCHEMA name OWNER TO RoleSpec */ +#line 8628 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter schema"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47362 "preproc.c" + break; + + case 1364: /* AlterOwnerStmt: ALTER TYPE_P any_name OWNER TO RoleSpec */ +#line 8632 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter type"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47370 "preproc.c" + break; + + case 1365: /* AlterOwnerStmt: ALTER TABLESPACE name OWNER TO RoleSpec */ +#line 8636 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter tablespace"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47378 "preproc.c" + break; + + case 1366: /* AlterOwnerStmt: ALTER STATISTICS any_name OWNER TO RoleSpec */ +#line 8640 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter statistics"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47386 "preproc.c" + break; + + case 1367: /* AlterOwnerStmt: ALTER TEXT_P SEARCH DICTIONARY any_name OWNER TO RoleSpec */ +#line 8644 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search dictionary"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47394 "preproc.c" + break; + + case 1368: /* AlterOwnerStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name OWNER TO RoleSpec */ +#line 8648 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search configuration"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47402 "preproc.c" + break; + + case 1369: /* AlterOwnerStmt: ALTER FOREIGN DATA_P WRAPPER name OWNER TO RoleSpec */ +#line 8652 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter foreign data wrapper"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47410 "preproc.c" + break; + + case 1370: /* AlterOwnerStmt: ALTER SERVER name OWNER TO RoleSpec */ +#line 8656 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter server"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47418 "preproc.c" + break; + + case 1371: /* AlterOwnerStmt: ALTER EVENT TRIGGER name OWNER TO RoleSpec */ +#line 8660 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter event trigger"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47426 "preproc.c" + break; + + case 1372: /* AlterOwnerStmt: ALTER PUBLICATION name OWNER TO RoleSpec */ +#line 8664 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter publication"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47434 "preproc.c" + break; + + case 1373: /* AlterOwnerStmt: ALTER SUBSCRIPTION name OWNER TO RoleSpec */ +#line 8668 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter subscription"),(yyvsp[-3].str),mm_strdup("owner to"),(yyvsp[0].str)); +} +#line 47442 "preproc.c" + break; + + case 1374: /* CreatePublicationStmt: CREATE PUBLICATION name opt_publication_for_tables opt_definition */ +#line 8676 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create publication"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47450 "preproc.c" + break; + + case 1375: /* opt_publication_for_tables: publication_for_tables */ +#line 8684 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47458 "preproc.c" + break; + + case 1376: /* opt_publication_for_tables: %empty */ +#line 8688 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 47465 "preproc.c" + break; + + case 1377: /* publication_for_tables: FOR TABLE relation_expr_list */ +#line 8695 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("for table"),(yyvsp[0].str)); +} +#line 47473 "preproc.c" + break; + + case 1378: /* publication_for_tables: FOR ALL TABLES */ +#line 8699 "preproc.y" + { + (yyval.str) = mm_strdup("for all tables"); +} +#line 47481 "preproc.c" + break; + + case 1379: /* AlterPublicationStmt: ALTER PUBLICATION name SET definition */ +#line 8707 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter publication"),(yyvsp[-2].str),mm_strdup("set"),(yyvsp[0].str)); +} +#line 47489 "preproc.c" + break; + + case 1380: /* AlterPublicationStmt: ALTER PUBLICATION name ADD_P TABLE relation_expr_list */ +#line 8711 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter publication"),(yyvsp[-3].str),mm_strdup("add table"),(yyvsp[0].str)); +} +#line 47497 "preproc.c" + break; + + case 1381: /* AlterPublicationStmt: ALTER PUBLICATION name SET TABLE relation_expr_list */ +#line 8715 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter publication"),(yyvsp[-3].str),mm_strdup("set table"),(yyvsp[0].str)); +} +#line 47505 "preproc.c" + break; + + case 1382: /* AlterPublicationStmt: ALTER PUBLICATION name DROP TABLE relation_expr_list */ +#line 8719 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter publication"),(yyvsp[-3].str),mm_strdup("drop table"),(yyvsp[0].str)); +} +#line 47513 "preproc.c" + break; + + case 1383: /* CreateSubscriptionStmt: CREATE SUBSCRIPTION name CONNECTION ecpg_sconst PUBLICATION name_list opt_definition */ +#line 8727 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("create subscription"),(yyvsp[-5].str),mm_strdup("connection"),(yyvsp[-3].str),mm_strdup("publication"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47521 "preproc.c" + break; + + case 1384: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name SET definition */ +#line 8735 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter subscription"),(yyvsp[-2].str),mm_strdup("set"),(yyvsp[0].str)); +} +#line 47529 "preproc.c" + break; + + case 1385: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name CONNECTION ecpg_sconst */ +#line 8739 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter subscription"),(yyvsp[-2].str),mm_strdup("connection"),(yyvsp[0].str)); +} +#line 47537 "preproc.c" + break; + + case 1386: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name REFRESH PUBLICATION opt_definition */ +#line 8743 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter subscription"),(yyvsp[-3].str),mm_strdup("refresh publication"),(yyvsp[0].str)); +} +#line 47545 "preproc.c" + break; + + case 1387: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name ADD_P PUBLICATION name_list opt_definition */ +#line 8747 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter subscription"),(yyvsp[-4].str),mm_strdup("add publication"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47553 "preproc.c" + break; + + case 1388: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name DROP PUBLICATION name_list opt_definition */ +#line 8751 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter subscription"),(yyvsp[-4].str),mm_strdup("drop publication"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47561 "preproc.c" + break; + + case 1389: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name SET PUBLICATION name_list opt_definition */ +#line 8755 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter subscription"),(yyvsp[-4].str),mm_strdup("set publication"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47569 "preproc.c" + break; + + case 1390: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name ENABLE_P */ +#line 8759 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter subscription"),(yyvsp[-1].str),mm_strdup("enable")); +} +#line 47577 "preproc.c" + break; + + case 1391: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name DISABLE_P */ +#line 8763 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter subscription"),(yyvsp[-1].str),mm_strdup("disable")); +} +#line 47585 "preproc.c" + break; + + case 1392: /* DropSubscriptionStmt: DROP SUBSCRIPTION name opt_drop_behavior */ +#line 8771 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop subscription"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47593 "preproc.c" + break; + + case 1393: /* DropSubscriptionStmt: DROP SUBSCRIPTION IF_P EXISTS name opt_drop_behavior */ +#line 8775 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("drop subscription if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47601 "preproc.c" + break; + + case 1394: /* RuleStmt: CREATE opt_or_replace RULE name AS ON event TO qualified_name where_clause DO opt_instead RuleActionList */ +#line 8783 "preproc.y" + { + (yyval.str) = cat_str(12,mm_strdup("create"),(yyvsp[-11].str),mm_strdup("rule"),(yyvsp[-9].str),mm_strdup("as on"),(yyvsp[-6].str),mm_strdup("to"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("do"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47609 "preproc.c" + break; + + case 1395: /* RuleActionList: NOTHING */ +#line 8791 "preproc.y" + { + (yyval.str) = mm_strdup("nothing"); +} +#line 47617 "preproc.c" + break; + + case 1396: /* RuleActionList: RuleActionStmt */ +#line 8795 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47625 "preproc.c" + break; + + case 1397: /* RuleActionList: '(' RuleActionMulti ')' */ +#line 8799 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 47633 "preproc.c" + break; + + case 1398: /* RuleActionMulti: RuleActionMulti ';' RuleActionStmtOrEmpty */ +#line 8807 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(";"),(yyvsp[0].str)); +} +#line 47641 "preproc.c" + break; + + case 1399: /* RuleActionMulti: RuleActionStmtOrEmpty */ +#line 8811 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47649 "preproc.c" + break; + + case 1400: /* RuleActionStmt: SelectStmt */ +#line 8819 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47657 "preproc.c" + break; + + case 1401: /* RuleActionStmt: InsertStmt */ +#line 8823 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47665 "preproc.c" + break; + + case 1402: /* RuleActionStmt: UpdateStmt */ +#line 8827 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47673 "preproc.c" + break; + + case 1403: /* RuleActionStmt: DeleteStmt */ +#line 8831 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47681 "preproc.c" + break; + + case 1404: /* RuleActionStmt: NotifyStmt */ +#line 8835 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47689 "preproc.c" + break; + + case 1405: /* RuleActionStmtOrEmpty: RuleActionStmt */ +#line 8843 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47697 "preproc.c" + break; + + case 1406: /* RuleActionStmtOrEmpty: %empty */ +#line 8847 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 47704 "preproc.c" + break; + + case 1407: /* event: SELECT */ +#line 8854 "preproc.y" + { + (yyval.str) = mm_strdup("select"); +} +#line 47712 "preproc.c" + break; + + case 1408: /* event: UPDATE */ +#line 8858 "preproc.y" + { + (yyval.str) = mm_strdup("update"); +} +#line 47720 "preproc.c" + break; + + case 1409: /* event: DELETE_P */ +#line 8862 "preproc.y" + { + (yyval.str) = mm_strdup("delete"); +} +#line 47728 "preproc.c" + break; + + case 1410: /* event: INSERT */ +#line 8866 "preproc.y" + { + (yyval.str) = mm_strdup("insert"); +} +#line 47736 "preproc.c" + break; + + case 1411: /* opt_instead: INSTEAD */ +#line 8874 "preproc.y" + { + (yyval.str) = mm_strdup("instead"); +} +#line 47744 "preproc.c" + break; + + case 1412: /* opt_instead: ALSO */ +#line 8878 "preproc.y" + { + (yyval.str) = mm_strdup("also"); +} +#line 47752 "preproc.c" + break; + + case 1413: /* opt_instead: %empty */ +#line 8882 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 47759 "preproc.c" + break; + + case 1414: /* NotifyStmt: NOTIFY ColId notify_payload */ +#line 8889 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("notify"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47767 "preproc.c" + break; + + case 1415: /* notify_payload: ',' ecpg_sconst */ +#line 8897 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup(","),(yyvsp[0].str)); +} +#line 47775 "preproc.c" + break; + + case 1416: /* notify_payload: %empty */ +#line 8901 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 47782 "preproc.c" + break; + + case 1417: /* ListenStmt: LISTEN ColId */ +#line 8908 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("listen"),(yyvsp[0].str)); +} +#line 47790 "preproc.c" + break; + + case 1418: /* UnlistenStmt: UNLISTEN ColId */ +#line 8916 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("unlisten"),(yyvsp[0].str)); +} +#line 47798 "preproc.c" + break; + + case 1419: /* UnlistenStmt: UNLISTEN '*' */ +#line 8920 "preproc.y" + { + (yyval.str) = mm_strdup("unlisten *"); +} +#line 47806 "preproc.c" + break; + + case 1420: /* TransactionStmt: ABORT_P opt_transaction opt_transaction_chain */ +#line 8928 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("abort"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47814 "preproc.c" + break; + + case 1421: /* TransactionStmt: START TRANSACTION transaction_mode_list_or_empty */ +#line 8932 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("start transaction"),(yyvsp[0].str)); +} +#line 47822 "preproc.c" + break; + + case 1422: /* TransactionStmt: COMMIT opt_transaction opt_transaction_chain */ +#line 8936 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("commit"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47830 "preproc.c" + break; + + case 1423: /* TransactionStmt: ROLLBACK opt_transaction opt_transaction_chain */ +#line 8940 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("rollback"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47838 "preproc.c" + break; + + case 1424: /* TransactionStmt: SAVEPOINT ColId */ +#line 8944 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("savepoint"),(yyvsp[0].str)); +} +#line 47846 "preproc.c" + break; + + case 1425: /* TransactionStmt: RELEASE SAVEPOINT ColId */ +#line 8948 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("release savepoint"),(yyvsp[0].str)); +} +#line 47854 "preproc.c" + break; + + case 1426: /* TransactionStmt: RELEASE ColId */ +#line 8952 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("release"),(yyvsp[0].str)); +} +#line 47862 "preproc.c" + break; + + case 1427: /* TransactionStmt: ROLLBACK opt_transaction TO SAVEPOINT ColId */ +#line 8956 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("rollback"),(yyvsp[-3].str),mm_strdup("to savepoint"),(yyvsp[0].str)); +} +#line 47870 "preproc.c" + break; + + case 1428: /* TransactionStmt: ROLLBACK opt_transaction TO ColId */ +#line 8960 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("rollback"),(yyvsp[-2].str),mm_strdup("to"),(yyvsp[0].str)); +} +#line 47878 "preproc.c" + break; + + case 1429: /* TransactionStmt: PREPARE TRANSACTION ecpg_sconst */ +#line 8964 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("prepare transaction"),(yyvsp[0].str)); +} +#line 47886 "preproc.c" + break; + + case 1430: /* TransactionStmt: COMMIT PREPARED ecpg_sconst */ +#line 8968 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("commit prepared"),(yyvsp[0].str)); +} +#line 47894 "preproc.c" + break; + + case 1431: /* TransactionStmt: ROLLBACK PREPARED ecpg_sconst */ +#line 8972 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("rollback prepared"),(yyvsp[0].str)); +} +#line 47902 "preproc.c" + break; + + case 1432: /* TransactionStmtLegacy: BEGIN_P opt_transaction transaction_mode_list_or_empty */ +#line 8980 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("begin"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47910 "preproc.c" + break; + + case 1433: /* TransactionStmtLegacy: END_P opt_transaction opt_transaction_chain */ +#line 8984 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("end"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 47918 "preproc.c" + break; + + case 1434: /* opt_transaction: WORK */ +#line 8992 "preproc.y" + { + (yyval.str) = mm_strdup("work"); +} +#line 47926 "preproc.c" + break; + + case 1435: /* opt_transaction: TRANSACTION */ +#line 8996 "preproc.y" + { + (yyval.str) = mm_strdup("transaction"); +} +#line 47934 "preproc.c" + break; + + case 1436: /* opt_transaction: %empty */ +#line 9000 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 47941 "preproc.c" + break; + + case 1437: /* transaction_mode_item: ISOLATION LEVEL iso_level */ +#line 9007 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("isolation level"),(yyvsp[0].str)); +} +#line 47949 "preproc.c" + break; + + case 1438: /* transaction_mode_item: READ ONLY */ +#line 9011 "preproc.y" + { + (yyval.str) = mm_strdup("read only"); +} +#line 47957 "preproc.c" + break; + + case 1439: /* transaction_mode_item: READ WRITE */ +#line 9015 "preproc.y" + { + (yyval.str) = mm_strdup("read write"); +} +#line 47965 "preproc.c" + break; + + case 1440: /* transaction_mode_item: DEFERRABLE */ +#line 9019 "preproc.y" + { + (yyval.str) = mm_strdup("deferrable"); +} +#line 47973 "preproc.c" + break; + + case 1441: /* transaction_mode_item: NOT DEFERRABLE */ +#line 9023 "preproc.y" + { + (yyval.str) = mm_strdup("not deferrable"); +} +#line 47981 "preproc.c" + break; + + case 1442: /* transaction_mode_list: transaction_mode_item */ +#line 9031 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 47989 "preproc.c" + break; + + case 1443: /* transaction_mode_list: transaction_mode_list ',' transaction_mode_item */ +#line 9035 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 47997 "preproc.c" + break; + + case 1444: /* transaction_mode_list: transaction_mode_list transaction_mode_item */ +#line 9039 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48005 "preproc.c" + break; + + case 1445: /* transaction_mode_list_or_empty: transaction_mode_list */ +#line 9047 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48013 "preproc.c" + break; + + case 1446: /* transaction_mode_list_or_empty: %empty */ +#line 9051 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48020 "preproc.c" + break; + + case 1447: /* opt_transaction_chain: AND CHAIN */ +#line 9058 "preproc.y" + { + (yyval.str) = mm_strdup("and chain"); +} +#line 48028 "preproc.c" + break; + + case 1448: /* opt_transaction_chain: AND NO CHAIN */ +#line 9062 "preproc.y" + { + (yyval.str) = mm_strdup("and no chain"); +} +#line 48036 "preproc.c" + break; + + case 1449: /* opt_transaction_chain: %empty */ +#line 9066 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48043 "preproc.c" + break; + + case 1450: /* ViewStmt: CREATE OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option */ +#line 9073 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("create"),(yyvsp[-7].str),mm_strdup("view"),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("as"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48051 "preproc.c" + break; + + case 1451: /* ViewStmt: CREATE OR REPLACE OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option */ +#line 9077 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("create or replace"),(yyvsp[-7].str),mm_strdup("view"),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("as"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48059 "preproc.c" + break; + + case 1452: /* ViewStmt: CREATE OptTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS SelectStmt opt_check_option */ +#line 9081 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = cat_str(11,mm_strdup("create"),(yyvsp[-10].str),mm_strdup("recursive view"),(yyvsp[-7].str),mm_strdup("("),(yyvsp[-5].str),mm_strdup(")"),(yyvsp[-3].str),mm_strdup("as"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48068 "preproc.c" + break; + + case 1453: /* ViewStmt: CREATE OR REPLACE OptTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS SelectStmt opt_check_option */ +#line 9086 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = cat_str(11,mm_strdup("create or replace"),(yyvsp[-10].str),mm_strdup("recursive view"),(yyvsp[-7].str),mm_strdup("("),(yyvsp[-5].str),mm_strdup(")"),(yyvsp[-3].str),mm_strdup("as"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48077 "preproc.c" + break; + + case 1454: /* opt_check_option: WITH CHECK OPTION */ +#line 9095 "preproc.y" + { + (yyval.str) = mm_strdup("with check option"); +} +#line 48085 "preproc.c" + break; + + case 1455: /* opt_check_option: WITH CASCADED CHECK OPTION */ +#line 9099 "preproc.y" + { + (yyval.str) = mm_strdup("with cascaded check option"); +} +#line 48093 "preproc.c" + break; + + case 1456: /* opt_check_option: WITH LOCAL CHECK OPTION */ +#line 9103 "preproc.y" + { + (yyval.str) = mm_strdup("with local check option"); +} +#line 48101 "preproc.c" + break; + + case 1457: /* opt_check_option: %empty */ +#line 9107 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48108 "preproc.c" + break; + + case 1458: /* LoadStmt: LOAD file_name */ +#line 9114 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("load"),(yyvsp[0].str)); +} +#line 48116 "preproc.c" + break; + + case 1459: /* CreatedbStmt: CREATE DATABASE name opt_with createdb_opt_list */ +#line 9122 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("create database"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48124 "preproc.c" + break; + + case 1460: /* createdb_opt_list: createdb_opt_items */ +#line 9130 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48132 "preproc.c" + break; + + case 1461: /* createdb_opt_list: %empty */ +#line 9134 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48139 "preproc.c" + break; + + case 1462: /* createdb_opt_items: createdb_opt_item */ +#line 9141 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48147 "preproc.c" + break; + + case 1463: /* createdb_opt_items: createdb_opt_items createdb_opt_item */ +#line 9145 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48155 "preproc.c" + break; + + case 1464: /* createdb_opt_item: createdb_opt_name opt_equal SignedIconst */ +#line 9153 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48163 "preproc.c" + break; + + case 1465: /* createdb_opt_item: createdb_opt_name opt_equal opt_boolean_or_string */ +#line 9157 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48171 "preproc.c" + break; + + case 1466: /* createdb_opt_item: createdb_opt_name opt_equal DEFAULT */ +#line 9161 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup("default")); +} +#line 48179 "preproc.c" + break; + + case 1467: /* createdb_opt_name: ecpg_ident */ +#line 9169 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48187 "preproc.c" + break; + + case 1468: /* createdb_opt_name: CONNECTION LIMIT */ +#line 9173 "preproc.y" + { + (yyval.str) = mm_strdup("connection limit"); +} +#line 48195 "preproc.c" + break; + + case 1469: /* createdb_opt_name: ENCODING */ +#line 9177 "preproc.y" + { + (yyval.str) = mm_strdup("encoding"); +} +#line 48203 "preproc.c" + break; + + case 1470: /* createdb_opt_name: LOCATION */ +#line 9181 "preproc.y" + { + (yyval.str) = mm_strdup("location"); +} +#line 48211 "preproc.c" + break; + + case 1471: /* createdb_opt_name: OWNER */ +#line 9185 "preproc.y" + { + (yyval.str) = mm_strdup("owner"); +} +#line 48219 "preproc.c" + break; + + case 1472: /* createdb_opt_name: TABLESPACE */ +#line 9189 "preproc.y" + { + (yyval.str) = mm_strdup("tablespace"); +} +#line 48227 "preproc.c" + break; + + case 1473: /* createdb_opt_name: TEMPLATE */ +#line 9193 "preproc.y" + { + (yyval.str) = mm_strdup("template"); +} +#line 48235 "preproc.c" + break; + + case 1474: /* opt_equal: '=' */ +#line 9201 "preproc.y" + { + (yyval.str) = mm_strdup("="); +} +#line 48243 "preproc.c" + break; + + case 1475: /* opt_equal: %empty */ +#line 9205 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48250 "preproc.c" + break; + + case 1476: /* AlterDatabaseStmt: ALTER DATABASE name WITH createdb_opt_list */ +#line 9212 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter database"),(yyvsp[-2].str),mm_strdup("with"),(yyvsp[0].str)); +} +#line 48258 "preproc.c" + break; + + case 1477: /* AlterDatabaseStmt: ALTER DATABASE name createdb_opt_list */ +#line 9216 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter database"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48266 "preproc.c" + break; + + case 1478: /* AlterDatabaseStmt: ALTER DATABASE name SET TABLESPACE name */ +#line 9220 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter database"),(yyvsp[-3].str),mm_strdup("set tablespace"),(yyvsp[0].str)); +} +#line 48274 "preproc.c" + break; + + case 1479: /* AlterDatabaseSetStmt: ALTER DATABASE name SetResetClause */ +#line 9228 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter database"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48282 "preproc.c" + break; + + case 1480: /* DropdbStmt: DROP DATABASE name */ +#line 9236 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop database"),(yyvsp[0].str)); +} +#line 48290 "preproc.c" + break; + + case 1481: /* DropdbStmt: DROP DATABASE IF_P EXISTS name */ +#line 9240 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("drop database if exists"),(yyvsp[0].str)); +} +#line 48298 "preproc.c" + break; + + case 1482: /* DropdbStmt: DROP DATABASE name opt_with '(' drop_option_list ')' */ +#line 9244 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("drop database"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 48306 "preproc.c" + break; + + case 1483: /* DropdbStmt: DROP DATABASE IF_P EXISTS name opt_with '(' drop_option_list ')' */ +#line 9248 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("drop database if exists"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 48314 "preproc.c" + break; + + case 1484: /* drop_option_list: drop_option */ +#line 9256 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48322 "preproc.c" + break; + + case 1485: /* drop_option_list: drop_option_list ',' drop_option */ +#line 9260 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 48330 "preproc.c" + break; + + case 1486: /* drop_option: FORCE */ +#line 9268 "preproc.y" + { + (yyval.str) = mm_strdup("force"); +} +#line 48338 "preproc.c" + break; + + case 1487: /* AlterCollationStmt: ALTER COLLATION any_name REFRESH VERSION_P */ +#line 9276 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter collation"),(yyvsp[-2].str),mm_strdup("refresh version")); +} +#line 48346 "preproc.c" + break; + + case 1488: /* AlterSystemStmt: ALTER SYSTEM_P SET generic_set */ +#line 9284 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("alter system set"),(yyvsp[0].str)); +} +#line 48354 "preproc.c" + break; + + case 1489: /* AlterSystemStmt: ALTER SYSTEM_P RESET generic_reset */ +#line 9288 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("alter system reset"),(yyvsp[0].str)); +} +#line 48362 "preproc.c" + break; + + case 1490: /* CreateDomainStmt: CREATE DOMAIN_P any_name opt_as Typename ColQualList */ +#line 9296 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("create domain"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48370 "preproc.c" + break; + + case 1491: /* AlterDomainStmt: ALTER DOMAIN_P any_name alter_column_default */ +#line 9304 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter domain"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48378 "preproc.c" + break; + + case 1492: /* AlterDomainStmt: ALTER DOMAIN_P any_name DROP NOT NULL_P */ +#line 9308 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter domain"),(yyvsp[-3].str),mm_strdup("drop not null")); +} +#line 48386 "preproc.c" + break; + + case 1493: /* AlterDomainStmt: ALTER DOMAIN_P any_name SET NOT NULL_P */ +#line 9312 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter domain"),(yyvsp[-3].str),mm_strdup("set not null")); +} +#line 48394 "preproc.c" + break; + + case 1494: /* AlterDomainStmt: ALTER DOMAIN_P any_name ADD_P TableConstraint */ +#line 9316 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter domain"),(yyvsp[-2].str),mm_strdup("add"),(yyvsp[0].str)); +} +#line 48402 "preproc.c" + break; + + case 1495: /* AlterDomainStmt: ALTER DOMAIN_P any_name DROP CONSTRAINT name opt_drop_behavior */ +#line 9320 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter domain"),(yyvsp[-4].str),mm_strdup("drop constraint"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48410 "preproc.c" + break; + + case 1496: /* AlterDomainStmt: ALTER DOMAIN_P any_name DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior */ +#line 9324 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("alter domain"),(yyvsp[-6].str),mm_strdup("drop constraint if exists"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48418 "preproc.c" + break; + + case 1497: /* AlterDomainStmt: ALTER DOMAIN_P any_name VALIDATE CONSTRAINT name */ +#line 9328 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter domain"),(yyvsp[-3].str),mm_strdup("validate constraint"),(yyvsp[0].str)); +} +#line 48426 "preproc.c" + break; + + case 1498: /* opt_as: AS */ +#line 9336 "preproc.y" + { + (yyval.str) = mm_strdup("as"); +} +#line 48434 "preproc.c" + break; + + case 1499: /* opt_as: %empty */ +#line 9340 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48441 "preproc.c" + break; + + case 1500: /* AlterTSDictionaryStmt: ALTER TEXT_P SEARCH DICTIONARY any_name definition */ +#line 9347 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("alter text search dictionary"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48449 "preproc.c" + break; + + case 1501: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name ADD_P MAPPING FOR name_list any_with any_name_list */ +#line 9355 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter text search configuration"),(yyvsp[-6].str),mm_strdup("add mapping for"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48457 "preproc.c" + break; + + case 1502: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list any_with any_name_list */ +#line 9359 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter text search configuration"),(yyvsp[-6].str),mm_strdup("alter mapping for"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48465 "preproc.c" + break; + + case 1503: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING REPLACE any_name any_with any_name */ +#line 9363 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("alter text search configuration"),(yyvsp[-6].str),mm_strdup("alter mapping replace"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48473 "preproc.c" + break; + + case 1504: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list REPLACE any_name any_with any_name */ +#line 9367 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("alter text search configuration"),(yyvsp[-8].str),mm_strdup("alter mapping for"),(yyvsp[-4].str),mm_strdup("replace"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48481 "preproc.c" + break; + + case 1505: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING FOR name_list */ +#line 9371 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search configuration"),(yyvsp[-4].str),mm_strdup("drop mapping for"),(yyvsp[0].str)); +} +#line 48489 "preproc.c" + break; + + case 1506: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING IF_P EXISTS FOR name_list */ +#line 9375 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("alter text search configuration"),(yyvsp[-6].str),mm_strdup("drop mapping if exists for"),(yyvsp[0].str)); +} +#line 48497 "preproc.c" + break; + + case 1507: /* any_with: WITH */ +#line 9383 "preproc.y" + { + (yyval.str) = mm_strdup("with"); +} +#line 48505 "preproc.c" + break; + + case 1508: /* any_with: WITH_LA */ +#line 9387 "preproc.y" + { + (yyval.str) = mm_strdup("with"); +} +#line 48513 "preproc.c" + break; + + case 1509: /* CreateConversionStmt: CREATE opt_default CONVERSION_P any_name FOR ecpg_sconst TO ecpg_sconst FROM any_name */ +#line 9395 "preproc.y" + { + (yyval.str) = cat_str(10,mm_strdup("create"),(yyvsp[-8].str),mm_strdup("conversion"),(yyvsp[-6].str),mm_strdup("for"),(yyvsp[-4].str),mm_strdup("to"),(yyvsp[-2].str),mm_strdup("from"),(yyvsp[0].str)); +} +#line 48521 "preproc.c" + break; + + case 1510: /* ClusterStmt: CLUSTER opt_verbose qualified_name cluster_index_specification */ +#line 9403 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("cluster"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48529 "preproc.c" + break; + + case 1511: /* ClusterStmt: CLUSTER '(' utility_option_list ')' qualified_name cluster_index_specification */ +#line 9407 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("cluster ("),(yyvsp[-3].str),mm_strdup(")"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48537 "preproc.c" + break; + + case 1512: /* ClusterStmt: CLUSTER opt_verbose */ +#line 9411 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("cluster"),(yyvsp[0].str)); +} +#line 48545 "preproc.c" + break; + + case 1513: /* ClusterStmt: CLUSTER opt_verbose name ON qualified_name */ +#line 9415 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("cluster"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("on"),(yyvsp[0].str)); +} +#line 48553 "preproc.c" + break; + + case 1514: /* cluster_index_specification: USING name */ +#line 9423 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("using"),(yyvsp[0].str)); +} +#line 48561 "preproc.c" + break; + + case 1515: /* cluster_index_specification: %empty */ +#line 9427 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48568 "preproc.c" + break; + + case 1516: /* VacuumStmt: VACUUM opt_full opt_freeze opt_verbose opt_analyze opt_vacuum_relation_list */ +#line 9434 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("vacuum"),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48576 "preproc.c" + break; + + case 1517: /* VacuumStmt: VACUUM '(' utility_option_list ')' opt_vacuum_relation_list */ +#line 9438 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("vacuum ("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 48584 "preproc.c" + break; + + case 1518: /* AnalyzeStmt: analyze_keyword opt_verbose opt_vacuum_relation_list */ +#line 9446 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48592 "preproc.c" + break; + + case 1519: /* AnalyzeStmt: analyze_keyword '(' utility_option_list ')' opt_vacuum_relation_list */ +#line 9450 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 48600 "preproc.c" + break; + + case 1520: /* utility_option_list: utility_option_elem */ +#line 9458 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48608 "preproc.c" + break; + + case 1521: /* utility_option_list: utility_option_list ',' utility_option_elem */ +#line 9462 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 48616 "preproc.c" + break; + + case 1522: /* analyze_keyword: ANALYZE */ +#line 9470 "preproc.y" + { + (yyval.str) = mm_strdup("analyze"); +} +#line 48624 "preproc.c" + break; + + case 1523: /* analyze_keyword: ANALYSE */ +#line 9474 "preproc.y" + { + (yyval.str) = mm_strdup("analyse"); +} +#line 48632 "preproc.c" + break; + + case 1524: /* utility_option_elem: utility_option_name utility_option_arg */ +#line 9482 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48640 "preproc.c" + break; + + case 1525: /* utility_option_name: NonReservedWord */ +#line 9490 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48648 "preproc.c" + break; + + case 1526: /* utility_option_name: analyze_keyword */ +#line 9494 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48656 "preproc.c" + break; + + case 1527: /* utility_option_arg: opt_boolean_or_string */ +#line 9502 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48664 "preproc.c" + break; + + case 1528: /* utility_option_arg: NumericOnly */ +#line 9506 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48672 "preproc.c" + break; + + case 1529: /* utility_option_arg: %empty */ +#line 9510 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48679 "preproc.c" + break; + + case 1530: /* opt_analyze: analyze_keyword */ +#line 9517 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48687 "preproc.c" + break; + + case 1531: /* opt_analyze: %empty */ +#line 9521 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48694 "preproc.c" + break; + + case 1532: /* opt_verbose: VERBOSE */ +#line 9528 "preproc.y" + { + (yyval.str) = mm_strdup("verbose"); +} +#line 48702 "preproc.c" + break; + + case 1533: /* opt_verbose: %empty */ +#line 9532 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48709 "preproc.c" + break; + + case 1534: /* opt_full: FULL */ +#line 9539 "preproc.y" + { + (yyval.str) = mm_strdup("full"); +} +#line 48717 "preproc.c" + break; + + case 1535: /* opt_full: %empty */ +#line 9543 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48724 "preproc.c" + break; + + case 1536: /* opt_freeze: FREEZE */ +#line 9550 "preproc.y" + { + (yyval.str) = mm_strdup("freeze"); +} +#line 48732 "preproc.c" + break; + + case 1537: /* opt_freeze: %empty */ +#line 9554 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48739 "preproc.c" + break; + + case 1538: /* opt_name_list: '(' name_list ')' */ +#line 9561 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 48747 "preproc.c" + break; + + case 1539: /* opt_name_list: %empty */ +#line 9565 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48754 "preproc.c" + break; + + case 1540: /* vacuum_relation: qualified_name opt_name_list */ +#line 9572 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48762 "preproc.c" + break; + + case 1541: /* vacuum_relation_list: vacuum_relation */ +#line 9580 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48770 "preproc.c" + break; + + case 1542: /* vacuum_relation_list: vacuum_relation_list ',' vacuum_relation */ +#line 9584 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 48778 "preproc.c" + break; + + case 1543: /* opt_vacuum_relation_list: vacuum_relation_list */ +#line 9592 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48786 "preproc.c" + break; + + case 1544: /* opt_vacuum_relation_list: %empty */ +#line 9596 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48793 "preproc.c" + break; + + case 1545: /* ExplainStmt: EXPLAIN ExplainableStmt */ +#line 9603 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("explain"),(yyvsp[0].str)); +} +#line 48801 "preproc.c" + break; + + case 1546: /* ExplainStmt: EXPLAIN analyze_keyword opt_verbose ExplainableStmt */ +#line 9607 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("explain"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 48809 "preproc.c" + break; + + case 1547: /* ExplainStmt: EXPLAIN VERBOSE ExplainableStmt */ +#line 9611 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("explain verbose"),(yyvsp[0].str)); +} +#line 48817 "preproc.c" + break; + + case 1548: /* ExplainStmt: EXPLAIN '(' utility_option_list ')' ExplainableStmt */ +#line 9615 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("explain ("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 48825 "preproc.c" + break; + + case 1549: /* ExplainableStmt: SelectStmt */ +#line 9623 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48833 "preproc.c" + break; + + case 1550: /* ExplainableStmt: InsertStmt */ +#line 9627 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48841 "preproc.c" + break; + + case 1551: /* ExplainableStmt: UpdateStmt */ +#line 9631 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48849 "preproc.c" + break; + + case 1552: /* ExplainableStmt: DeleteStmt */ +#line 9635 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48857 "preproc.c" + break; + + case 1553: /* ExplainableStmt: DeclareCursorStmt */ +#line 9639 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48865 "preproc.c" + break; + + case 1554: /* ExplainableStmt: CreateAsStmt */ +#line 9643 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48873 "preproc.c" + break; + + case 1555: /* ExplainableStmt: CreateMatViewStmt */ +#line 9647 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48881 "preproc.c" + break; + + case 1556: /* ExplainableStmt: RefreshMatViewStmt */ +#line 9651 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48889 "preproc.c" + break; + + case 1557: /* ExplainableStmt: ExecuteStmt */ +#line 9655 "preproc.y" + { + (yyval.str) = (yyvsp[0].exec).name; + } +#line 48897 "preproc.c" + break; + + case 1558: /* PrepareStmt: PREPARE prepared_name prep_type_clause AS PreparableStmt */ +#line 9663 "preproc.y" + { + (yyval.prep).name = (yyvsp[-3].str); + (yyval.prep).type = (yyvsp[-2].str); + (yyval.prep).stmt = (yyvsp[0].str); + } +#line 48907 "preproc.c" + break; + + case 1559: /* PrepareStmt: PREPARE prepared_name FROM execstring */ +#line 9669 "preproc.y" + { + (yyval.prep).name = (yyvsp[-2].str); + (yyval.prep).type = NULL; + (yyval.prep).stmt = (yyvsp[0].str); + } +#line 48917 "preproc.c" + break; + + case 1560: /* prep_type_clause: '(' type_list ')' */ +#line 9679 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 48925 "preproc.c" + break; + + case 1561: /* prep_type_clause: %empty */ +#line 9683 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 48932 "preproc.c" + break; + + case 1562: /* PreparableStmt: SelectStmt */ +#line 9690 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48940 "preproc.c" + break; + + case 1563: /* PreparableStmt: InsertStmt */ +#line 9694 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48948 "preproc.c" + break; + + case 1564: /* PreparableStmt: UpdateStmt */ +#line 9698 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48956 "preproc.c" + break; + + case 1565: /* PreparableStmt: DeleteStmt */ +#line 9702 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 48964 "preproc.c" + break; + + case 1566: /* ExecuteStmt: EXECUTE prepared_name execute_param_clause execute_rest */ +#line 9710 "preproc.y" + { + (yyval.exec).name = (yyvsp[-2].str); + (yyval.exec).type = (yyvsp[-1].str); + } +#line 48973 "preproc.c" + break; + + case 1567: /* ExecuteStmt: CREATE OptTemp TABLE create_as_target AS EXECUTE prepared_name execute_param_clause opt_with_data execute_rest */ +#line 9715 "preproc.y" + { + (yyval.exec).name = cat_str(8,mm_strdup("create"),(yyvsp[-8].str),mm_strdup("table"),(yyvsp[-6].str),mm_strdup("as execute"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str)); + } +#line 48981 "preproc.c" + break; + + case 1568: /* ExecuteStmt: CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS EXECUTE prepared_name execute_param_clause opt_with_data execute_rest */ +#line 9719 "preproc.y" + { + (yyval.exec).name = cat_str(8,mm_strdup("create"),(yyvsp[-11].str),mm_strdup("table if not exists"),(yyvsp[-6].str),mm_strdup("as execute"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str)); + } +#line 48989 "preproc.c" + break; + + case 1569: /* execute_param_clause: '(' expr_list ')' */ +#line 9727 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 48997 "preproc.c" + break; + + case 1570: /* execute_param_clause: %empty */ +#line 9731 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49004 "preproc.c" + break; + + case 1571: /* InsertStmt: opt_with_clause INSERT INTO insert_target insert_rest opt_on_conflict returning_clause */ +#line 9738 "preproc.y" + { + (yyval.str) = cat_str(6,(yyvsp[-6].str),mm_strdup("insert into"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49012 "preproc.c" + break; + + case 1572: /* insert_target: qualified_name */ +#line 9746 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49020 "preproc.c" + break; + + case 1573: /* insert_target: qualified_name AS ColId */ +#line 9750 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("as"),(yyvsp[0].str)); +} +#line 49028 "preproc.c" + break; + + case 1574: /* insert_rest: SelectStmt */ +#line 9758 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49036 "preproc.c" + break; + + case 1575: /* insert_rest: OVERRIDING override_kind VALUE_P SelectStmt */ +#line 9762 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("overriding"),(yyvsp[-2].str),mm_strdup("value"),(yyvsp[0].str)); +} +#line 49044 "preproc.c" + break; + + case 1576: /* insert_rest: '(' insert_column_list ')' SelectStmt */ +#line 9766 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 49052 "preproc.c" + break; + + case 1577: /* insert_rest: '(' insert_column_list ')' OVERRIDING override_kind VALUE_P SelectStmt */ +#line 9770 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("("),(yyvsp[-5].str),mm_strdup(") overriding"),(yyvsp[-2].str),mm_strdup("value"),(yyvsp[0].str)); +} +#line 49060 "preproc.c" + break; + + case 1578: /* insert_rest: DEFAULT VALUES */ +#line 9774 "preproc.y" + { + (yyval.str) = mm_strdup("default values"); +} +#line 49068 "preproc.c" + break; + + case 1579: /* override_kind: USER */ +#line 9782 "preproc.y" + { + (yyval.str) = mm_strdup("user"); +} +#line 49076 "preproc.c" + break; + + case 1580: /* override_kind: SYSTEM_P */ +#line 9786 "preproc.y" + { + (yyval.str) = mm_strdup("system"); +} +#line 49084 "preproc.c" + break; + + case 1581: /* insert_column_list: insert_column_item */ +#line 9794 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49092 "preproc.c" + break; + + case 1582: /* insert_column_list: insert_column_list ',' insert_column_item */ +#line 9798 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 49100 "preproc.c" + break; + + case 1583: /* insert_column_item: ColId opt_indirection */ +#line 9806 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49108 "preproc.c" + break; + + case 1584: /* opt_on_conflict: ON CONFLICT opt_conf_expr DO UPDATE SET set_clause_list where_clause */ +#line 9814 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("on conflict"),(yyvsp[-5].str),mm_strdup("do update set"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49116 "preproc.c" + break; + + case 1585: /* opt_on_conflict: ON CONFLICT opt_conf_expr DO NOTHING */ +#line 9818 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("on conflict"),(yyvsp[-2].str),mm_strdup("do nothing")); +} +#line 49124 "preproc.c" + break; + + case 1586: /* opt_on_conflict: %empty */ +#line 9822 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49131 "preproc.c" + break; + + case 1587: /* opt_conf_expr: '(' index_params ')' where_clause */ +#line 9829 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 49139 "preproc.c" + break; + + case 1588: /* opt_conf_expr: ON CONSTRAINT name */ +#line 9833 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("on constraint"),(yyvsp[0].str)); +} +#line 49147 "preproc.c" + break; + + case 1589: /* opt_conf_expr: %empty */ +#line 9837 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49154 "preproc.c" + break; + + case 1590: /* returning_clause: RETURNING target_list opt_ecpg_into */ +#line 9844 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("returning"),(yyvsp[-1].str)); +} +#line 49162 "preproc.c" + break; + + case 1591: /* returning_clause: %empty */ +#line 9848 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49169 "preproc.c" + break; + + case 1592: /* DeleteStmt: opt_with_clause DELETE_P FROM relation_expr_opt_alias using_clause where_or_current_clause returning_clause */ +#line 9855 "preproc.y" + { + (yyval.str) = cat_str(6,(yyvsp[-6].str),mm_strdup("delete from"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49177 "preproc.c" + break; + + case 1593: /* using_clause: USING from_list */ +#line 9863 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("using"),(yyvsp[0].str)); +} +#line 49185 "preproc.c" + break; + + case 1594: /* using_clause: %empty */ +#line 9867 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49192 "preproc.c" + break; + + case 1595: /* LockStmt: LOCK_P opt_table relation_expr_list opt_lock opt_nowait */ +#line 9874 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("lock"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49200 "preproc.c" + break; + + case 1596: /* opt_lock: IN_P lock_type MODE */ +#line 9882 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("in"),(yyvsp[-1].str),mm_strdup("mode")); +} +#line 49208 "preproc.c" + break; + + case 1597: /* opt_lock: %empty */ +#line 9886 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49215 "preproc.c" + break; + + case 1598: /* lock_type: ACCESS SHARE */ +#line 9893 "preproc.y" + { + (yyval.str) = mm_strdup("access share"); +} +#line 49223 "preproc.c" + break; + + case 1599: /* lock_type: ROW SHARE */ +#line 9897 "preproc.y" + { + (yyval.str) = mm_strdup("row share"); +} +#line 49231 "preproc.c" + break; + + case 1600: /* lock_type: ROW EXCLUSIVE */ +#line 9901 "preproc.y" + { + (yyval.str) = mm_strdup("row exclusive"); +} +#line 49239 "preproc.c" + break; + + case 1601: /* lock_type: SHARE UPDATE EXCLUSIVE */ +#line 9905 "preproc.y" + { + (yyval.str) = mm_strdup("share update exclusive"); +} +#line 49247 "preproc.c" + break; + + case 1602: /* lock_type: SHARE */ +#line 9909 "preproc.y" + { + (yyval.str) = mm_strdup("share"); +} +#line 49255 "preproc.c" + break; + + case 1603: /* lock_type: SHARE ROW EXCLUSIVE */ +#line 9913 "preproc.y" + { + (yyval.str) = mm_strdup("share row exclusive"); +} +#line 49263 "preproc.c" + break; + + case 1604: /* lock_type: EXCLUSIVE */ +#line 9917 "preproc.y" + { + (yyval.str) = mm_strdup("exclusive"); +} +#line 49271 "preproc.c" + break; + + case 1605: /* lock_type: ACCESS EXCLUSIVE */ +#line 9921 "preproc.y" + { + (yyval.str) = mm_strdup("access exclusive"); +} +#line 49279 "preproc.c" + break; + + case 1606: /* opt_nowait: NOWAIT */ +#line 9929 "preproc.y" + { + (yyval.str) = mm_strdup("nowait"); +} +#line 49287 "preproc.c" + break; + + case 1607: /* opt_nowait: %empty */ +#line 9933 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49294 "preproc.c" + break; + + case 1608: /* opt_nowait_or_skip: NOWAIT */ +#line 9940 "preproc.y" + { + (yyval.str) = mm_strdup("nowait"); +} +#line 49302 "preproc.c" + break; + + case 1609: /* opt_nowait_or_skip: SKIP LOCKED */ +#line 9944 "preproc.y" + { + (yyval.str) = mm_strdup("skip locked"); +} +#line 49310 "preproc.c" + break; + + case 1610: /* opt_nowait_or_skip: %empty */ +#line 9948 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49317 "preproc.c" + break; + + case 1611: /* UpdateStmt: opt_with_clause UPDATE relation_expr_opt_alias SET set_clause_list from_clause where_or_current_clause returning_clause */ +#line 9955 "preproc.y" + { + (yyval.str) = cat_str(8,(yyvsp[-7].str),mm_strdup("update"),(yyvsp[-5].str),mm_strdup("set"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49325 "preproc.c" + break; + + case 1612: /* set_clause_list: set_clause */ +#line 9963 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49333 "preproc.c" + break; + + case 1613: /* set_clause_list: set_clause_list ',' set_clause */ +#line 9967 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 49341 "preproc.c" + break; + + case 1614: /* set_clause: set_target '=' a_expr */ +#line 9975 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("="),(yyvsp[0].str)); +} +#line 49349 "preproc.c" + break; + + case 1615: /* set_clause: '(' set_target_list ')' '=' a_expr */ +#line 9979 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("("),(yyvsp[-3].str),mm_strdup(") ="),(yyvsp[0].str)); +} +#line 49357 "preproc.c" + break; + + case 1616: /* set_target: ColId opt_indirection */ +#line 9987 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49365 "preproc.c" + break; + + case 1617: /* set_target_list: set_target */ +#line 9995 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49373 "preproc.c" + break; + + case 1618: /* set_target_list: set_target_list ',' set_target */ +#line 9999 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 49381 "preproc.c" + break; + + case 1619: /* DeclareCursorStmt: DECLARE cursor_name cursor_options CURSOR opt_hold FOR SelectStmt */ +#line 10007 "preproc.y" + { + struct cursor *ptr, *this; + char *cursor_marker = (yyvsp[-5].str)[0] == ':' ? mm_strdup("$0") : mm_strdup((yyvsp[-5].str)); + char *comment, *c1, *c2; + int (* strcmp_fn)(const char *, const char *) = (((yyvsp[-5].str)[0] == ':' || (yyvsp[-5].str)[0] == '"') ? strcmp : pg_strcasecmp); + + if (INFORMIX_MODE && pg_strcasecmp((yyvsp[-5].str), "database") == 0) + mmfatal(PARSE_ERROR, "\"database\" cannot be used as cursor name in INFORMIX mode"); + + for (ptr = cur; ptr != NULL; ptr = ptr->next) + { + if (strcmp_fn((yyvsp[-5].str), ptr->name) == 0) + { + if ((yyvsp[-5].str)[0] == ':') + mmerror(PARSE_ERROR, ET_ERROR, "using variable \"%s\" in different declare statements is not supported", (yyvsp[-5].str)+1); + else + mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" is already defined", (yyvsp[-5].str)); + } + } + + this = (struct cursor *) mm_alloc(sizeof(struct cursor)); + + this->next = cur; + this->name = (yyvsp[-5].str); + this->function = (current_function ? mm_strdup(current_function) : NULL); + this->connection = connection ? mm_strdup(connection) : NULL; + this->opened = false; + this->command = cat_str(7, mm_strdup("declare"), cursor_marker, (yyvsp[-4].str), mm_strdup("cursor"), (yyvsp[-2].str), mm_strdup("for"), (yyvsp[0].str)); + this->argsinsert = argsinsert; + this->argsinsert_oos = NULL; + this->argsresult = argsresult; + this->argsresult_oos = NULL; + argsinsert = argsresult = NULL; + cur = this; + + c1 = mm_strdup(this->command); + if ((c2 = strstr(c1, "*/")) != NULL) + { + /* We put this text into a comment, so we better remove [*][/]. */ + c2[0] = '.'; + c2[1] = '.'; + } + comment = cat_str(3, mm_strdup("/*"), c1, mm_strdup("*/")); + + (yyval.str) = cat2_str(adjust_outofscope_cursor_vars(this), comment); + } +#line 49432 "preproc.c" + break; + + case 1620: /* cursor_name: name */ +#line 10058 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49440 "preproc.c" + break; + + case 1621: /* cursor_name: char_civar */ +#line 10062 "preproc.y" + { + char *curname = mm_alloc(strlen((yyvsp[0].str)) + 2); + sprintf(curname, ":%s", (yyvsp[0].str)); + free((yyvsp[0].str)); + (yyvsp[0].str) = curname; + (yyval.str) = (yyvsp[0].str); + } +#line 49452 "preproc.c" + break; + + case 1622: /* cursor_options: %empty */ +#line 10074 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49459 "preproc.c" + break; + + case 1623: /* cursor_options: cursor_options NO SCROLL */ +#line 10077 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("no scroll")); +} +#line 49467 "preproc.c" + break; + + case 1624: /* cursor_options: cursor_options SCROLL */ +#line 10081 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("scroll")); +} +#line 49475 "preproc.c" + break; + + case 1625: /* cursor_options: cursor_options BINARY */ +#line 10085 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("binary")); +} +#line 49483 "preproc.c" + break; + + case 1626: /* cursor_options: cursor_options ASENSITIVE */ +#line 10089 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("asensitive")); +} +#line 49491 "preproc.c" + break; + + case 1627: /* cursor_options: cursor_options INSENSITIVE */ +#line 10093 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("insensitive")); +} +#line 49499 "preproc.c" + break; + + case 1628: /* opt_hold: %empty */ +#line 10101 "preproc.y" + { + if (compat == ECPG_COMPAT_INFORMIX_SE && autocommit) + (yyval.str) = mm_strdup("with hold"); + else + (yyval.str) = EMPTY; + } +#line 49510 "preproc.c" + break; + + case 1629: /* opt_hold: WITH HOLD */ +#line 10108 "preproc.y" + { + (yyval.str) = mm_strdup("with hold"); +} +#line 49518 "preproc.c" + break; + + case 1630: /* opt_hold: WITHOUT HOLD */ +#line 10112 "preproc.y" + { + (yyval.str) = mm_strdup("without hold"); +} +#line 49526 "preproc.c" + break; + + case 1631: /* SelectStmt: select_no_parens */ +#line 10120 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49534 "preproc.c" + break; + + case 1632: /* SelectStmt: select_with_parens */ +#line 10124 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49542 "preproc.c" + break; + + case 1633: /* select_with_parens: '(' select_no_parens ')' */ +#line 10132 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 49550 "preproc.c" + break; + + case 1634: /* select_with_parens: '(' select_with_parens ')' */ +#line 10136 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 49558 "preproc.c" + break; + + case 1635: /* select_no_parens: simple_select */ +#line 10144 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49566 "preproc.c" + break; + + case 1636: /* select_no_parens: select_clause sort_clause */ +#line 10148 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49574 "preproc.c" + break; + + case 1637: /* select_no_parens: select_clause opt_sort_clause for_locking_clause opt_select_limit */ +#line 10152 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49582 "preproc.c" + break; + + case 1638: /* select_no_parens: select_clause opt_sort_clause select_limit opt_for_locking_clause */ +#line 10156 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49590 "preproc.c" + break; + + case 1639: /* select_no_parens: with_clause select_clause */ +#line 10160 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49598 "preproc.c" + break; + + case 1640: /* select_no_parens: with_clause select_clause sort_clause */ +#line 10164 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49606 "preproc.c" + break; + + case 1641: /* select_no_parens: with_clause select_clause opt_sort_clause for_locking_clause opt_select_limit */ +#line 10168 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49614 "preproc.c" + break; + + case 1642: /* select_no_parens: with_clause select_clause opt_sort_clause select_limit opt_for_locking_clause */ +#line 10172 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49622 "preproc.c" + break; + + case 1643: /* select_clause: simple_select */ +#line 10180 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49630 "preproc.c" + break; + + case 1644: /* select_clause: select_with_parens */ +#line 10184 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49638 "preproc.c" + break; + + case 1645: /* simple_select: SELECT opt_all_clause opt_target_list into_clause from_clause where_clause group_clause having_clause window_clause */ +#line 10192 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("select"),(yyvsp[-7].str),(yyvsp[-6].str),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49646 "preproc.c" + break; + + case 1646: /* simple_select: SELECT distinct_clause target_list into_clause from_clause where_clause group_clause having_clause window_clause */ +#line 10196 "preproc.y" + { + (yyval.str) = cat_str(9,mm_strdup("select"),(yyvsp[-7].str),(yyvsp[-6].str),(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49654 "preproc.c" + break; + + case 1647: /* simple_select: values_clause */ +#line 10200 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49662 "preproc.c" + break; + + case 1648: /* simple_select: TABLE relation_expr */ +#line 10204 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("table"),(yyvsp[0].str)); +} +#line 49670 "preproc.c" + break; + + case 1649: /* simple_select: select_clause UNION set_quantifier select_clause */ +#line 10208 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("union"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49678 "preproc.c" + break; + + case 1650: /* simple_select: select_clause INTERSECT set_quantifier select_clause */ +#line 10212 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("intersect"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49686 "preproc.c" + break; + + case 1651: /* simple_select: select_clause EXCEPT set_quantifier select_clause */ +#line 10216 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("except"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49694 "preproc.c" + break; + + case 1652: /* with_clause: WITH cte_list */ +#line 10224 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("with"),(yyvsp[0].str)); +} +#line 49702 "preproc.c" + break; + + case 1653: /* with_clause: WITH_LA cte_list */ +#line 10228 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("with"),(yyvsp[0].str)); +} +#line 49710 "preproc.c" + break; + + case 1654: /* with_clause: WITH RECURSIVE cte_list */ +#line 10232 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("with recursive"),(yyvsp[0].str)); +} +#line 49718 "preproc.c" + break; + + case 1655: /* cte_list: common_table_expr */ +#line 10240 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49726 "preproc.c" + break; + + case 1656: /* cte_list: cte_list ',' common_table_expr */ +#line 10244 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 49734 "preproc.c" + break; + + case 1657: /* common_table_expr: name opt_name_list AS opt_materialized '(' PreparableStmt ')' opt_search_clause opt_cycle_clause */ +#line 10252 "preproc.y" + { + (yyval.str) = cat_str(9,(yyvsp[-8].str),(yyvsp[-7].str),mm_strdup("as"),(yyvsp[-5].str),mm_strdup("("),(yyvsp[-3].str),mm_strdup(")"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49742 "preproc.c" + break; + + case 1658: /* opt_materialized: MATERIALIZED */ +#line 10260 "preproc.y" + { + (yyval.str) = mm_strdup("materialized"); +} +#line 49750 "preproc.c" + break; + + case 1659: /* opt_materialized: NOT MATERIALIZED */ +#line 10264 "preproc.y" + { + (yyval.str) = mm_strdup("not materialized"); +} +#line 49758 "preproc.c" + break; + + case 1660: /* opt_materialized: %empty */ +#line 10268 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49765 "preproc.c" + break; + + case 1661: /* opt_search_clause: SEARCH DEPTH FIRST_P BY columnList SET ColId */ +#line 10275 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("search depth first by"),(yyvsp[-2].str),mm_strdup("set"),(yyvsp[0].str)); +} +#line 49773 "preproc.c" + break; + + case 1662: /* opt_search_clause: SEARCH BREADTH FIRST_P BY columnList SET ColId */ +#line 10279 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("search breadth first by"),(yyvsp[-2].str),mm_strdup("set"),(yyvsp[0].str)); +} +#line 49781 "preproc.c" + break; + + case 1663: /* opt_search_clause: %empty */ +#line 10283 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49788 "preproc.c" + break; + + case 1664: /* opt_cycle_clause: CYCLE columnList SET ColId TO AexprConst DEFAULT AexprConst USING ColId */ +#line 10290 "preproc.y" + { + (yyval.str) = cat_str(10,mm_strdup("cycle"),(yyvsp[-8].str),mm_strdup("set"),(yyvsp[-6].str),mm_strdup("to"),(yyvsp[-4].str),mm_strdup("default"),(yyvsp[-2].str),mm_strdup("using"),(yyvsp[0].str)); +} +#line 49796 "preproc.c" + break; + + case 1665: /* opt_cycle_clause: CYCLE columnList SET ColId USING ColId */ +#line 10294 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("cycle"),(yyvsp[-4].str),mm_strdup("set"),(yyvsp[-2].str),mm_strdup("using"),(yyvsp[0].str)); +} +#line 49804 "preproc.c" + break; + + case 1666: /* opt_cycle_clause: %empty */ +#line 10298 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49811 "preproc.c" + break; + + case 1667: /* opt_with_clause: with_clause */ +#line 10305 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49819 "preproc.c" + break; + + case 1668: /* opt_with_clause: %empty */ +#line 10309 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49826 "preproc.c" + break; + + case 1669: /* into_clause: INTO OptTempTableName */ +#line 10316 "preproc.y" + { + FoundInto = 1; + (yyval.str)= cat2_str(mm_strdup("into"), (yyvsp[0].str)); + } +#line 49835 "preproc.c" + break; + + case 1670: /* into_clause: ecpg_into */ +#line 10320 "preproc.y" + { (yyval.str) = EMPTY; } +#line 49841 "preproc.c" + break; + + case 1671: /* into_clause: %empty */ +#line 10322 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49848 "preproc.c" + break; + + case 1672: /* OptTempTableName: TEMPORARY opt_table qualified_name */ +#line 10329 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("temporary"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49856 "preproc.c" + break; + + case 1673: /* OptTempTableName: TEMP opt_table qualified_name */ +#line 10333 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("temp"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49864 "preproc.c" + break; + + case 1674: /* OptTempTableName: LOCAL TEMPORARY opt_table qualified_name */ +#line 10337 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("local temporary"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49872 "preproc.c" + break; + + case 1675: /* OptTempTableName: LOCAL TEMP opt_table qualified_name */ +#line 10341 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("local temp"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49880 "preproc.c" + break; + + case 1676: /* OptTempTableName: GLOBAL TEMPORARY opt_table qualified_name */ +#line 10345 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("global temporary"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49888 "preproc.c" + break; + + case 1677: /* OptTempTableName: GLOBAL TEMP opt_table qualified_name */ +#line 10349 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("global temp"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49896 "preproc.c" + break; + + case 1678: /* OptTempTableName: UNLOGGED opt_table qualified_name */ +#line 10353 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("unlogged"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 49904 "preproc.c" + break; + + case 1679: /* OptTempTableName: TABLE qualified_name */ +#line 10357 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("table"),(yyvsp[0].str)); +} +#line 49912 "preproc.c" + break; + + case 1680: /* OptTempTableName: qualified_name */ +#line 10361 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49920 "preproc.c" + break; + + case 1681: /* opt_table: TABLE */ +#line 10369 "preproc.y" + { + (yyval.str) = mm_strdup("table"); +} +#line 49928 "preproc.c" + break; + + case 1682: /* opt_table: %empty */ +#line 10373 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49935 "preproc.c" + break; + + case 1683: /* set_quantifier: ALL */ +#line 10380 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 49943 "preproc.c" + break; + + case 1684: /* set_quantifier: DISTINCT */ +#line 10384 "preproc.y" + { + (yyval.str) = mm_strdup("distinct"); +} +#line 49951 "preproc.c" + break; + + case 1685: /* set_quantifier: %empty */ +#line 10388 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49958 "preproc.c" + break; + + case 1686: /* distinct_clause: DISTINCT */ +#line 10395 "preproc.y" + { + (yyval.str) = mm_strdup("distinct"); +} +#line 49966 "preproc.c" + break; + + case 1687: /* distinct_clause: DISTINCT ON '(' expr_list ')' */ +#line 10399 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("distinct on ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 49974 "preproc.c" + break; + + case 1688: /* opt_all_clause: ALL */ +#line 10407 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 49982 "preproc.c" + break; + + case 1689: /* opt_all_clause: %empty */ +#line 10411 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 49989 "preproc.c" + break; + + case 1690: /* opt_sort_clause: sort_clause */ +#line 10418 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 49997 "preproc.c" + break; + + case 1691: /* opt_sort_clause: %empty */ +#line 10422 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50004 "preproc.c" + break; + + case 1692: /* sort_clause: ORDER BY sortby_list */ +#line 10429 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("order by"),(yyvsp[0].str)); +} +#line 50012 "preproc.c" + break; + + case 1693: /* sortby_list: sortby */ +#line 10437 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50020 "preproc.c" + break; + + case 1694: /* sortby_list: sortby_list ',' sortby */ +#line 10441 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 50028 "preproc.c" + break; + + case 1695: /* sortby: a_expr USING qual_all_Op opt_nulls_order */ +#line 10449 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("using"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50036 "preproc.c" + break; + + case 1696: /* sortby: a_expr opt_asc_desc opt_nulls_order */ +#line 10453 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50044 "preproc.c" + break; + + case 1697: /* select_limit: limit_clause offset_clause */ +#line 10461 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50052 "preproc.c" + break; + + case 1698: /* select_limit: offset_clause limit_clause */ +#line 10465 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50060 "preproc.c" + break; + + case 1699: /* select_limit: limit_clause */ +#line 10469 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50068 "preproc.c" + break; + + case 1700: /* select_limit: offset_clause */ +#line 10473 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50076 "preproc.c" + break; + + case 1701: /* opt_select_limit: select_limit */ +#line 10481 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50084 "preproc.c" + break; + + case 1702: /* opt_select_limit: %empty */ +#line 10485 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50091 "preproc.c" + break; + + case 1703: /* limit_clause: LIMIT select_limit_value */ +#line 10492 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("limit"),(yyvsp[0].str)); +} +#line 50099 "preproc.c" + break; + + case 1704: /* limit_clause: LIMIT select_limit_value ',' select_offset_value */ +#line 10496 "preproc.y" + { + mmerror(PARSE_ERROR, ET_WARNING, "no longer supported LIMIT #,# syntax passed to server"); + (yyval.str) = cat_str(4, mm_strdup("limit"), (yyvsp[-2].str), mm_strdup(","), (yyvsp[0].str)); + } +#line 50108 "preproc.c" + break; + + case 1705: /* limit_clause: FETCH first_or_next select_fetch_first_value row_or_rows ONLY */ +#line 10501 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("fetch"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup("only")); +} +#line 50116 "preproc.c" + break; + + case 1706: /* limit_clause: FETCH first_or_next select_fetch_first_value row_or_rows WITH TIES */ +#line 10505 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("fetch"),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("with ties")); +} +#line 50124 "preproc.c" + break; + + case 1707: /* limit_clause: FETCH first_or_next row_or_rows ONLY */ +#line 10509 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("fetch"),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup("only")); +} +#line 50132 "preproc.c" + break; + + case 1708: /* limit_clause: FETCH first_or_next row_or_rows WITH TIES */ +#line 10513 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("fetch"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("with ties")); +} +#line 50140 "preproc.c" + break; + + case 1709: /* offset_clause: OFFSET select_offset_value */ +#line 10521 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("offset"),(yyvsp[0].str)); +} +#line 50148 "preproc.c" + break; + + case 1710: /* offset_clause: OFFSET select_fetch_first_value row_or_rows */ +#line 10525 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("offset"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50156 "preproc.c" + break; + + case 1711: /* select_limit_value: a_expr */ +#line 10533 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50164 "preproc.c" + break; + + case 1712: /* select_limit_value: ALL */ +#line 10537 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 50172 "preproc.c" + break; + + case 1713: /* select_offset_value: a_expr */ +#line 10545 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50180 "preproc.c" + break; + + case 1714: /* select_fetch_first_value: c_expr */ +#line 10553 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50188 "preproc.c" + break; + + case 1715: /* select_fetch_first_value: '+' I_or_F_const */ +#line 10557 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("+"),(yyvsp[0].str)); +} +#line 50196 "preproc.c" + break; + + case 1716: /* select_fetch_first_value: '-' I_or_F_const */ +#line 10561 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("-"),(yyvsp[0].str)); +} +#line 50204 "preproc.c" + break; + + case 1717: /* I_or_F_const: Iconst */ +#line 10569 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50212 "preproc.c" + break; + + case 1718: /* I_or_F_const: ecpg_fconst */ +#line 10573 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50220 "preproc.c" + break; + + case 1719: /* row_or_rows: ROW */ +#line 10581 "preproc.y" + { + (yyval.str) = mm_strdup("row"); +} +#line 50228 "preproc.c" + break; + + case 1720: /* row_or_rows: ROWS */ +#line 10585 "preproc.y" + { + (yyval.str) = mm_strdup("rows"); +} +#line 50236 "preproc.c" + break; + + case 1721: /* first_or_next: FIRST_P */ +#line 10593 "preproc.y" + { + (yyval.str) = mm_strdup("first"); +} +#line 50244 "preproc.c" + break; + + case 1722: /* first_or_next: NEXT */ +#line 10597 "preproc.y" + { + (yyval.str) = mm_strdup("next"); +} +#line 50252 "preproc.c" + break; + + case 1723: /* group_clause: GROUP_P BY set_quantifier group_by_list */ +#line 10605 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("group by"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50260 "preproc.c" + break; + + case 1724: /* group_clause: %empty */ +#line 10609 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50267 "preproc.c" + break; + + case 1725: /* group_by_list: group_by_item */ +#line 10616 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50275 "preproc.c" + break; + + case 1726: /* group_by_list: group_by_list ',' group_by_item */ +#line 10620 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 50283 "preproc.c" + break; + + case 1727: /* group_by_item: a_expr */ +#line 10628 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50291 "preproc.c" + break; + + case 1728: /* group_by_item: empty_grouping_set */ +#line 10632 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50299 "preproc.c" + break; + + case 1729: /* group_by_item: cube_clause */ +#line 10636 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50307 "preproc.c" + break; + + case 1730: /* group_by_item: rollup_clause */ +#line 10640 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50315 "preproc.c" + break; + + case 1731: /* group_by_item: grouping_sets_clause */ +#line 10644 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50323 "preproc.c" + break; + + case 1732: /* empty_grouping_set: '(' ')' */ +#line 10652 "preproc.y" + { + (yyval.str) = mm_strdup("( )"); +} +#line 50331 "preproc.c" + break; + + case 1733: /* rollup_clause: ROLLUP '(' expr_list ')' */ +#line 10660 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("rollup ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50339 "preproc.c" + break; + + case 1734: /* cube_clause: CUBE '(' expr_list ')' */ +#line 10668 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("cube ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50347 "preproc.c" + break; + + case 1735: /* grouping_sets_clause: GROUPING SETS '(' group_by_list ')' */ +#line 10676 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("grouping sets ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50355 "preproc.c" + break; + + case 1736: /* having_clause: HAVING a_expr */ +#line 10684 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("having"),(yyvsp[0].str)); +} +#line 50363 "preproc.c" + break; + + case 1737: /* having_clause: %empty */ +#line 10688 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50370 "preproc.c" + break; + + case 1738: /* for_locking_clause: for_locking_items */ +#line 10695 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50378 "preproc.c" + break; + + case 1739: /* for_locking_clause: FOR READ ONLY */ +#line 10699 "preproc.y" + { + (yyval.str) = mm_strdup("for read only"); +} +#line 50386 "preproc.c" + break; + + case 1740: /* opt_for_locking_clause: for_locking_clause */ +#line 10707 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50394 "preproc.c" + break; + + case 1741: /* opt_for_locking_clause: %empty */ +#line 10711 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50401 "preproc.c" + break; + + case 1742: /* for_locking_items: for_locking_item */ +#line 10718 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50409 "preproc.c" + break; + + case 1743: /* for_locking_items: for_locking_items for_locking_item */ +#line 10722 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50417 "preproc.c" + break; + + case 1744: /* for_locking_item: for_locking_strength locked_rels_list opt_nowait_or_skip */ +#line 10730 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50425 "preproc.c" + break; + + case 1745: /* for_locking_strength: FOR UPDATE */ +#line 10738 "preproc.y" + { + (yyval.str) = mm_strdup("for update"); +} +#line 50433 "preproc.c" + break; + + case 1746: /* for_locking_strength: FOR NO KEY UPDATE */ +#line 10742 "preproc.y" + { + (yyval.str) = mm_strdup("for no key update"); +} +#line 50441 "preproc.c" + break; + + case 1747: /* for_locking_strength: FOR SHARE */ +#line 10746 "preproc.y" + { + (yyval.str) = mm_strdup("for share"); +} +#line 50449 "preproc.c" + break; + + case 1748: /* for_locking_strength: FOR KEY SHARE */ +#line 10750 "preproc.y" + { + (yyval.str) = mm_strdup("for key share"); +} +#line 50457 "preproc.c" + break; + + case 1749: /* locked_rels_list: OF qualified_name_list */ +#line 10758 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("of"),(yyvsp[0].str)); +} +#line 50465 "preproc.c" + break; + + case 1750: /* locked_rels_list: %empty */ +#line 10762 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50472 "preproc.c" + break; + + case 1751: /* values_clause: VALUES '(' expr_list ')' */ +#line 10769 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("values ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50480 "preproc.c" + break; + + case 1752: /* values_clause: values_clause ',' '(' expr_list ')' */ +#line 10773 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-4].str),mm_strdup(", ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50488 "preproc.c" + break; + + case 1753: /* from_clause: FROM from_list */ +#line 10781 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("from"),(yyvsp[0].str)); +} +#line 50496 "preproc.c" + break; + + case 1754: /* from_clause: %empty */ +#line 10785 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50503 "preproc.c" + break; + + case 1755: /* from_list: table_ref */ +#line 10792 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50511 "preproc.c" + break; + + case 1756: /* from_list: from_list ',' table_ref */ +#line 10796 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 50519 "preproc.c" + break; + + case 1757: /* table_ref: relation_expr opt_alias_clause */ +#line 10804 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50527 "preproc.c" + break; + + case 1758: /* table_ref: relation_expr opt_alias_clause tablesample_clause */ +#line 10808 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50535 "preproc.c" + break; + + case 1759: /* table_ref: func_table func_alias_clause */ +#line 10812 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50543 "preproc.c" + break; + + case 1760: /* table_ref: LATERAL_P func_table func_alias_clause */ +#line 10816 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("lateral"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50551 "preproc.c" + break; + + case 1761: /* table_ref: xmltable opt_alias_clause */ +#line 10820 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50559 "preproc.c" + break; + + case 1762: /* table_ref: LATERAL_P xmltable opt_alias_clause */ +#line 10824 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("lateral"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50567 "preproc.c" + break; + + case 1763: /* table_ref: select_with_parens opt_alias_clause */ +#line 10828 "preproc.y" + { + if ((yyvsp[0].str) == NULL) + mmerror(PARSE_ERROR, ET_ERROR, "subquery in FROM must have an alias"); + + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50578 "preproc.c" + break; + + case 1764: /* table_ref: LATERAL_P select_with_parens opt_alias_clause */ +#line 10835 "preproc.y" + { + if ((yyvsp[0].str) == NULL) + mmerror(PARSE_ERROR, ET_ERROR, "subquery in FROM must have an alias"); + + (yyval.str) = cat_str(3,mm_strdup("lateral"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50589 "preproc.c" + break; + + case 1765: /* table_ref: joined_table */ +#line 10842 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50597 "preproc.c" + break; + + case 1766: /* table_ref: '(' joined_table ')' alias_clause */ +#line 10846 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 50605 "preproc.c" + break; + + case 1767: /* joined_table: '(' joined_table ')' */ +#line 10854 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50613 "preproc.c" + break; + + case 1768: /* joined_table: table_ref CROSS JOIN table_ref */ +#line 10858 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-3].str),mm_strdup("cross join"),(yyvsp[0].str)); +} +#line 50621 "preproc.c" + break; + + case 1769: /* joined_table: table_ref join_type JOIN table_ref join_qual */ +#line 10862 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("join"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50629 "preproc.c" + break; + + case 1770: /* joined_table: table_ref JOIN table_ref join_qual */ +#line 10866 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("join"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50637 "preproc.c" + break; + + case 1771: /* joined_table: table_ref NATURAL join_type JOIN table_ref */ +#line 10870 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("natural"),(yyvsp[-2].str),mm_strdup("join"),(yyvsp[0].str)); +} +#line 50645 "preproc.c" + break; + + case 1772: /* joined_table: table_ref NATURAL JOIN table_ref */ +#line 10874 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-3].str),mm_strdup("natural join"),(yyvsp[0].str)); +} +#line 50653 "preproc.c" + break; + + case 1773: /* alias_clause: AS ColId '(' name_list ')' */ +#line 10882 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("as"),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50661 "preproc.c" + break; + + case 1774: /* alias_clause: AS ColId */ +#line 10886 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("as"),(yyvsp[0].str)); +} +#line 50669 "preproc.c" + break; + + case 1775: /* alias_clause: ColId '(' name_list ')' */ +#line 10890 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50677 "preproc.c" + break; + + case 1776: /* alias_clause: ColId */ +#line 10894 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50685 "preproc.c" + break; + + case 1777: /* opt_alias_clause: alias_clause */ +#line 10902 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50693 "preproc.c" + break; + + case 1778: /* opt_alias_clause: %empty */ +#line 10906 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50700 "preproc.c" + break; + + case 1779: /* opt_alias_clause_for_join_using: AS ColId */ +#line 10913 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("as"),(yyvsp[0].str)); +} +#line 50708 "preproc.c" + break; + + case 1780: /* opt_alias_clause_for_join_using: %empty */ +#line 10917 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50715 "preproc.c" + break; + + case 1781: /* func_alias_clause: alias_clause */ +#line 10924 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50723 "preproc.c" + break; + + case 1782: /* func_alias_clause: AS '(' TableFuncElementList ')' */ +#line 10928 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("as ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50731 "preproc.c" + break; + + case 1783: /* func_alias_clause: AS ColId '(' TableFuncElementList ')' */ +#line 10932 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("as"),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50739 "preproc.c" + break; + + case 1784: /* func_alias_clause: ColId '(' TableFuncElementList ')' */ +#line 10936 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50747 "preproc.c" + break; + + case 1785: /* func_alias_clause: %empty */ +#line 10940 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50754 "preproc.c" + break; + + case 1786: /* join_type: FULL opt_outer */ +#line 10947 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("full"),(yyvsp[0].str)); +} +#line 50762 "preproc.c" + break; + + case 1787: /* join_type: LEFT opt_outer */ +#line 10951 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("left"),(yyvsp[0].str)); +} +#line 50770 "preproc.c" + break; + + case 1788: /* join_type: RIGHT opt_outer */ +#line 10955 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("right"),(yyvsp[0].str)); +} +#line 50778 "preproc.c" + break; + + case 1789: /* join_type: INNER_P */ +#line 10959 "preproc.y" + { + (yyval.str) = mm_strdup("inner"); +} +#line 50786 "preproc.c" + break; + + case 1790: /* opt_outer: OUTER_P */ +#line 10967 "preproc.y" + { + (yyval.str) = mm_strdup("outer"); +} +#line 50794 "preproc.c" + break; + + case 1791: /* opt_outer: %empty */ +#line 10971 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50801 "preproc.c" + break; + + case 1792: /* join_qual: USING '(' name_list ')' opt_alias_clause_for_join_using */ +#line 10978 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("using ("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 50809 "preproc.c" + break; + + case 1793: /* join_qual: ON a_expr */ +#line 10982 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("on"),(yyvsp[0].str)); +} +#line 50817 "preproc.c" + break; + + case 1794: /* relation_expr: qualified_name */ +#line 10990 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50825 "preproc.c" + break; + + case 1795: /* relation_expr: qualified_name '*' */ +#line 10994 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("*")); +} +#line 50833 "preproc.c" + break; + + case 1796: /* relation_expr: ONLY qualified_name */ +#line 10998 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("only"),(yyvsp[0].str)); +} +#line 50841 "preproc.c" + break; + + case 1797: /* relation_expr: ONLY '(' qualified_name ')' */ +#line 11002 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("only ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50849 "preproc.c" + break; + + case 1798: /* relation_expr_list: relation_expr */ +#line 11010 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50857 "preproc.c" + break; + + case 1799: /* relation_expr_list: relation_expr_list ',' relation_expr */ +#line 11014 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 50865 "preproc.c" + break; + + case 1800: /* relation_expr_opt_alias: relation_expr */ +#line 11022 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50873 "preproc.c" + break; + + case 1801: /* relation_expr_opt_alias: relation_expr ColId */ +#line 11026 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50881 "preproc.c" + break; + + case 1802: /* relation_expr_opt_alias: relation_expr AS ColId */ +#line 11030 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("as"),(yyvsp[0].str)); +} +#line 50889 "preproc.c" + break; + + case 1803: /* tablesample_clause: TABLESAMPLE func_name '(' expr_list ')' opt_repeatable_clause */ +#line 11038 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("tablesample"),(yyvsp[-4].str),mm_strdup("("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 50897 "preproc.c" + break; + + case 1804: /* opt_repeatable_clause: REPEATABLE '(' a_expr ')' */ +#line 11046 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("repeatable ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50905 "preproc.c" + break; + + case 1805: /* opt_repeatable_clause: %empty */ +#line 11050 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50912 "preproc.c" + break; + + case 1806: /* func_table: func_expr_windowless opt_ordinality */ +#line 11057 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50920 "preproc.c" + break; + + case 1807: /* func_table: ROWS FROM '(' rowsfrom_list ')' opt_ordinality */ +#line 11061 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("rows from ("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 50928 "preproc.c" + break; + + case 1808: /* rowsfrom_item: func_expr_windowless opt_col_def_list */ +#line 11069 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 50936 "preproc.c" + break; + + case 1809: /* rowsfrom_list: rowsfrom_item */ +#line 11077 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 50944 "preproc.c" + break; + + case 1810: /* rowsfrom_list: rowsfrom_list ',' rowsfrom_item */ +#line 11081 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 50952 "preproc.c" + break; + + case 1811: /* opt_col_def_list: AS '(' TableFuncElementList ')' */ +#line 11089 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("as ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 50960 "preproc.c" + break; + + case 1812: /* opt_col_def_list: %empty */ +#line 11093 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50967 "preproc.c" + break; + + case 1813: /* opt_ordinality: WITH_LA ORDINALITY */ +#line 11100 "preproc.y" + { + (yyval.str) = mm_strdup("with ordinality"); +} +#line 50975 "preproc.c" + break; + + case 1814: /* opt_ordinality: %empty */ +#line 11104 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50982 "preproc.c" + break; + + case 1815: /* where_clause: WHERE a_expr */ +#line 11111 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("where"),(yyvsp[0].str)); +} +#line 50990 "preproc.c" + break; + + case 1816: /* where_clause: %empty */ +#line 11115 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 50997 "preproc.c" + break; + + case 1817: /* where_or_current_clause: WHERE a_expr */ +#line 11122 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("where"),(yyvsp[0].str)); +} +#line 51005 "preproc.c" + break; + + case 1818: /* where_or_current_clause: WHERE CURRENT_P OF cursor_name */ +#line 11126 "preproc.y" + { + char *cursor_marker = (yyvsp[0].str)[0] == ':' ? mm_strdup("$0") : (yyvsp[0].str); + (yyval.str) = cat_str(2,mm_strdup("where current of"), cursor_marker); + } +#line 51014 "preproc.c" + break; + + case 1819: /* where_or_current_clause: %empty */ +#line 11131 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 51021 "preproc.c" + break; + + case 1820: /* OptTableFuncElementList: TableFuncElementList */ +#line 11138 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51029 "preproc.c" + break; + + case 1821: /* OptTableFuncElementList: %empty */ +#line 11142 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 51036 "preproc.c" + break; + + case 1822: /* TableFuncElementList: TableFuncElement */ +#line 11149 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51044 "preproc.c" + break; + + case 1823: /* TableFuncElementList: TableFuncElementList ',' TableFuncElement */ +#line 11153 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 51052 "preproc.c" + break; + + case 1824: /* TableFuncElement: ColId Typename opt_collate_clause */ +#line 11161 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 51060 "preproc.c" + break; + + case 1825: /* xmltable: XMLTABLE '(' c_expr xmlexists_argument COLUMNS xmltable_column_list ')' */ +#line 11169 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("xmltable ("),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("columns"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 51068 "preproc.c" + break; + + case 1826: /* xmltable: XMLTABLE '(' XMLNAMESPACES '(' xml_namespace_list ')' ',' c_expr xmlexists_argument COLUMNS xmltable_column_list ')' */ +#line 11173 "preproc.y" + { + (yyval.str) = cat_str(8,mm_strdup("xmltable ( xmlnamespaces ("),(yyvsp[-7].str),mm_strdup(") ,"),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("columns"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 51076 "preproc.c" + break; + + case 1827: /* xmltable_column_list: xmltable_column_el */ +#line 11181 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51084 "preproc.c" + break; + + case 1828: /* xmltable_column_list: xmltable_column_list ',' xmltable_column_el */ +#line 11185 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 51092 "preproc.c" + break; + + case 1829: /* xmltable_column_el: ColId Typename */ +#line 11193 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 51100 "preproc.c" + break; + + case 1830: /* xmltable_column_el: ColId Typename xmltable_column_option_list */ +#line 11197 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 51108 "preproc.c" + break; + + case 1831: /* xmltable_column_el: ColId FOR ORDINALITY */ +#line 11201 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("for ordinality")); +} +#line 51116 "preproc.c" + break; + + case 1832: /* xmltable_column_option_list: xmltable_column_option_el */ +#line 11209 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51124 "preproc.c" + break; + + case 1833: /* xmltable_column_option_list: xmltable_column_option_list xmltable_column_option_el */ +#line 11213 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 51132 "preproc.c" + break; + + case 1834: /* xmltable_column_option_el: ecpg_ident b_expr */ +#line 11221 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 51140 "preproc.c" + break; + + case 1835: /* xmltable_column_option_el: DEFAULT b_expr */ +#line 11225 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("default"),(yyvsp[0].str)); +} +#line 51148 "preproc.c" + break; + + case 1836: /* xmltable_column_option_el: NOT NULL_P */ +#line 11229 "preproc.y" + { + (yyval.str) = mm_strdup("not null"); +} +#line 51156 "preproc.c" + break; + + case 1837: /* xmltable_column_option_el: NULL_P */ +#line 11233 "preproc.y" + { + (yyval.str) = mm_strdup("null"); +} +#line 51164 "preproc.c" + break; + + case 1838: /* xml_namespace_list: xml_namespace_el */ +#line 11241 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51172 "preproc.c" + break; + + case 1839: /* xml_namespace_list: xml_namespace_list ',' xml_namespace_el */ +#line 11245 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 51180 "preproc.c" + break; + + case 1840: /* xml_namespace_el: b_expr AS ColLabel */ +#line 11253 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("as"),(yyvsp[0].str)); +} +#line 51188 "preproc.c" + break; + + case 1841: /* xml_namespace_el: DEFAULT b_expr */ +#line 11257 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("default"),(yyvsp[0].str)); +} +#line 51196 "preproc.c" + break; + + case 1842: /* Typename: SimpleTypename opt_array_bounds */ +#line 11265 "preproc.y" + { (yyval.str) = cat2_str((yyvsp[-1].str), (yyvsp[0].index).str); } +#line 51202 "preproc.c" + break; + + case 1843: /* Typename: SETOF SimpleTypename opt_array_bounds */ +#line 11267 "preproc.y" + { (yyval.str) = cat_str(3, mm_strdup("setof"), (yyvsp[-1].str), (yyvsp[0].index).str); } +#line 51208 "preproc.c" + break; + + case 1844: /* Typename: SimpleTypename ARRAY '[' Iconst ']' */ +#line 11269 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-4].str),mm_strdup("array ["),(yyvsp[-1].str),mm_strdup("]")); +} +#line 51216 "preproc.c" + break; + + case 1845: /* Typename: SETOF SimpleTypename ARRAY '[' Iconst ']' */ +#line 11273 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("setof"),(yyvsp[-4].str),mm_strdup("array ["),(yyvsp[-1].str),mm_strdup("]")); +} +#line 51224 "preproc.c" + break; + + case 1846: /* Typename: SimpleTypename ARRAY */ +#line 11277 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("array")); +} +#line 51232 "preproc.c" + break; + + case 1847: /* Typename: SETOF SimpleTypename ARRAY */ +#line 11281 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("setof"),(yyvsp[-1].str),mm_strdup("array")); +} +#line 51240 "preproc.c" + break; + + case 1848: /* opt_array_bounds: opt_array_bounds '[' ']' */ +#line 11289 "preproc.y" + { + (yyval.index).index1 = (yyvsp[-2].index).index1; + (yyval.index).index2 = (yyvsp[-2].index).index2; + if (strcmp((yyval.index).index1, "-1") == 0) + (yyval.index).index1 = mm_strdup("0"); + else if (strcmp((yyvsp[-2].index).index2, "-1") == 0) + (yyval.index).index2 = mm_strdup("0"); + (yyval.index).str = cat_str(2, (yyvsp[-2].index).str, mm_strdup("[]")); + } +#line 51254 "preproc.c" + break; + + case 1849: /* opt_array_bounds: opt_array_bounds '[' Iresult ']' */ +#line 11299 "preproc.y" + { + (yyval.index).index1 = (yyvsp[-3].index).index1; + (yyval.index).index2 = (yyvsp[-3].index).index2; + if (strcmp((yyvsp[-3].index).index1, "-1") == 0) + (yyval.index).index1 = mm_strdup((yyvsp[-1].str)); + else if (strcmp((yyvsp[-3].index).index2, "-1") == 0) + (yyval.index).index2 = mm_strdup((yyvsp[-1].str)); + (yyval.index).str = cat_str(4, (yyvsp[-3].index).str, mm_strdup("["), (yyvsp[-1].str), mm_strdup("]")); + } +#line 51268 "preproc.c" + break; + + case 1850: /* opt_array_bounds: %empty */ +#line 11309 "preproc.y" + { + (yyval.index).index1 = mm_strdup("-1"); + (yyval.index).index2 = mm_strdup("-1"); + (yyval.index).str= EMPTY; + } +#line 51278 "preproc.c" + break; + + case 1851: /* SimpleTypename: GenericType */ +#line 11319 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51286 "preproc.c" + break; + + case 1852: /* SimpleTypename: Numeric */ +#line 11323 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51294 "preproc.c" + break; + + case 1853: /* SimpleTypename: Bit */ +#line 11327 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51302 "preproc.c" + break; + + case 1854: /* SimpleTypename: Character */ +#line 11331 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51310 "preproc.c" + break; + + case 1855: /* SimpleTypename: ConstDatetime */ +#line 11335 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51318 "preproc.c" + break; + + case 1856: /* SimpleTypename: ConstInterval opt_interval */ +#line 11339 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 51326 "preproc.c" + break; + + case 1857: /* SimpleTypename: ConstInterval '(' Iconst ')' */ +#line 11343 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 51334 "preproc.c" + break; + + case 1858: /* ConstTypename: Numeric */ +#line 11351 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51342 "preproc.c" + break; + + case 1859: /* ConstTypename: ConstBit */ +#line 11355 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51350 "preproc.c" + break; + + case 1860: /* ConstTypename: ConstCharacter */ +#line 11359 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51358 "preproc.c" + break; + + case 1861: /* ConstTypename: ConstDatetime */ +#line 11363 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51366 "preproc.c" + break; + + case 1862: /* GenericType: type_function_name opt_type_modifiers */ +#line 11371 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 51374 "preproc.c" + break; + + case 1863: /* GenericType: type_function_name attrs opt_type_modifiers */ +#line 11375 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 51382 "preproc.c" + break; + + case 1864: /* opt_type_modifiers: '(' expr_list ')' */ +#line 11383 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 51390 "preproc.c" + break; + + case 1865: /* opt_type_modifiers: %empty */ +#line 11387 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 51397 "preproc.c" + break; + + case 1866: /* Numeric: INT_P */ +#line 11394 "preproc.y" + { + (yyval.str) = mm_strdup("int"); +} +#line 51405 "preproc.c" + break; + + case 1867: /* Numeric: INTEGER */ +#line 11398 "preproc.y" + { + (yyval.str) = mm_strdup("integer"); +} +#line 51413 "preproc.c" + break; + + case 1868: /* Numeric: SMALLINT */ +#line 11402 "preproc.y" + { + (yyval.str) = mm_strdup("smallint"); +} +#line 51421 "preproc.c" + break; + + case 1869: /* Numeric: BIGINT */ +#line 11406 "preproc.y" + { + (yyval.str) = mm_strdup("bigint"); +} +#line 51429 "preproc.c" + break; + + case 1870: /* Numeric: REAL */ +#line 11410 "preproc.y" + { + (yyval.str) = mm_strdup("real"); +} +#line 51437 "preproc.c" + break; + + case 1871: /* Numeric: FLOAT_P opt_float */ +#line 11414 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("float"),(yyvsp[0].str)); +} +#line 51445 "preproc.c" + break; + + case 1872: /* Numeric: DOUBLE_P PRECISION */ +#line 11418 "preproc.y" + { + (yyval.str) = mm_strdup("double precision"); +} +#line 51453 "preproc.c" + break; + + case 1873: /* Numeric: DECIMAL_P opt_type_modifiers */ +#line 11422 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("decimal"),(yyvsp[0].str)); +} +#line 51461 "preproc.c" + break; + + case 1874: /* Numeric: DEC opt_type_modifiers */ +#line 11426 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("dec"),(yyvsp[0].str)); +} +#line 51469 "preproc.c" + break; + + case 1875: /* Numeric: NUMERIC opt_type_modifiers */ +#line 11430 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("numeric"),(yyvsp[0].str)); +} +#line 51477 "preproc.c" + break; + + case 1876: /* Numeric: BOOLEAN_P */ +#line 11434 "preproc.y" + { + (yyval.str) = mm_strdup("boolean"); +} +#line 51485 "preproc.c" + break; + + case 1877: /* opt_float: '(' Iconst ')' */ +#line 11442 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 51493 "preproc.c" + break; + + case 1878: /* opt_float: %empty */ +#line 11446 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 51500 "preproc.c" + break; + + case 1879: /* Bit: BitWithLength */ +#line 11453 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51508 "preproc.c" + break; + + case 1880: /* Bit: BitWithoutLength */ +#line 11457 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51516 "preproc.c" + break; + + case 1881: /* ConstBit: BitWithLength */ +#line 11465 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51524 "preproc.c" + break; + + case 1882: /* ConstBit: BitWithoutLength */ +#line 11469 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51532 "preproc.c" + break; + + case 1883: /* BitWithLength: BIT opt_varying '(' expr_list ')' */ +#line 11477 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("bit"),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 51540 "preproc.c" + break; + + case 1884: /* BitWithoutLength: BIT opt_varying */ +#line 11485 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("bit"),(yyvsp[0].str)); +} +#line 51548 "preproc.c" + break; + + case 1885: /* Character: CharacterWithLength */ +#line 11493 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51556 "preproc.c" + break; + + case 1886: /* Character: CharacterWithoutLength */ +#line 11497 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51564 "preproc.c" + break; + + case 1887: /* ConstCharacter: CharacterWithLength */ +#line 11505 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51572 "preproc.c" + break; + + case 1888: /* ConstCharacter: CharacterWithoutLength */ +#line 11509 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51580 "preproc.c" + break; + + case 1889: /* CharacterWithLength: character '(' Iconst ')' */ +#line 11517 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 51588 "preproc.c" + break; + + case 1890: /* CharacterWithoutLength: character */ +#line 11525 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51596 "preproc.c" + break; + + case 1891: /* character: CHARACTER opt_varying */ +#line 11533 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("character"),(yyvsp[0].str)); +} +#line 51604 "preproc.c" + break; + + case 1892: /* character: CHAR_P opt_varying */ +#line 11537 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("char"),(yyvsp[0].str)); +} +#line 51612 "preproc.c" + break; + + case 1893: /* character: VARCHAR */ +#line 11541 "preproc.y" + { + (yyval.str) = mm_strdup("varchar"); +} +#line 51620 "preproc.c" + break; + + case 1894: /* character: NATIONAL CHARACTER opt_varying */ +#line 11545 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("national character"),(yyvsp[0].str)); +} +#line 51628 "preproc.c" + break; + + case 1895: /* character: NATIONAL CHAR_P opt_varying */ +#line 11549 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("national char"),(yyvsp[0].str)); +} +#line 51636 "preproc.c" + break; + + case 1896: /* character: NCHAR opt_varying */ +#line 11553 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("nchar"),(yyvsp[0].str)); +} +#line 51644 "preproc.c" + break; + + case 1897: /* opt_varying: VARYING */ +#line 11561 "preproc.y" + { + (yyval.str) = mm_strdup("varying"); +} +#line 51652 "preproc.c" + break; + + case 1898: /* opt_varying: %empty */ +#line 11565 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 51659 "preproc.c" + break; + + case 1899: /* ConstDatetime: TIMESTAMP '(' Iconst ')' opt_timezone */ +#line 11572 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("timestamp ("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 51667 "preproc.c" + break; + + case 1900: /* ConstDatetime: TIMESTAMP opt_timezone */ +#line 11576 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("timestamp"),(yyvsp[0].str)); +} +#line 51675 "preproc.c" + break; + + case 1901: /* ConstDatetime: TIME '(' Iconst ')' opt_timezone */ +#line 11580 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("time ("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 51683 "preproc.c" + break; + + case 1902: /* ConstDatetime: TIME opt_timezone */ +#line 11584 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("time"),(yyvsp[0].str)); +} +#line 51691 "preproc.c" + break; + + case 1903: /* ConstInterval: INTERVAL */ +#line 11592 "preproc.y" + { + (yyval.str) = mm_strdup("interval"); +} +#line 51699 "preproc.c" + break; + + case 1904: /* opt_timezone: WITH_LA TIME ZONE */ +#line 11600 "preproc.y" + { + (yyval.str) = mm_strdup("with time zone"); +} +#line 51707 "preproc.c" + break; + + case 1905: /* opt_timezone: WITHOUT TIME ZONE */ +#line 11604 "preproc.y" + { + (yyval.str) = mm_strdup("without time zone"); +} +#line 51715 "preproc.c" + break; + + case 1906: /* opt_timezone: %empty */ +#line 11608 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 51722 "preproc.c" + break; + + case 1907: /* opt_interval: YEAR_P */ +#line 11615 "preproc.y" + { + (yyval.str) = mm_strdup("year"); +} +#line 51730 "preproc.c" + break; + + case 1908: /* opt_interval: MONTH_P */ +#line 11619 "preproc.y" + { + (yyval.str) = mm_strdup("month"); +} +#line 51738 "preproc.c" + break; + + case 1909: /* opt_interval: DAY_P */ +#line 11623 "preproc.y" + { + (yyval.str) = mm_strdup("day"); +} +#line 51746 "preproc.c" + break; + + case 1910: /* opt_interval: HOUR_P */ +#line 11627 "preproc.y" + { + (yyval.str) = mm_strdup("hour"); +} +#line 51754 "preproc.c" + break; + + case 1911: /* opt_interval: MINUTE_P */ +#line 11631 "preproc.y" + { + (yyval.str) = mm_strdup("minute"); +} +#line 51762 "preproc.c" + break; + + case 1912: /* opt_interval: interval_second */ +#line 11635 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51770 "preproc.c" + break; + + case 1913: /* opt_interval: YEAR_P TO MONTH_P */ +#line 11639 "preproc.y" + { + (yyval.str) = mm_strdup("year to month"); +} +#line 51778 "preproc.c" + break; + + case 1914: /* opt_interval: DAY_P TO HOUR_P */ +#line 11643 "preproc.y" + { + (yyval.str) = mm_strdup("day to hour"); +} +#line 51786 "preproc.c" + break; + + case 1915: /* opt_interval: DAY_P TO MINUTE_P */ +#line 11647 "preproc.y" + { + (yyval.str) = mm_strdup("day to minute"); +} +#line 51794 "preproc.c" + break; + + case 1916: /* opt_interval: DAY_P TO interval_second */ +#line 11651 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("day to"),(yyvsp[0].str)); +} +#line 51802 "preproc.c" + break; + + case 1917: /* opt_interval: HOUR_P TO MINUTE_P */ +#line 11655 "preproc.y" + { + (yyval.str) = mm_strdup("hour to minute"); +} +#line 51810 "preproc.c" + break; + + case 1918: /* opt_interval: HOUR_P TO interval_second */ +#line 11659 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("hour to"),(yyvsp[0].str)); +} +#line 51818 "preproc.c" + break; + + case 1919: /* opt_interval: MINUTE_P TO interval_second */ +#line 11663 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("minute to"),(yyvsp[0].str)); +} +#line 51826 "preproc.c" + break; + + case 1920: /* opt_interval: %empty */ +#line 11667 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 51833 "preproc.c" + break; + + case 1921: /* interval_second: SECOND_P */ +#line 11674 "preproc.y" + { + (yyval.str) = mm_strdup("second"); +} +#line 51841 "preproc.c" + break; + + case 1922: /* interval_second: SECOND_P '(' Iconst ')' */ +#line 11678 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("second ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 51849 "preproc.c" + break; + + case 1923: /* a_expr: c_expr */ +#line 11686 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 51857 "preproc.c" + break; + + case 1924: /* a_expr: a_expr TYPECAST Typename */ +#line 11690 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("::"),(yyvsp[0].str)); +} +#line 51865 "preproc.c" + break; + + case 1925: /* a_expr: a_expr COLLATE any_name */ +#line 11694 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("collate"),(yyvsp[0].str)); +} +#line 51873 "preproc.c" + break; + + case 1926: /* a_expr: a_expr AT TIME ZONE a_expr */ +#line 11698 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-4].str),mm_strdup("at time zone"),(yyvsp[0].str)); +} +#line 51881 "preproc.c" + break; + + case 1927: /* a_expr: '+' a_expr */ +#line 11702 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("+"),(yyvsp[0].str)); +} +#line 51889 "preproc.c" + break; + + case 1928: /* a_expr: '-' a_expr */ +#line 11706 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("-"),(yyvsp[0].str)); +} +#line 51897 "preproc.c" + break; + + case 1929: /* a_expr: a_expr '+' a_expr */ +#line 11710 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("+"),(yyvsp[0].str)); +} +#line 51905 "preproc.c" + break; + + case 1930: /* a_expr: a_expr '-' a_expr */ +#line 11714 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("-"),(yyvsp[0].str)); +} +#line 51913 "preproc.c" + break; + + case 1931: /* a_expr: a_expr '*' a_expr */ +#line 11718 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("*"),(yyvsp[0].str)); +} +#line 51921 "preproc.c" + break; + + case 1932: /* a_expr: a_expr '/' a_expr */ +#line 11722 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("/"),(yyvsp[0].str)); +} +#line 51929 "preproc.c" + break; + + case 1933: /* a_expr: a_expr '%' a_expr */ +#line 11726 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("%"),(yyvsp[0].str)); +} +#line 51937 "preproc.c" + break; + + case 1934: /* a_expr: a_expr '^' a_expr */ +#line 11730 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("^"),(yyvsp[0].str)); +} +#line 51945 "preproc.c" + break; + + case 1935: /* a_expr: a_expr '<' a_expr */ +#line 11734 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("<"),(yyvsp[0].str)); +} +#line 51953 "preproc.c" + break; + + case 1936: /* a_expr: a_expr '>' a_expr */ +#line 11738 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(">"),(yyvsp[0].str)); +} +#line 51961 "preproc.c" + break; + + case 1937: /* a_expr: a_expr '=' a_expr */ +#line 11742 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("="),(yyvsp[0].str)); +} +#line 51969 "preproc.c" + break; + + case 1938: /* a_expr: a_expr LESS_EQUALS a_expr */ +#line 11746 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("<="),(yyvsp[0].str)); +} +#line 51977 "preproc.c" + break; + + case 1939: /* a_expr: a_expr GREATER_EQUALS a_expr */ +#line 11750 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(">="),(yyvsp[0].str)); +} +#line 51985 "preproc.c" + break; + + case 1940: /* a_expr: a_expr NOT_EQUALS a_expr */ +#line 11754 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("<>"),(yyvsp[0].str)); +} +#line 51993 "preproc.c" + break; + + case 1941: /* a_expr: a_expr qual_Op a_expr */ +#line 11758 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 52001 "preproc.c" + break; + + case 1942: /* a_expr: qual_Op a_expr */ +#line 11762 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 52009 "preproc.c" + break; + + case 1943: /* a_expr: a_expr AND a_expr */ +#line 11766 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("and"),(yyvsp[0].str)); +} +#line 52017 "preproc.c" + break; + + case 1944: /* a_expr: a_expr OR a_expr */ +#line 11770 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("or"),(yyvsp[0].str)); +} +#line 52025 "preproc.c" + break; + + case 1945: /* a_expr: NOT a_expr */ +#line 11774 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("not"),(yyvsp[0].str)); +} +#line 52033 "preproc.c" + break; + + case 1946: /* a_expr: NOT_LA a_expr */ +#line 11778 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("not"),(yyvsp[0].str)); +} +#line 52041 "preproc.c" + break; + + case 1947: /* a_expr: a_expr LIKE a_expr */ +#line 11782 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("like"),(yyvsp[0].str)); +} +#line 52049 "preproc.c" + break; + + case 1948: /* a_expr: a_expr LIKE a_expr ESCAPE a_expr */ +#line 11786 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("like"),(yyvsp[-2].str),mm_strdup("escape"),(yyvsp[0].str)); +} +#line 52057 "preproc.c" + break; + + case 1949: /* a_expr: a_expr NOT_LA LIKE a_expr */ +#line 11790 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-3].str),mm_strdup("not like"),(yyvsp[0].str)); +} +#line 52065 "preproc.c" + break; + + case 1950: /* a_expr: a_expr NOT_LA LIKE a_expr ESCAPE a_expr */ +#line 11794 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-5].str),mm_strdup("not like"),(yyvsp[-2].str),mm_strdup("escape"),(yyvsp[0].str)); +} +#line 52073 "preproc.c" + break; + + case 1951: /* a_expr: a_expr ILIKE a_expr */ +#line 11798 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("ilike"),(yyvsp[0].str)); +} +#line 52081 "preproc.c" + break; + + case 1952: /* a_expr: a_expr ILIKE a_expr ESCAPE a_expr */ +#line 11802 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("ilike"),(yyvsp[-2].str),mm_strdup("escape"),(yyvsp[0].str)); +} +#line 52089 "preproc.c" + break; + + case 1953: /* a_expr: a_expr NOT_LA ILIKE a_expr */ +#line 11806 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-3].str),mm_strdup("not ilike"),(yyvsp[0].str)); +} +#line 52097 "preproc.c" + break; + + case 1954: /* a_expr: a_expr NOT_LA ILIKE a_expr ESCAPE a_expr */ +#line 11810 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-5].str),mm_strdup("not ilike"),(yyvsp[-2].str),mm_strdup("escape"),(yyvsp[0].str)); +} +#line 52105 "preproc.c" + break; + + case 1955: /* a_expr: a_expr SIMILAR TO a_expr */ +#line 11814 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-3].str),mm_strdup("similar to"),(yyvsp[0].str)); +} +#line 52113 "preproc.c" + break; + + case 1956: /* a_expr: a_expr SIMILAR TO a_expr ESCAPE a_expr */ +#line 11818 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-5].str),mm_strdup("similar to"),(yyvsp[-2].str),mm_strdup("escape"),(yyvsp[0].str)); +} +#line 52121 "preproc.c" + break; + + case 1957: /* a_expr: a_expr NOT_LA SIMILAR TO a_expr */ +#line 11822 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-4].str),mm_strdup("not similar to"),(yyvsp[0].str)); +} +#line 52129 "preproc.c" + break; + + case 1958: /* a_expr: a_expr NOT_LA SIMILAR TO a_expr ESCAPE a_expr */ +#line 11826 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-6].str),mm_strdup("not similar to"),(yyvsp[-2].str),mm_strdup("escape"),(yyvsp[0].str)); +} +#line 52137 "preproc.c" + break; + + case 1959: /* a_expr: a_expr IS NULL_P */ +#line 11830 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("is null")); +} +#line 52145 "preproc.c" + break; + + case 1960: /* a_expr: a_expr ISNULL */ +#line 11834 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("isnull")); +} +#line 52153 "preproc.c" + break; + + case 1961: /* a_expr: a_expr IS NOT NULL_P */ +#line 11838 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-3].str),mm_strdup("is not null")); +} +#line 52161 "preproc.c" + break; + + case 1962: /* a_expr: a_expr NOTNULL */ +#line 11842 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("notnull")); +} +#line 52169 "preproc.c" + break; + + case 1963: /* a_expr: row OVERLAPS row */ +#line 11846 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("overlaps"),(yyvsp[0].str)); +} +#line 52177 "preproc.c" + break; + + case 1964: /* a_expr: a_expr IS TRUE_P */ +#line 11850 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("is true")); +} +#line 52185 "preproc.c" + break; + + case 1965: /* a_expr: a_expr IS NOT TRUE_P */ +#line 11854 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-3].str),mm_strdup("is not true")); +} +#line 52193 "preproc.c" + break; + + case 1966: /* a_expr: a_expr IS FALSE_P */ +#line 11858 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("is false")); +} +#line 52201 "preproc.c" + break; + + case 1967: /* a_expr: a_expr IS NOT FALSE_P */ +#line 11862 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-3].str),mm_strdup("is not false")); +} +#line 52209 "preproc.c" + break; + + case 1968: /* a_expr: a_expr IS UNKNOWN */ +#line 11866 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("is unknown")); +} +#line 52217 "preproc.c" + break; + + case 1969: /* a_expr: a_expr IS NOT UNKNOWN */ +#line 11870 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-3].str),mm_strdup("is not unknown")); +} +#line 52225 "preproc.c" + break; + + case 1970: /* a_expr: a_expr IS DISTINCT FROM a_expr */ +#line 11874 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-4].str),mm_strdup("is distinct from"),(yyvsp[0].str)); +} +#line 52233 "preproc.c" + break; + + case 1971: /* a_expr: a_expr IS NOT DISTINCT FROM a_expr */ +#line 11878 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-5].str),mm_strdup("is not distinct from"),(yyvsp[0].str)); +} +#line 52241 "preproc.c" + break; + + case 1972: /* a_expr: a_expr BETWEEN opt_asymmetric b_expr AND a_expr */ +#line 11882 "preproc.y" + { + (yyval.str) = cat_str(6,(yyvsp[-5].str),mm_strdup("between"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("and"),(yyvsp[0].str)); +} +#line 52249 "preproc.c" + break; + + case 1973: /* a_expr: a_expr NOT_LA BETWEEN opt_asymmetric b_expr AND a_expr */ +#line 11886 "preproc.y" + { + (yyval.str) = cat_str(6,(yyvsp[-6].str),mm_strdup("not between"),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup("and"),(yyvsp[0].str)); +} +#line 52257 "preproc.c" + break; + + case 1974: /* a_expr: a_expr BETWEEN SYMMETRIC b_expr AND a_expr */ +#line 11890 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-5].str),mm_strdup("between symmetric"),(yyvsp[-2].str),mm_strdup("and"),(yyvsp[0].str)); +} +#line 52265 "preproc.c" + break; + + case 1975: /* a_expr: a_expr NOT_LA BETWEEN SYMMETRIC b_expr AND a_expr */ +#line 11894 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-6].str),mm_strdup("not between symmetric"),(yyvsp[-2].str),mm_strdup("and"),(yyvsp[0].str)); +} +#line 52273 "preproc.c" + break; + + case 1976: /* a_expr: a_expr IN_P in_expr */ +#line 11898 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("in"),(yyvsp[0].str)); +} +#line 52281 "preproc.c" + break; + + case 1977: /* a_expr: a_expr NOT_LA IN_P in_expr */ +#line 11902 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-3].str),mm_strdup("not in"),(yyvsp[0].str)); +} +#line 52289 "preproc.c" + break; + + case 1978: /* a_expr: a_expr subquery_Op sub_type select_with_parens */ +#line 11906 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 52297 "preproc.c" + break; + + case 1979: /* a_expr: a_expr subquery_Op sub_type '(' a_expr ')' */ +#line 11910 "preproc.y" + { + (yyval.str) = cat_str(6,(yyvsp[-5].str),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52305 "preproc.c" + break; + + case 1980: /* a_expr: UNIQUE select_with_parens */ +#line 11914 "preproc.y" + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + (yyval.str) = cat_str(2,mm_strdup("unique"),(yyvsp[0].str)); +} +#line 52314 "preproc.c" + break; + + case 1981: /* a_expr: a_expr IS DOCUMENT_P */ +#line 11919 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("is document")); +} +#line 52322 "preproc.c" + break; + + case 1982: /* a_expr: a_expr IS NOT DOCUMENT_P */ +#line 11923 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-3].str),mm_strdup("is not document")); +} +#line 52330 "preproc.c" + break; + + case 1983: /* a_expr: a_expr IS NORMALIZED */ +#line 11927 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("is normalized")); +} +#line 52338 "preproc.c" + break; + + case 1984: /* a_expr: a_expr IS unicode_normal_form NORMALIZED */ +#line 11931 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),mm_strdup("is"),(yyvsp[-1].str),mm_strdup("normalized")); +} +#line 52346 "preproc.c" + break; + + case 1985: /* a_expr: a_expr IS NOT NORMALIZED */ +#line 11935 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-3].str),mm_strdup("is not normalized")); +} +#line 52354 "preproc.c" + break; + + case 1986: /* a_expr: a_expr IS NOT unicode_normal_form NORMALIZED */ +#line 11939 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-4].str),mm_strdup("is not"),(yyvsp[-1].str),mm_strdup("normalized")); +} +#line 52362 "preproc.c" + break; + + case 1987: /* a_expr: DEFAULT */ +#line 11943 "preproc.y" + { + (yyval.str) = mm_strdup("default"); +} +#line 52370 "preproc.c" + break; + + case 1988: /* b_expr: c_expr */ +#line 11951 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52378 "preproc.c" + break; + + case 1989: /* b_expr: b_expr TYPECAST Typename */ +#line 11955 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("::"),(yyvsp[0].str)); +} +#line 52386 "preproc.c" + break; + + case 1990: /* b_expr: '+' b_expr */ +#line 11959 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("+"),(yyvsp[0].str)); +} +#line 52394 "preproc.c" + break; + + case 1991: /* b_expr: '-' b_expr */ +#line 11963 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("-"),(yyvsp[0].str)); +} +#line 52402 "preproc.c" + break; + + case 1992: /* b_expr: b_expr '+' b_expr */ +#line 11967 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("+"),(yyvsp[0].str)); +} +#line 52410 "preproc.c" + break; + + case 1993: /* b_expr: b_expr '-' b_expr */ +#line 11971 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("-"),(yyvsp[0].str)); +} +#line 52418 "preproc.c" + break; + + case 1994: /* b_expr: b_expr '*' b_expr */ +#line 11975 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("*"),(yyvsp[0].str)); +} +#line 52426 "preproc.c" + break; + + case 1995: /* b_expr: b_expr '/' b_expr */ +#line 11979 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("/"),(yyvsp[0].str)); +} +#line 52434 "preproc.c" + break; + + case 1996: /* b_expr: b_expr '%' b_expr */ +#line 11983 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("%"),(yyvsp[0].str)); +} +#line 52442 "preproc.c" + break; + + case 1997: /* b_expr: b_expr '^' b_expr */ +#line 11987 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("^"),(yyvsp[0].str)); +} +#line 52450 "preproc.c" + break; + + case 1998: /* b_expr: b_expr '<' b_expr */ +#line 11991 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("<"),(yyvsp[0].str)); +} +#line 52458 "preproc.c" + break; + + case 1999: /* b_expr: b_expr '>' b_expr */ +#line 11995 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(">"),(yyvsp[0].str)); +} +#line 52466 "preproc.c" + break; + + case 2000: /* b_expr: b_expr '=' b_expr */ +#line 11999 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("="),(yyvsp[0].str)); +} +#line 52474 "preproc.c" + break; + + case 2001: /* b_expr: b_expr LESS_EQUALS b_expr */ +#line 12003 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("<="),(yyvsp[0].str)); +} +#line 52482 "preproc.c" + break; + + case 2002: /* b_expr: b_expr GREATER_EQUALS b_expr */ +#line 12007 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(">="),(yyvsp[0].str)); +} +#line 52490 "preproc.c" + break; + + case 2003: /* b_expr: b_expr NOT_EQUALS b_expr */ +#line 12011 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("<>"),(yyvsp[0].str)); +} +#line 52498 "preproc.c" + break; + + case 2004: /* b_expr: b_expr qual_Op b_expr */ +#line 12015 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 52506 "preproc.c" + break; + + case 2005: /* b_expr: qual_Op b_expr */ +#line 12019 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 52514 "preproc.c" + break; + + case 2006: /* b_expr: b_expr IS DISTINCT FROM b_expr */ +#line 12023 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-4].str),mm_strdup("is distinct from"),(yyvsp[0].str)); +} +#line 52522 "preproc.c" + break; + + case 2007: /* b_expr: b_expr IS NOT DISTINCT FROM b_expr */ +#line 12027 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-5].str),mm_strdup("is not distinct from"),(yyvsp[0].str)); +} +#line 52530 "preproc.c" + break; + + case 2008: /* b_expr: b_expr IS DOCUMENT_P */ +#line 12031 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("is document")); +} +#line 52538 "preproc.c" + break; + + case 2009: /* b_expr: b_expr IS NOT DOCUMENT_P */ +#line 12035 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-3].str),mm_strdup("is not document")); +} +#line 52546 "preproc.c" + break; + + case 2010: /* c_expr: columnref */ +#line 12043 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52554 "preproc.c" + break; + + case 2011: /* c_expr: AexprConst */ +#line 12047 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52562 "preproc.c" + break; + + case 2012: /* c_expr: ecpg_param opt_indirection */ +#line 12051 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 52570 "preproc.c" + break; + + case 2013: /* c_expr: '(' a_expr ')' opt_indirection */ +#line 12055 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 52578 "preproc.c" + break; + + case 2014: /* c_expr: case_expr */ +#line 12059 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52586 "preproc.c" + break; + + case 2015: /* c_expr: func_expr */ +#line 12063 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52594 "preproc.c" + break; + + case 2016: /* c_expr: select_with_parens */ +#line 12067 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52602 "preproc.c" + break; + + case 2017: /* c_expr: select_with_parens indirection */ +#line 12071 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 52610 "preproc.c" + break; + + case 2018: /* c_expr: EXISTS select_with_parens */ +#line 12075 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("exists"),(yyvsp[0].str)); +} +#line 52618 "preproc.c" + break; + + case 2019: /* c_expr: ARRAY select_with_parens */ +#line 12079 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("array"),(yyvsp[0].str)); +} +#line 52626 "preproc.c" + break; + + case 2020: /* c_expr: ARRAY array_expr */ +#line 12083 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("array"),(yyvsp[0].str)); +} +#line 52634 "preproc.c" + break; + + case 2021: /* c_expr: explicit_row */ +#line 12087 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52642 "preproc.c" + break; + + case 2022: /* c_expr: implicit_row */ +#line 12091 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52650 "preproc.c" + break; + + case 2023: /* c_expr: GROUPING '(' expr_list ')' */ +#line 12095 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("grouping ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52658 "preproc.c" + break; + + case 2024: /* func_application: func_name '(' ')' */ +#line 12103 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-2].str),mm_strdup("( )")); +} +#line 52666 "preproc.c" + break; + + case 2025: /* func_application: func_name '(' func_arg_list opt_sort_clause ')' */ +#line 12107 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("("),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52674 "preproc.c" + break; + + case 2026: /* func_application: func_name '(' VARIADIC func_arg_expr opt_sort_clause ')' */ +#line 12111 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-5].str),mm_strdup("( variadic"),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52682 "preproc.c" + break; + + case 2027: /* func_application: func_name '(' func_arg_list ',' VARIADIC func_arg_expr opt_sort_clause ')' */ +#line 12115 "preproc.y" + { + (yyval.str) = cat_str(7,(yyvsp[-7].str),mm_strdup("("),(yyvsp[-5].str),mm_strdup(", variadic"),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52690 "preproc.c" + break; + + case 2028: /* func_application: func_name '(' ALL func_arg_list opt_sort_clause ')' */ +#line 12119 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-5].str),mm_strdup("( all"),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52698 "preproc.c" + break; + + case 2029: /* func_application: func_name '(' DISTINCT func_arg_list opt_sort_clause ')' */ +#line 12123 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-5].str),mm_strdup("( distinct"),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52706 "preproc.c" + break; + + case 2030: /* func_application: func_name '(' '*' ')' */ +#line 12127 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-3].str),mm_strdup("( * )")); +} +#line 52714 "preproc.c" + break; + + case 2031: /* func_expr: func_application within_group_clause filter_clause over_clause */ +#line 12135 "preproc.y" + { + (yyval.str) = cat_str(4,(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 52722 "preproc.c" + break; + + case 2032: /* func_expr: func_expr_common_subexpr */ +#line 12139 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52730 "preproc.c" + break; + + case 2033: /* func_expr_windowless: func_application */ +#line 12147 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52738 "preproc.c" + break; + + case 2034: /* func_expr_windowless: func_expr_common_subexpr */ +#line 12151 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 52746 "preproc.c" + break; + + case 2035: /* func_expr_common_subexpr: COLLATION FOR '(' a_expr ')' */ +#line 12159 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("collation for ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52754 "preproc.c" + break; + + case 2036: /* func_expr_common_subexpr: CURRENT_DATE */ +#line 12163 "preproc.y" + { + (yyval.str) = mm_strdup("current_date"); +} +#line 52762 "preproc.c" + break; + + case 2037: /* func_expr_common_subexpr: CURRENT_TIME */ +#line 12167 "preproc.y" + { + (yyval.str) = mm_strdup("current_time"); +} +#line 52770 "preproc.c" + break; + + case 2038: /* func_expr_common_subexpr: CURRENT_TIME '(' Iconst ')' */ +#line 12171 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("current_time ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52778 "preproc.c" + break; + + case 2039: /* func_expr_common_subexpr: CURRENT_TIMESTAMP */ +#line 12175 "preproc.y" + { + (yyval.str) = mm_strdup("current_timestamp"); +} +#line 52786 "preproc.c" + break; + + case 2040: /* func_expr_common_subexpr: CURRENT_TIMESTAMP '(' Iconst ')' */ +#line 12179 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("current_timestamp ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52794 "preproc.c" + break; + + case 2041: /* func_expr_common_subexpr: LOCALTIME */ +#line 12183 "preproc.y" + { + (yyval.str) = mm_strdup("localtime"); +} +#line 52802 "preproc.c" + break; + + case 2042: /* func_expr_common_subexpr: LOCALTIME '(' Iconst ')' */ +#line 12187 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("localtime ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52810 "preproc.c" + break; + + case 2043: /* func_expr_common_subexpr: LOCALTIMESTAMP */ +#line 12191 "preproc.y" + { + (yyval.str) = mm_strdup("localtimestamp"); +} +#line 52818 "preproc.c" + break; + + case 2044: /* func_expr_common_subexpr: LOCALTIMESTAMP '(' Iconst ')' */ +#line 12195 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("localtimestamp ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52826 "preproc.c" + break; + + case 2045: /* func_expr_common_subexpr: CURRENT_ROLE */ +#line 12199 "preproc.y" + { + (yyval.str) = mm_strdup("current_role"); +} +#line 52834 "preproc.c" + break; + + case 2046: /* func_expr_common_subexpr: CURRENT_USER */ +#line 12203 "preproc.y" + { + (yyval.str) = mm_strdup("current_user"); +} +#line 52842 "preproc.c" + break; + + case 2047: /* func_expr_common_subexpr: SESSION_USER */ +#line 12207 "preproc.y" + { + (yyval.str) = mm_strdup("session_user"); +} +#line 52850 "preproc.c" + break; + + case 2048: /* func_expr_common_subexpr: USER */ +#line 12211 "preproc.y" + { + (yyval.str) = mm_strdup("user"); +} +#line 52858 "preproc.c" + break; + + case 2049: /* func_expr_common_subexpr: CURRENT_CATALOG */ +#line 12215 "preproc.y" + { + (yyval.str) = mm_strdup("current_catalog"); +} +#line 52866 "preproc.c" + break; + + case 2050: /* func_expr_common_subexpr: CURRENT_SCHEMA */ +#line 12219 "preproc.y" + { + (yyval.str) = mm_strdup("current_schema"); +} +#line 52874 "preproc.c" + break; + + case 2051: /* func_expr_common_subexpr: CAST '(' a_expr AS Typename ')' */ +#line 12223 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("cast ("),(yyvsp[-3].str),mm_strdup("as"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52882 "preproc.c" + break; + + case 2052: /* func_expr_common_subexpr: EXTRACT '(' extract_list ')' */ +#line 12227 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("extract ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52890 "preproc.c" + break; + + case 2053: /* func_expr_common_subexpr: NORMALIZE '(' a_expr ')' */ +#line 12231 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("normalize ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52898 "preproc.c" + break; + + case 2054: /* func_expr_common_subexpr: NORMALIZE '(' a_expr ',' unicode_normal_form ')' */ +#line 12235 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("normalize ("),(yyvsp[-3].str),mm_strdup(","),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52906 "preproc.c" + break; + + case 2055: /* func_expr_common_subexpr: OVERLAY '(' overlay_list ')' */ +#line 12239 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("overlay ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52914 "preproc.c" + break; + + case 2056: /* func_expr_common_subexpr: OVERLAY '(' func_arg_list_opt ')' */ +#line 12243 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("overlay ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52922 "preproc.c" + break; + + case 2057: /* func_expr_common_subexpr: POSITION '(' position_list ')' */ +#line 12247 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("position ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52930 "preproc.c" + break; + + case 2058: /* func_expr_common_subexpr: SUBSTRING '(' substr_list ')' */ +#line 12251 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("substring ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52938 "preproc.c" + break; + + case 2059: /* func_expr_common_subexpr: SUBSTRING '(' func_arg_list_opt ')' */ +#line 12255 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("substring ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52946 "preproc.c" + break; + + case 2060: /* func_expr_common_subexpr: TREAT '(' a_expr AS Typename ')' */ +#line 12259 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("treat ("),(yyvsp[-3].str),mm_strdup("as"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52954 "preproc.c" + break; + + case 2061: /* func_expr_common_subexpr: TRIM '(' BOTH trim_list ')' */ +#line 12263 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("trim ( both"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52962 "preproc.c" + break; + + case 2062: /* func_expr_common_subexpr: TRIM '(' LEADING trim_list ')' */ +#line 12267 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("trim ( leading"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52970 "preproc.c" + break; + + case 2063: /* func_expr_common_subexpr: TRIM '(' TRAILING trim_list ')' */ +#line 12271 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("trim ( trailing"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52978 "preproc.c" + break; + + case 2064: /* func_expr_common_subexpr: TRIM '(' trim_list ')' */ +#line 12275 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("trim ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52986 "preproc.c" + break; + + case 2065: /* func_expr_common_subexpr: NULLIF '(' a_expr ',' a_expr ')' */ +#line 12279 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("nullif ("),(yyvsp[-3].str),mm_strdup(","),(yyvsp[-1].str),mm_strdup(")")); +} +#line 52994 "preproc.c" + break; + + case 2066: /* func_expr_common_subexpr: COALESCE '(' expr_list ')' */ +#line 12283 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("coalesce ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53002 "preproc.c" + break; + + case 2067: /* func_expr_common_subexpr: GREATEST '(' expr_list ')' */ +#line 12287 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("greatest ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53010 "preproc.c" + break; + + case 2068: /* func_expr_common_subexpr: LEAST '(' expr_list ')' */ +#line 12291 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("least ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53018 "preproc.c" + break; + + case 2069: /* func_expr_common_subexpr: XMLCONCAT '(' expr_list ')' */ +#line 12295 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("xmlconcat ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53026 "preproc.c" + break; + + case 2070: /* func_expr_common_subexpr: XMLELEMENT '(' NAME_P ColLabel ')' */ +#line 12299 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("xmlelement ( name"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53034 "preproc.c" + break; + + case 2071: /* func_expr_common_subexpr: XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes ')' */ +#line 12303 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("xmlelement ( name"),(yyvsp[-3].str),mm_strdup(","),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53042 "preproc.c" + break; + + case 2072: /* func_expr_common_subexpr: XMLELEMENT '(' NAME_P ColLabel ',' expr_list ')' */ +#line 12307 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("xmlelement ( name"),(yyvsp[-3].str),mm_strdup(","),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53050 "preproc.c" + break; + + case 2073: /* func_expr_common_subexpr: XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes ',' expr_list ')' */ +#line 12311 "preproc.y" + { + (yyval.str) = cat_str(7,mm_strdup("xmlelement ( name"),(yyvsp[-5].str),mm_strdup(","),(yyvsp[-3].str),mm_strdup(","),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53058 "preproc.c" + break; + + case 2074: /* func_expr_common_subexpr: XMLEXISTS '(' c_expr xmlexists_argument ')' */ +#line 12315 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("xmlexists ("),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53066 "preproc.c" + break; + + case 2075: /* func_expr_common_subexpr: XMLFOREST '(' xml_attribute_list ')' */ +#line 12319 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("xmlforest ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53074 "preproc.c" + break; + + case 2076: /* func_expr_common_subexpr: XMLPARSE '(' document_or_content a_expr xml_whitespace_option ')' */ +#line 12323 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("xmlparse ("),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53082 "preproc.c" + break; + + case 2077: /* func_expr_common_subexpr: XMLPI '(' NAME_P ColLabel ')' */ +#line 12327 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("xmlpi ( name"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53090 "preproc.c" + break; + + case 2078: /* func_expr_common_subexpr: XMLPI '(' NAME_P ColLabel ',' a_expr ')' */ +#line 12331 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("xmlpi ( name"),(yyvsp[-3].str),mm_strdup(","),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53098 "preproc.c" + break; + + case 2079: /* func_expr_common_subexpr: XMLROOT '(' a_expr ',' xml_root_version opt_xml_root_standalone ')' */ +#line 12335 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("xmlroot ("),(yyvsp[-4].str),mm_strdup(","),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53106 "preproc.c" + break; + + case 2080: /* func_expr_common_subexpr: XMLSERIALIZE '(' document_or_content a_expr AS SimpleTypename ')' */ +#line 12339 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("xmlserialize ("),(yyvsp[-4].str),(yyvsp[-3].str),mm_strdup("as"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53114 "preproc.c" + break; + + case 2081: /* xml_root_version: VERSION_P a_expr */ +#line 12347 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("version"),(yyvsp[0].str)); +} +#line 53122 "preproc.c" + break; + + case 2082: /* xml_root_version: VERSION_P NO VALUE_P */ +#line 12351 "preproc.y" + { + (yyval.str) = mm_strdup("version no value"); +} +#line 53130 "preproc.c" + break; + + case 2083: /* opt_xml_root_standalone: ',' STANDALONE_P YES_P */ +#line 12359 "preproc.y" + { + (yyval.str) = mm_strdup(", standalone yes"); +} +#line 53138 "preproc.c" + break; + + case 2084: /* opt_xml_root_standalone: ',' STANDALONE_P NO */ +#line 12363 "preproc.y" + { + (yyval.str) = mm_strdup(", standalone no"); +} +#line 53146 "preproc.c" + break; + + case 2085: /* opt_xml_root_standalone: ',' STANDALONE_P NO VALUE_P */ +#line 12367 "preproc.y" + { + (yyval.str) = mm_strdup(", standalone no value"); +} +#line 53154 "preproc.c" + break; + + case 2086: /* opt_xml_root_standalone: %empty */ +#line 12371 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53161 "preproc.c" + break; + + case 2087: /* xml_attributes: XMLATTRIBUTES '(' xml_attribute_list ')' */ +#line 12378 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("xmlattributes ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53169 "preproc.c" + break; + + case 2088: /* xml_attribute_list: xml_attribute_el */ +#line 12386 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53177 "preproc.c" + break; + + case 2089: /* xml_attribute_list: xml_attribute_list ',' xml_attribute_el */ +#line 12390 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 53185 "preproc.c" + break; + + case 2090: /* xml_attribute_el: a_expr AS ColLabel */ +#line 12398 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("as"),(yyvsp[0].str)); +} +#line 53193 "preproc.c" + break; + + case 2091: /* xml_attribute_el: a_expr */ +#line 12402 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53201 "preproc.c" + break; + + case 2092: /* document_or_content: DOCUMENT_P */ +#line 12410 "preproc.y" + { + (yyval.str) = mm_strdup("document"); +} +#line 53209 "preproc.c" + break; + + case 2093: /* document_or_content: CONTENT_P */ +#line 12414 "preproc.y" + { + (yyval.str) = mm_strdup("content"); +} +#line 53217 "preproc.c" + break; + + case 2094: /* xml_whitespace_option: PRESERVE WHITESPACE_P */ +#line 12422 "preproc.y" + { + (yyval.str) = mm_strdup("preserve whitespace"); +} +#line 53225 "preproc.c" + break; + + case 2095: /* xml_whitespace_option: STRIP_P WHITESPACE_P */ +#line 12426 "preproc.y" + { + (yyval.str) = mm_strdup("strip whitespace"); +} +#line 53233 "preproc.c" + break; + + case 2096: /* xml_whitespace_option: %empty */ +#line 12430 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53240 "preproc.c" + break; + + case 2097: /* xmlexists_argument: PASSING c_expr */ +#line 12437 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("passing"),(yyvsp[0].str)); +} +#line 53248 "preproc.c" + break; + + case 2098: /* xmlexists_argument: PASSING c_expr xml_passing_mech */ +#line 12441 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("passing"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 53256 "preproc.c" + break; + + case 2099: /* xmlexists_argument: PASSING xml_passing_mech c_expr */ +#line 12445 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("passing"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 53264 "preproc.c" + break; + + case 2100: /* xmlexists_argument: PASSING xml_passing_mech c_expr xml_passing_mech */ +#line 12449 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("passing"),(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 53272 "preproc.c" + break; + + case 2101: /* xml_passing_mech: BY REF */ +#line 12457 "preproc.y" + { + (yyval.str) = mm_strdup("by ref"); +} +#line 53280 "preproc.c" + break; + + case 2102: /* xml_passing_mech: BY VALUE_P */ +#line 12461 "preproc.y" + { + (yyval.str) = mm_strdup("by value"); +} +#line 53288 "preproc.c" + break; + + case 2103: /* within_group_clause: WITHIN GROUP_P '(' sort_clause ')' */ +#line 12469 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("within group ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53296 "preproc.c" + break; + + case 2104: /* within_group_clause: %empty */ +#line 12473 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53303 "preproc.c" + break; + + case 2105: /* filter_clause: FILTER '(' WHERE a_expr ')' */ +#line 12480 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("filter ( where"),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53311 "preproc.c" + break; + + case 2106: /* filter_clause: %empty */ +#line 12484 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53318 "preproc.c" + break; + + case 2107: /* window_clause: WINDOW window_definition_list */ +#line 12491 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("window"),(yyvsp[0].str)); +} +#line 53326 "preproc.c" + break; + + case 2108: /* window_clause: %empty */ +#line 12495 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53333 "preproc.c" + break; + + case 2109: /* window_definition_list: window_definition */ +#line 12502 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53341 "preproc.c" + break; + + case 2110: /* window_definition_list: window_definition_list ',' window_definition */ +#line 12506 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 53349 "preproc.c" + break; + + case 2111: /* window_definition: ColId AS window_specification */ +#line 12514 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("as"),(yyvsp[0].str)); +} +#line 53357 "preproc.c" + break; + + case 2112: /* over_clause: OVER window_specification */ +#line 12522 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("over"),(yyvsp[0].str)); +} +#line 53365 "preproc.c" + break; + + case 2113: /* over_clause: OVER ColId */ +#line 12526 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("over"),(yyvsp[0].str)); +} +#line 53373 "preproc.c" + break; + + case 2114: /* over_clause: %empty */ +#line 12530 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53380 "preproc.c" + break; + + case 2115: /* window_specification: '(' opt_existing_window_name opt_partition_clause opt_sort_clause opt_frame_clause ')' */ +#line 12537 "preproc.y" + { + (yyval.str) = cat_str(6,mm_strdup("("),(yyvsp[-4].str),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53388 "preproc.c" + break; + + case 2116: /* opt_existing_window_name: ColId */ +#line 12545 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53396 "preproc.c" + break; + + case 2117: /* opt_existing_window_name: %empty */ +#line 12549 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53403 "preproc.c" + break; + + case 2118: /* opt_partition_clause: PARTITION BY expr_list */ +#line 12556 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("partition by"),(yyvsp[0].str)); +} +#line 53411 "preproc.c" + break; + + case 2119: /* opt_partition_clause: %empty */ +#line 12560 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53418 "preproc.c" + break; + + case 2120: /* opt_frame_clause: RANGE frame_extent opt_window_exclusion_clause */ +#line 12567 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("range"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 53426 "preproc.c" + break; + + case 2121: /* opt_frame_clause: ROWS frame_extent opt_window_exclusion_clause */ +#line 12571 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("rows"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 53434 "preproc.c" + break; + + case 2122: /* opt_frame_clause: GROUPS frame_extent opt_window_exclusion_clause */ +#line 12575 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("groups"),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 53442 "preproc.c" + break; + + case 2123: /* opt_frame_clause: %empty */ +#line 12579 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53449 "preproc.c" + break; + + case 2124: /* frame_extent: frame_bound */ +#line 12586 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53457 "preproc.c" + break; + + case 2125: /* frame_extent: BETWEEN frame_bound AND frame_bound */ +#line 12590 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("between"),(yyvsp[-2].str),mm_strdup("and"),(yyvsp[0].str)); +} +#line 53465 "preproc.c" + break; + + case 2126: /* frame_bound: UNBOUNDED PRECEDING */ +#line 12598 "preproc.y" + { + (yyval.str) = mm_strdup("unbounded preceding"); +} +#line 53473 "preproc.c" + break; + + case 2127: /* frame_bound: UNBOUNDED FOLLOWING */ +#line 12602 "preproc.y" + { + (yyval.str) = mm_strdup("unbounded following"); +} +#line 53481 "preproc.c" + break; + + case 2128: /* frame_bound: CURRENT_P ROW */ +#line 12606 "preproc.y" + { + (yyval.str) = mm_strdup("current row"); +} +#line 53489 "preproc.c" + break; + + case 2129: /* frame_bound: a_expr PRECEDING */ +#line 12610 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("preceding")); +} +#line 53497 "preproc.c" + break; + + case 2130: /* frame_bound: a_expr FOLLOWING */ +#line 12614 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),mm_strdup("following")); +} +#line 53505 "preproc.c" + break; + + case 2131: /* opt_window_exclusion_clause: EXCLUDE CURRENT_P ROW */ +#line 12622 "preproc.y" + { + (yyval.str) = mm_strdup("exclude current row"); +} +#line 53513 "preproc.c" + break; + + case 2132: /* opt_window_exclusion_clause: EXCLUDE GROUP_P */ +#line 12626 "preproc.y" + { + (yyval.str) = mm_strdup("exclude group"); +} +#line 53521 "preproc.c" + break; + + case 2133: /* opt_window_exclusion_clause: EXCLUDE TIES */ +#line 12630 "preproc.y" + { + (yyval.str) = mm_strdup("exclude ties"); +} +#line 53529 "preproc.c" + break; + + case 2134: /* opt_window_exclusion_clause: EXCLUDE NO OTHERS */ +#line 12634 "preproc.y" + { + (yyval.str) = mm_strdup("exclude no others"); +} +#line 53537 "preproc.c" + break; + + case 2135: /* opt_window_exclusion_clause: %empty */ +#line 12638 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53544 "preproc.c" + break; + + case 2136: /* row: ROW '(' expr_list ')' */ +#line 12645 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("row ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53552 "preproc.c" + break; + + case 2137: /* row: ROW '(' ')' */ +#line 12649 "preproc.y" + { + (yyval.str) = mm_strdup("row ( )"); +} +#line 53560 "preproc.c" + break; + + case 2138: /* row: '(' expr_list ',' a_expr ')' */ +#line 12653 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("("),(yyvsp[-3].str),mm_strdup(","),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53568 "preproc.c" + break; + + case 2139: /* explicit_row: ROW '(' expr_list ')' */ +#line 12661 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("row ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53576 "preproc.c" + break; + + case 2140: /* explicit_row: ROW '(' ')' */ +#line 12665 "preproc.y" + { + (yyval.str) = mm_strdup("row ( )"); +} +#line 53584 "preproc.c" + break; + + case 2141: /* implicit_row: '(' expr_list ',' a_expr ')' */ +#line 12673 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("("),(yyvsp[-3].str),mm_strdup(","),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53592 "preproc.c" + break; + + case 2142: /* sub_type: ANY */ +#line 12681 "preproc.y" + { + (yyval.str) = mm_strdup("any"); +} +#line 53600 "preproc.c" + break; + + case 2143: /* sub_type: SOME */ +#line 12685 "preproc.y" + { + (yyval.str) = mm_strdup("some"); +} +#line 53608 "preproc.c" + break; + + case 2144: /* sub_type: ALL */ +#line 12689 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 53616 "preproc.c" + break; + + case 2145: /* all_Op: Op */ +#line 12697 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53624 "preproc.c" + break; + + case 2146: /* all_Op: MathOp */ +#line 12701 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53632 "preproc.c" + break; + + case 2147: /* MathOp: '+' */ +#line 12709 "preproc.y" + { + (yyval.str) = mm_strdup("+"); +} +#line 53640 "preproc.c" + break; + + case 2148: /* MathOp: '-' */ +#line 12713 "preproc.y" + { + (yyval.str) = mm_strdup("-"); +} +#line 53648 "preproc.c" + break; + + case 2149: /* MathOp: '*' */ +#line 12717 "preproc.y" + { + (yyval.str) = mm_strdup("*"); +} +#line 53656 "preproc.c" + break; + + case 2150: /* MathOp: '/' */ +#line 12721 "preproc.y" + { + (yyval.str) = mm_strdup("/"); +} +#line 53664 "preproc.c" + break; + + case 2151: /* MathOp: '%' */ +#line 12725 "preproc.y" + { + (yyval.str) = mm_strdup("%"); +} +#line 53672 "preproc.c" + break; + + case 2152: /* MathOp: '^' */ +#line 12729 "preproc.y" + { + (yyval.str) = mm_strdup("^"); +} +#line 53680 "preproc.c" + break; + + case 2153: /* MathOp: '<' */ +#line 12733 "preproc.y" + { + (yyval.str) = mm_strdup("<"); +} +#line 53688 "preproc.c" + break; + + case 2154: /* MathOp: '>' */ +#line 12737 "preproc.y" + { + (yyval.str) = mm_strdup(">"); +} +#line 53696 "preproc.c" + break; + + case 2155: /* MathOp: '=' */ +#line 12741 "preproc.y" + { + (yyval.str) = mm_strdup("="); +} +#line 53704 "preproc.c" + break; + + case 2156: /* MathOp: LESS_EQUALS */ +#line 12745 "preproc.y" + { + (yyval.str) = mm_strdup("<="); +} +#line 53712 "preproc.c" + break; + + case 2157: /* MathOp: GREATER_EQUALS */ +#line 12749 "preproc.y" + { + (yyval.str) = mm_strdup(">="); +} +#line 53720 "preproc.c" + break; + + case 2158: /* MathOp: NOT_EQUALS */ +#line 12753 "preproc.y" + { + (yyval.str) = mm_strdup("<>"); +} +#line 53728 "preproc.c" + break; + + case 2159: /* qual_Op: Op */ +#line 12761 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53736 "preproc.c" + break; + + case 2160: /* qual_Op: OPERATOR '(' any_operator ')' */ +#line 12765 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("operator ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53744 "preproc.c" + break; + + case 2161: /* qual_all_Op: all_Op */ +#line 12773 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53752 "preproc.c" + break; + + case 2162: /* qual_all_Op: OPERATOR '(' any_operator ')' */ +#line 12777 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("operator ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53760 "preproc.c" + break; + + case 2163: /* subquery_Op: all_Op */ +#line 12785 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53768 "preproc.c" + break; + + case 2164: /* subquery_Op: OPERATOR '(' any_operator ')' */ +#line 12789 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("operator ("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 53776 "preproc.c" + break; + + case 2165: /* subquery_Op: LIKE */ +#line 12793 "preproc.y" + { + (yyval.str) = mm_strdup("like"); +} +#line 53784 "preproc.c" + break; + + case 2166: /* subquery_Op: NOT_LA LIKE */ +#line 12797 "preproc.y" + { + (yyval.str) = mm_strdup("not like"); +} +#line 53792 "preproc.c" + break; + + case 2167: /* subquery_Op: ILIKE */ +#line 12801 "preproc.y" + { + (yyval.str) = mm_strdup("ilike"); +} +#line 53800 "preproc.c" + break; + + case 2168: /* subquery_Op: NOT_LA ILIKE */ +#line 12805 "preproc.y" + { + (yyval.str) = mm_strdup("not ilike"); +} +#line 53808 "preproc.c" + break; + + case 2169: /* expr_list: a_expr */ +#line 12813 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53816 "preproc.c" + break; + + case 2170: /* expr_list: expr_list ',' a_expr */ +#line 12817 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 53824 "preproc.c" + break; + + case 2171: /* func_arg_list: func_arg_expr */ +#line 12825 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53832 "preproc.c" + break; + + case 2172: /* func_arg_list: func_arg_list ',' func_arg_expr */ +#line 12829 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 53840 "preproc.c" + break; + + case 2173: /* func_arg_expr: a_expr */ +#line 12837 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53848 "preproc.c" + break; + + case 2174: /* func_arg_expr: param_name COLON_EQUALS a_expr */ +#line 12841 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(":="),(yyvsp[0].str)); +} +#line 53856 "preproc.c" + break; + + case 2175: /* func_arg_expr: param_name EQUALS_GREATER a_expr */ +#line 12845 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("=>"),(yyvsp[0].str)); +} +#line 53864 "preproc.c" + break; + + case 2176: /* func_arg_list_opt: func_arg_list */ +#line 12853 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53872 "preproc.c" + break; + + case 2177: /* func_arg_list_opt: %empty */ +#line 12857 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 53879 "preproc.c" + break; + + case 2178: /* type_list: Typename */ +#line 12864 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53887 "preproc.c" + break; + + case 2179: /* type_list: type_list ',' Typename */ +#line 12868 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 53895 "preproc.c" + break; + + case 2180: /* array_expr: '[' expr_list ']' */ +#line 12876 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("["),(yyvsp[-1].str),mm_strdup("]")); +} +#line 53903 "preproc.c" + break; + + case 2181: /* array_expr: '[' array_expr_list ']' */ +#line 12880 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("["),(yyvsp[-1].str),mm_strdup("]")); +} +#line 53911 "preproc.c" + break; + + case 2182: /* array_expr: '[' ']' */ +#line 12884 "preproc.y" + { + (yyval.str) = mm_strdup("[ ]"); +} +#line 53919 "preproc.c" + break; + + case 2183: /* array_expr_list: array_expr */ +#line 12892 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53927 "preproc.c" + break; + + case 2184: /* array_expr_list: array_expr_list ',' array_expr */ +#line 12896 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 53935 "preproc.c" + break; + + case 2185: /* extract_list: extract_arg FROM a_expr */ +#line 12904 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("from"),(yyvsp[0].str)); +} +#line 53943 "preproc.c" + break; + + case 2186: /* extract_arg: ecpg_ident */ +#line 12912 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 53951 "preproc.c" + break; + + case 2187: /* extract_arg: YEAR_P */ +#line 12916 "preproc.y" + { + (yyval.str) = mm_strdup("year"); +} +#line 53959 "preproc.c" + break; + + case 2188: /* extract_arg: MONTH_P */ +#line 12920 "preproc.y" + { + (yyval.str) = mm_strdup("month"); +} +#line 53967 "preproc.c" + break; + + case 2189: /* extract_arg: DAY_P */ +#line 12924 "preproc.y" + { + (yyval.str) = mm_strdup("day"); +} +#line 53975 "preproc.c" + break; + + case 2190: /* extract_arg: HOUR_P */ +#line 12928 "preproc.y" + { + (yyval.str) = mm_strdup("hour"); +} +#line 53983 "preproc.c" + break; + + case 2191: /* extract_arg: MINUTE_P */ +#line 12932 "preproc.y" + { + (yyval.str) = mm_strdup("minute"); +} +#line 53991 "preproc.c" + break; + + case 2192: /* extract_arg: SECOND_P */ +#line 12936 "preproc.y" + { + (yyval.str) = mm_strdup("second"); +} +#line 53999 "preproc.c" + break; + + case 2193: /* extract_arg: ecpg_sconst */ +#line 12940 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54007 "preproc.c" + break; + + case 2194: /* unicode_normal_form: NFC */ +#line 12948 "preproc.y" + { + (yyval.str) = mm_strdup("nfc"); +} +#line 54015 "preproc.c" + break; + + case 2195: /* unicode_normal_form: NFD */ +#line 12952 "preproc.y" + { + (yyval.str) = mm_strdup("nfd"); +} +#line 54023 "preproc.c" + break; + + case 2196: /* unicode_normal_form: NFKC */ +#line 12956 "preproc.y" + { + (yyval.str) = mm_strdup("nfkc"); +} +#line 54031 "preproc.c" + break; + + case 2197: /* unicode_normal_form: NFKD */ +#line 12960 "preproc.y" + { + (yyval.str) = mm_strdup("nfkd"); +} +#line 54039 "preproc.c" + break; + + case 2198: /* overlay_list: a_expr PLACING a_expr FROM a_expr FOR a_expr */ +#line 12968 "preproc.y" + { + (yyval.str) = cat_str(7,(yyvsp[-6].str),mm_strdup("placing"),(yyvsp[-4].str),mm_strdup("from"),(yyvsp[-2].str),mm_strdup("for"),(yyvsp[0].str)); +} +#line 54047 "preproc.c" + break; + + case 2199: /* overlay_list: a_expr PLACING a_expr FROM a_expr */ +#line 12972 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("placing"),(yyvsp[-2].str),mm_strdup("from"),(yyvsp[0].str)); +} +#line 54055 "preproc.c" + break; + + case 2200: /* position_list: b_expr IN_P b_expr */ +#line 12980 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("in"),(yyvsp[0].str)); +} +#line 54063 "preproc.c" + break; + + case 2201: /* substr_list: a_expr FROM a_expr FOR a_expr */ +#line 12988 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("from"),(yyvsp[-2].str),mm_strdup("for"),(yyvsp[0].str)); +} +#line 54071 "preproc.c" + break; + + case 2202: /* substr_list: a_expr FOR a_expr FROM a_expr */ +#line 12992 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("for"),(yyvsp[-2].str),mm_strdup("from"),(yyvsp[0].str)); +} +#line 54079 "preproc.c" + break; + + case 2203: /* substr_list: a_expr FROM a_expr */ +#line 12996 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("from"),(yyvsp[0].str)); +} +#line 54087 "preproc.c" + break; + + case 2204: /* substr_list: a_expr FOR a_expr */ +#line 13000 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("for"),(yyvsp[0].str)); +} +#line 54095 "preproc.c" + break; + + case 2205: /* substr_list: a_expr SIMILAR a_expr ESCAPE a_expr */ +#line 13004 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("similar"),(yyvsp[-2].str),mm_strdup("escape"),(yyvsp[0].str)); +} +#line 54103 "preproc.c" + break; + + case 2206: /* trim_list: a_expr FROM expr_list */ +#line 13012 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("from"),(yyvsp[0].str)); +} +#line 54111 "preproc.c" + break; + + case 2207: /* trim_list: FROM expr_list */ +#line 13016 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("from"),(yyvsp[0].str)); +} +#line 54119 "preproc.c" + break; + + case 2208: /* trim_list: expr_list */ +#line 13020 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54127 "preproc.c" + break; + + case 2209: /* in_expr: select_with_parens */ +#line 13028 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54135 "preproc.c" + break; + + case 2210: /* in_expr: '(' expr_list ')' */ +#line 13032 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("("),(yyvsp[-1].str),mm_strdup(")")); +} +#line 54143 "preproc.c" + break; + + case 2211: /* case_expr: CASE case_arg when_clause_list case_default END_P */ +#line 13040 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("case"),(yyvsp[-3].str),(yyvsp[-2].str),(yyvsp[-1].str),mm_strdup("end")); +} +#line 54151 "preproc.c" + break; + + case 2212: /* when_clause_list: when_clause */ +#line 13048 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54159 "preproc.c" + break; + + case 2213: /* when_clause_list: when_clause_list when_clause */ +#line 13052 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 54167 "preproc.c" + break; + + case 2214: /* when_clause: WHEN a_expr THEN a_expr */ +#line 13060 "preproc.y" + { + (yyval.str) = cat_str(4,mm_strdup("when"),(yyvsp[-2].str),mm_strdup("then"),(yyvsp[0].str)); +} +#line 54175 "preproc.c" + break; + + case 2215: /* case_default: ELSE a_expr */ +#line 13068 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("else"),(yyvsp[0].str)); +} +#line 54183 "preproc.c" + break; + + case 2216: /* case_default: %empty */ +#line 13072 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 54190 "preproc.c" + break; + + case 2217: /* case_arg: a_expr */ +#line 13079 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54198 "preproc.c" + break; + + case 2218: /* case_arg: %empty */ +#line 13083 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 54205 "preproc.c" + break; + + case 2219: /* columnref: ColId */ +#line 13090 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54213 "preproc.c" + break; + + case 2220: /* columnref: ColId indirection */ +#line 13094 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 54221 "preproc.c" + break; + + case 2221: /* indirection_el: '.' attr_name */ +#line 13102 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("."),(yyvsp[0].str)); +} +#line 54229 "preproc.c" + break; + + case 2222: /* indirection_el: '.' '*' */ +#line 13106 "preproc.y" + { + (yyval.str) = mm_strdup(". *"); +} +#line 54237 "preproc.c" + break; + + case 2223: /* indirection_el: '[' a_expr ']' */ +#line 13110 "preproc.y" + { + (yyval.str) = cat_str(3,mm_strdup("["),(yyvsp[-1].str),mm_strdup("]")); +} +#line 54245 "preproc.c" + break; + + case 2224: /* indirection_el: '[' opt_slice_bound ':' opt_slice_bound ']' */ +#line 13114 "preproc.y" + { + (yyval.str) = cat_str(5,mm_strdup("["),(yyvsp[-3].str),mm_strdup(":"),(yyvsp[-1].str),mm_strdup("]")); +} +#line 54253 "preproc.c" + break; + + case 2225: /* opt_slice_bound: a_expr */ +#line 13122 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54261 "preproc.c" + break; + + case 2226: /* opt_slice_bound: %empty */ +#line 13126 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 54268 "preproc.c" + break; + + case 2227: /* indirection: indirection_el */ +#line 13133 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54276 "preproc.c" + break; + + case 2228: /* indirection: indirection indirection_el */ +#line 13137 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 54284 "preproc.c" + break; + + case 2229: /* opt_indirection: %empty */ +#line 13145 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 54291 "preproc.c" + break; + + case 2230: /* opt_indirection: opt_indirection indirection_el */ +#line 13148 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 54299 "preproc.c" + break; + + case 2231: /* opt_asymmetric: ASYMMETRIC */ +#line 13156 "preproc.y" + { + (yyval.str) = mm_strdup("asymmetric"); +} +#line 54307 "preproc.c" + break; + + case 2232: /* opt_asymmetric: %empty */ +#line 13160 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 54314 "preproc.c" + break; + + case 2233: /* opt_target_list: target_list */ +#line 13167 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54322 "preproc.c" + break; + + case 2234: /* opt_target_list: %empty */ +#line 13171 "preproc.y" + { + (yyval.str)=EMPTY; } +#line 54329 "preproc.c" + break; + + case 2235: /* target_list: target_el */ +#line 13178 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54337 "preproc.c" + break; + + case 2236: /* target_list: target_list ',' target_el */ +#line 13182 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 54345 "preproc.c" + break; + + case 2237: /* target_el: a_expr AS ColLabel */ +#line 13190 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup("as"),(yyvsp[0].str)); +} +#line 54353 "preproc.c" + break; + + case 2238: /* target_el: a_expr BareColLabel */ +#line 13194 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 54361 "preproc.c" + break; + + case 2239: /* target_el: a_expr */ +#line 13198 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54369 "preproc.c" + break; + + case 2240: /* target_el: '*' */ +#line 13202 "preproc.y" + { + (yyval.str) = mm_strdup("*"); +} +#line 54377 "preproc.c" + break; + + case 2241: /* qualified_name_list: qualified_name */ +#line 13210 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54385 "preproc.c" + break; + + case 2242: /* qualified_name_list: qualified_name_list ',' qualified_name */ +#line 13214 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 54393 "preproc.c" + break; + + case 2243: /* qualified_name: ColId */ +#line 13222 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54401 "preproc.c" + break; + + case 2244: /* qualified_name: ColId indirection */ +#line 13226 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 54409 "preproc.c" + break; + + case 2245: /* name_list: name */ +#line 13234 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54417 "preproc.c" + break; + + case 2246: /* name_list: name_list ',' name */ +#line 13238 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 54425 "preproc.c" + break; + + case 2247: /* name: ColId */ +#line 13246 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54433 "preproc.c" + break; + + case 2248: /* attr_name: ColLabel */ +#line 13254 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54441 "preproc.c" + break; + + case 2249: /* file_name: ecpg_sconst */ +#line 13262 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54449 "preproc.c" + break; + + case 2250: /* func_name: type_function_name */ +#line 13270 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54457 "preproc.c" + break; + + case 2251: /* func_name: ColId indirection */ +#line 13274 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 54465 "preproc.c" + break; + + case 2252: /* AexprConst: Iconst */ +#line 13282 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54473 "preproc.c" + break; + + case 2253: /* AexprConst: ecpg_fconst */ +#line 13286 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54481 "preproc.c" + break; + + case 2254: /* AexprConst: ecpg_sconst */ +#line 13290 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54489 "preproc.c" + break; + + case 2255: /* AexprConst: ecpg_bconst */ +#line 13294 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54497 "preproc.c" + break; + + case 2256: /* AexprConst: ecpg_xconst */ +#line 13298 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54505 "preproc.c" + break; + + case 2257: /* AexprConst: func_name ecpg_sconst */ +#line 13302 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 54513 "preproc.c" + break; + + case 2258: /* AexprConst: func_name '(' func_arg_list opt_sort_clause ')' ecpg_sconst */ +#line 13306 "preproc.y" + { + (yyval.str) = cat_str(6,(yyvsp[-5].str),mm_strdup("("),(yyvsp[-3].str),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 54521 "preproc.c" + break; + + case 2259: /* AexprConst: ConstTypename ecpg_sconst */ +#line 13310 "preproc.y" + { + (yyval.str) = cat_str(2,(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 54529 "preproc.c" + break; + + case 2260: /* AexprConst: ConstInterval ecpg_sconst opt_interval */ +#line 13314 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),(yyvsp[-1].str),(yyvsp[0].str)); +} +#line 54537 "preproc.c" + break; + + case 2261: /* AexprConst: ConstInterval '(' Iconst ')' ecpg_sconst */ +#line 13318 "preproc.y" + { + (yyval.str) = cat_str(5,(yyvsp[-4].str),mm_strdup("("),(yyvsp[-2].str),mm_strdup(")"),(yyvsp[0].str)); +} +#line 54545 "preproc.c" + break; + + case 2262: /* AexprConst: TRUE_P */ +#line 13322 "preproc.y" + { + (yyval.str) = mm_strdup("true"); +} +#line 54553 "preproc.c" + break; + + case 2263: /* AexprConst: FALSE_P */ +#line 13326 "preproc.y" + { + (yyval.str) = mm_strdup("false"); +} +#line 54561 "preproc.c" + break; + + case 2264: /* AexprConst: NULL_P */ +#line 13330 "preproc.y" + { + (yyval.str) = mm_strdup("null"); +} +#line 54569 "preproc.c" + break; + + case 2265: /* AexprConst: civar */ +#line 13333 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 54575 "preproc.c" + break; + + case 2266: /* AexprConst: civarind */ +#line 13334 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 54581 "preproc.c" + break; + + case 2267: /* Iconst: ICONST */ +#line 13340 "preproc.y" + { (yyval.str) = make_name(); } +#line 54587 "preproc.c" + break; + + case 2268: /* SignedIconst: Iconst */ +#line 13346 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54595 "preproc.c" + break; + + case 2269: /* SignedIconst: civar */ +#line 13349 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 54601 "preproc.c" + break; + + case 2270: /* SignedIconst: '+' Iconst */ +#line 13351 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("+"),(yyvsp[0].str)); +} +#line 54609 "preproc.c" + break; + + case 2271: /* SignedIconst: '-' Iconst */ +#line 13355 "preproc.y" + { + (yyval.str) = cat_str(2,mm_strdup("-"),(yyvsp[0].str)); +} +#line 54617 "preproc.c" + break; + + case 2272: /* RoleId: RoleSpec */ +#line 13363 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54625 "preproc.c" + break; + + case 2273: /* RoleSpec: NonReservedWord */ +#line 13371 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54633 "preproc.c" + break; + + case 2274: /* RoleSpec: CURRENT_ROLE */ +#line 13375 "preproc.y" + { + (yyval.str) = mm_strdup("current_role"); +} +#line 54641 "preproc.c" + break; + + case 2275: /* RoleSpec: CURRENT_USER */ +#line 13379 "preproc.y" + { + (yyval.str) = mm_strdup("current_user"); +} +#line 54649 "preproc.c" + break; + + case 2276: /* RoleSpec: SESSION_USER */ +#line 13383 "preproc.y" + { + (yyval.str) = mm_strdup("session_user"); +} +#line 54657 "preproc.c" + break; + + case 2277: /* role_list: RoleSpec */ +#line 13391 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54665 "preproc.c" + break; + + case 2278: /* role_list: role_list ',' RoleSpec */ +#line 13395 "preproc.y" + { + (yyval.str) = cat_str(3,(yyvsp[-2].str),mm_strdup(","),(yyvsp[0].str)); +} +#line 54673 "preproc.c" + break; + + case 2279: /* NonReservedWord: ecpg_ident */ +#line 13403 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54681 "preproc.c" + break; + + case 2280: /* NonReservedWord: unreserved_keyword */ +#line 13407 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54689 "preproc.c" + break; + + case 2281: /* NonReservedWord: col_name_keyword */ +#line 13411 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54697 "preproc.c" + break; + + case 2282: /* NonReservedWord: type_func_name_keyword */ +#line 13415 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54705 "preproc.c" + break; + + case 2283: /* BareColLabel: ecpg_ident */ +#line 13423 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54713 "preproc.c" + break; + + case 2284: /* BareColLabel: bare_label_keyword */ +#line 13427 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); +} +#line 54721 "preproc.c" + break; + + case 2285: /* unreserved_keyword: ABORT_P */ +#line 13435 "preproc.y" + { + (yyval.str) = mm_strdup("abort"); +} +#line 54729 "preproc.c" + break; + + case 2286: /* unreserved_keyword: ABSOLUTE_P */ +#line 13439 "preproc.y" + { + (yyval.str) = mm_strdup("absolute"); +} +#line 54737 "preproc.c" + break; + + case 2287: /* unreserved_keyword: ACCESS */ +#line 13443 "preproc.y" + { + (yyval.str) = mm_strdup("access"); +} +#line 54745 "preproc.c" + break; + + case 2288: /* unreserved_keyword: ACTION */ +#line 13447 "preproc.y" + { + (yyval.str) = mm_strdup("action"); +} +#line 54753 "preproc.c" + break; + + case 2289: /* unreserved_keyword: ADD_P */ +#line 13451 "preproc.y" + { + (yyval.str) = mm_strdup("add"); +} +#line 54761 "preproc.c" + break; + + case 2290: /* unreserved_keyword: ADMIN */ +#line 13455 "preproc.y" + { + (yyval.str) = mm_strdup("admin"); +} +#line 54769 "preproc.c" + break; + + case 2291: /* unreserved_keyword: AFTER */ +#line 13459 "preproc.y" + { + (yyval.str) = mm_strdup("after"); +} +#line 54777 "preproc.c" + break; + + case 2292: /* unreserved_keyword: AGGREGATE */ +#line 13463 "preproc.y" + { + (yyval.str) = mm_strdup("aggregate"); +} +#line 54785 "preproc.c" + break; + + case 2293: /* unreserved_keyword: ALSO */ +#line 13467 "preproc.y" + { + (yyval.str) = mm_strdup("also"); +} +#line 54793 "preproc.c" + break; + + case 2294: /* unreserved_keyword: ALTER */ +#line 13471 "preproc.y" + { + (yyval.str) = mm_strdup("alter"); +} +#line 54801 "preproc.c" + break; + + case 2295: /* unreserved_keyword: ALWAYS */ +#line 13475 "preproc.y" + { + (yyval.str) = mm_strdup("always"); +} +#line 54809 "preproc.c" + break; + + case 2296: /* unreserved_keyword: ASENSITIVE */ +#line 13479 "preproc.y" + { + (yyval.str) = mm_strdup("asensitive"); +} +#line 54817 "preproc.c" + break; + + case 2297: /* unreserved_keyword: ASSERTION */ +#line 13483 "preproc.y" + { + (yyval.str) = mm_strdup("assertion"); +} +#line 54825 "preproc.c" + break; + + case 2298: /* unreserved_keyword: ASSIGNMENT */ +#line 13487 "preproc.y" + { + (yyval.str) = mm_strdup("assignment"); +} +#line 54833 "preproc.c" + break; + + case 2299: /* unreserved_keyword: AT */ +#line 13491 "preproc.y" + { + (yyval.str) = mm_strdup("at"); +} +#line 54841 "preproc.c" + break; + + case 2300: /* unreserved_keyword: ATOMIC */ +#line 13495 "preproc.y" + { + (yyval.str) = mm_strdup("atomic"); +} +#line 54849 "preproc.c" + break; + + case 2301: /* unreserved_keyword: ATTACH */ +#line 13499 "preproc.y" + { + (yyval.str) = mm_strdup("attach"); +} +#line 54857 "preproc.c" + break; + + case 2302: /* unreserved_keyword: ATTRIBUTE */ +#line 13503 "preproc.y" + { + (yyval.str) = mm_strdup("attribute"); +} +#line 54865 "preproc.c" + break; + + case 2303: /* unreserved_keyword: BACKWARD */ +#line 13507 "preproc.y" + { + (yyval.str) = mm_strdup("backward"); +} +#line 54873 "preproc.c" + break; + + case 2304: /* unreserved_keyword: BEFORE */ +#line 13511 "preproc.y" + { + (yyval.str) = mm_strdup("before"); +} +#line 54881 "preproc.c" + break; + + case 2305: /* unreserved_keyword: BEGIN_P */ +#line 13515 "preproc.y" + { + (yyval.str) = mm_strdup("begin"); +} +#line 54889 "preproc.c" + break; + + case 2306: /* unreserved_keyword: BREADTH */ +#line 13519 "preproc.y" + { + (yyval.str) = mm_strdup("breadth"); +} +#line 54897 "preproc.c" + break; + + case 2307: /* unreserved_keyword: BY */ +#line 13523 "preproc.y" + { + (yyval.str) = mm_strdup("by"); +} +#line 54905 "preproc.c" + break; + + case 2308: /* unreserved_keyword: CACHE */ +#line 13527 "preproc.y" + { + (yyval.str) = mm_strdup("cache"); +} +#line 54913 "preproc.c" + break; + + case 2309: /* unreserved_keyword: CALL */ +#line 13531 "preproc.y" + { + (yyval.str) = mm_strdup("call"); +} +#line 54921 "preproc.c" + break; + + case 2310: /* unreserved_keyword: CALLED */ +#line 13535 "preproc.y" + { + (yyval.str) = mm_strdup("called"); +} +#line 54929 "preproc.c" + break; + + case 2311: /* unreserved_keyword: CASCADE */ +#line 13539 "preproc.y" + { + (yyval.str) = mm_strdup("cascade"); +} +#line 54937 "preproc.c" + break; + + case 2312: /* unreserved_keyword: CASCADED */ +#line 13543 "preproc.y" + { + (yyval.str) = mm_strdup("cascaded"); +} +#line 54945 "preproc.c" + break; + + case 2313: /* unreserved_keyword: CATALOG_P */ +#line 13547 "preproc.y" + { + (yyval.str) = mm_strdup("catalog"); +} +#line 54953 "preproc.c" + break; + + case 2314: /* unreserved_keyword: CHAIN */ +#line 13551 "preproc.y" + { + (yyval.str) = mm_strdup("chain"); +} +#line 54961 "preproc.c" + break; + + case 2315: /* unreserved_keyword: CHARACTERISTICS */ +#line 13555 "preproc.y" + { + (yyval.str) = mm_strdup("characteristics"); +} +#line 54969 "preproc.c" + break; + + case 2316: /* unreserved_keyword: CHECKPOINT */ +#line 13559 "preproc.y" + { + (yyval.str) = mm_strdup("checkpoint"); +} +#line 54977 "preproc.c" + break; + + case 2317: /* unreserved_keyword: CLASS */ +#line 13563 "preproc.y" + { + (yyval.str) = mm_strdup("class"); +} +#line 54985 "preproc.c" + break; + + case 2318: /* unreserved_keyword: CLOSE */ +#line 13567 "preproc.y" + { + (yyval.str) = mm_strdup("close"); +} +#line 54993 "preproc.c" + break; + + case 2319: /* unreserved_keyword: CLUSTER */ +#line 13571 "preproc.y" + { + (yyval.str) = mm_strdup("cluster"); +} +#line 55001 "preproc.c" + break; + + case 2320: /* unreserved_keyword: COLUMNS */ +#line 13575 "preproc.y" + { + (yyval.str) = mm_strdup("columns"); +} +#line 55009 "preproc.c" + break; + + case 2321: /* unreserved_keyword: COMMENT */ +#line 13579 "preproc.y" + { + (yyval.str) = mm_strdup("comment"); +} +#line 55017 "preproc.c" + break; + + case 2322: /* unreserved_keyword: COMMENTS */ +#line 13583 "preproc.y" + { + (yyval.str) = mm_strdup("comments"); +} +#line 55025 "preproc.c" + break; + + case 2323: /* unreserved_keyword: COMMIT */ +#line 13587 "preproc.y" + { + (yyval.str) = mm_strdup("commit"); +} +#line 55033 "preproc.c" + break; + + case 2324: /* unreserved_keyword: COMMITTED */ +#line 13591 "preproc.y" + { + (yyval.str) = mm_strdup("committed"); +} +#line 55041 "preproc.c" + break; + + case 2325: /* unreserved_keyword: COMPRESSION */ +#line 13595 "preproc.y" + { + (yyval.str) = mm_strdup("compression"); +} +#line 55049 "preproc.c" + break; + + case 2326: /* unreserved_keyword: CONFIGURATION */ +#line 13599 "preproc.y" + { + (yyval.str) = mm_strdup("configuration"); +} +#line 55057 "preproc.c" + break; + + case 2327: /* unreserved_keyword: CONFLICT */ +#line 13603 "preproc.y" + { + (yyval.str) = mm_strdup("conflict"); +} +#line 55065 "preproc.c" + break; + + case 2328: /* unreserved_keyword: CONSTRAINTS */ +#line 13607 "preproc.y" + { + (yyval.str) = mm_strdup("constraints"); +} +#line 55073 "preproc.c" + break; + + case 2329: /* unreserved_keyword: CONTENT_P */ +#line 13611 "preproc.y" + { + (yyval.str) = mm_strdup("content"); +} +#line 55081 "preproc.c" + break; + + case 2330: /* unreserved_keyword: CONTINUE_P */ +#line 13615 "preproc.y" + { + (yyval.str) = mm_strdup("continue"); +} +#line 55089 "preproc.c" + break; + + case 2331: /* unreserved_keyword: CONVERSION_P */ +#line 13619 "preproc.y" + { + (yyval.str) = mm_strdup("conversion"); +} +#line 55097 "preproc.c" + break; + + case 2332: /* unreserved_keyword: COPY */ +#line 13623 "preproc.y" + { + (yyval.str) = mm_strdup("copy"); +} +#line 55105 "preproc.c" + break; + + case 2333: /* unreserved_keyword: COST */ +#line 13627 "preproc.y" + { + (yyval.str) = mm_strdup("cost"); +} +#line 55113 "preproc.c" + break; + + case 2334: /* unreserved_keyword: CSV */ +#line 13631 "preproc.y" + { + (yyval.str) = mm_strdup("csv"); +} +#line 55121 "preproc.c" + break; + + case 2335: /* unreserved_keyword: CUBE */ +#line 13635 "preproc.y" + { + (yyval.str) = mm_strdup("cube"); +} +#line 55129 "preproc.c" + break; + + case 2336: /* unreserved_keyword: CURSOR */ +#line 13639 "preproc.y" + { + (yyval.str) = mm_strdup("cursor"); +} +#line 55137 "preproc.c" + break; + + case 2337: /* unreserved_keyword: CYCLE */ +#line 13643 "preproc.y" + { + (yyval.str) = mm_strdup("cycle"); +} +#line 55145 "preproc.c" + break; + + case 2338: /* unreserved_keyword: DATA_P */ +#line 13647 "preproc.y" + { + (yyval.str) = mm_strdup("data"); +} +#line 55153 "preproc.c" + break; + + case 2339: /* unreserved_keyword: DATABASE */ +#line 13651 "preproc.y" + { + (yyval.str) = mm_strdup("database"); +} +#line 55161 "preproc.c" + break; + + case 2340: /* unreserved_keyword: DEALLOCATE */ +#line 13655 "preproc.y" + { + (yyval.str) = mm_strdup("deallocate"); +} +#line 55169 "preproc.c" + break; + + case 2341: /* unreserved_keyword: DECLARE */ +#line 13659 "preproc.y" + { + (yyval.str) = mm_strdup("declare"); +} +#line 55177 "preproc.c" + break; + + case 2342: /* unreserved_keyword: DEFAULTS */ +#line 13663 "preproc.y" + { + (yyval.str) = mm_strdup("defaults"); +} +#line 55185 "preproc.c" + break; + + case 2343: /* unreserved_keyword: DEFERRED */ +#line 13667 "preproc.y" + { + (yyval.str) = mm_strdup("deferred"); +} +#line 55193 "preproc.c" + break; + + case 2344: /* unreserved_keyword: DEFINER */ +#line 13671 "preproc.y" + { + (yyval.str) = mm_strdup("definer"); +} +#line 55201 "preproc.c" + break; + + case 2345: /* unreserved_keyword: DELETE_P */ +#line 13675 "preproc.y" + { + (yyval.str) = mm_strdup("delete"); +} +#line 55209 "preproc.c" + break; + + case 2346: /* unreserved_keyword: DELIMITER */ +#line 13679 "preproc.y" + { + (yyval.str) = mm_strdup("delimiter"); +} +#line 55217 "preproc.c" + break; + + case 2347: /* unreserved_keyword: DELIMITERS */ +#line 13683 "preproc.y" + { + (yyval.str) = mm_strdup("delimiters"); +} +#line 55225 "preproc.c" + break; + + case 2348: /* unreserved_keyword: DEPENDS */ +#line 13687 "preproc.y" + { + (yyval.str) = mm_strdup("depends"); +} +#line 55233 "preproc.c" + break; + + case 2349: /* unreserved_keyword: DEPTH */ +#line 13691 "preproc.y" + { + (yyval.str) = mm_strdup("depth"); +} +#line 55241 "preproc.c" + break; + + case 2350: /* unreserved_keyword: DETACH */ +#line 13695 "preproc.y" + { + (yyval.str) = mm_strdup("detach"); +} +#line 55249 "preproc.c" + break; + + case 2351: /* unreserved_keyword: DICTIONARY */ +#line 13699 "preproc.y" + { + (yyval.str) = mm_strdup("dictionary"); +} +#line 55257 "preproc.c" + break; + + case 2352: /* unreserved_keyword: DISABLE_P */ +#line 13703 "preproc.y" + { + (yyval.str) = mm_strdup("disable"); +} +#line 55265 "preproc.c" + break; + + case 2353: /* unreserved_keyword: DISCARD */ +#line 13707 "preproc.y" + { + (yyval.str) = mm_strdup("discard"); +} +#line 55273 "preproc.c" + break; + + case 2354: /* unreserved_keyword: DOCUMENT_P */ +#line 13711 "preproc.y" + { + (yyval.str) = mm_strdup("document"); +} +#line 55281 "preproc.c" + break; + + case 2355: /* unreserved_keyword: DOMAIN_P */ +#line 13715 "preproc.y" + { + (yyval.str) = mm_strdup("domain"); +} +#line 55289 "preproc.c" + break; + + case 2356: /* unreserved_keyword: DOUBLE_P */ +#line 13719 "preproc.y" + { + (yyval.str) = mm_strdup("double"); +} +#line 55297 "preproc.c" + break; + + case 2357: /* unreserved_keyword: DROP */ +#line 13723 "preproc.y" + { + (yyval.str) = mm_strdup("drop"); +} +#line 55305 "preproc.c" + break; + + case 2358: /* unreserved_keyword: EACH */ +#line 13727 "preproc.y" + { + (yyval.str) = mm_strdup("each"); +} +#line 55313 "preproc.c" + break; + + case 2359: /* unreserved_keyword: ENABLE_P */ +#line 13731 "preproc.y" + { + (yyval.str) = mm_strdup("enable"); +} +#line 55321 "preproc.c" + break; + + case 2360: /* unreserved_keyword: ENCODING */ +#line 13735 "preproc.y" + { + (yyval.str) = mm_strdup("encoding"); +} +#line 55329 "preproc.c" + break; + + case 2361: /* unreserved_keyword: ENCRYPTED */ +#line 13739 "preproc.y" + { + (yyval.str) = mm_strdup("encrypted"); +} +#line 55337 "preproc.c" + break; + + case 2362: /* unreserved_keyword: ENUM_P */ +#line 13743 "preproc.y" + { + (yyval.str) = mm_strdup("enum"); +} +#line 55345 "preproc.c" + break; + + case 2363: /* unreserved_keyword: ESCAPE */ +#line 13747 "preproc.y" + { + (yyval.str) = mm_strdup("escape"); +} +#line 55353 "preproc.c" + break; + + case 2364: /* unreserved_keyword: EVENT */ +#line 13751 "preproc.y" + { + (yyval.str) = mm_strdup("event"); +} +#line 55361 "preproc.c" + break; + + case 2365: /* unreserved_keyword: EXCLUDE */ +#line 13755 "preproc.y" + { + (yyval.str) = mm_strdup("exclude"); +} +#line 55369 "preproc.c" + break; + + case 2366: /* unreserved_keyword: EXCLUDING */ +#line 13759 "preproc.y" + { + (yyval.str) = mm_strdup("excluding"); +} +#line 55377 "preproc.c" + break; + + case 2367: /* unreserved_keyword: EXCLUSIVE */ +#line 13763 "preproc.y" + { + (yyval.str) = mm_strdup("exclusive"); +} +#line 55385 "preproc.c" + break; + + case 2368: /* unreserved_keyword: EXECUTE */ +#line 13767 "preproc.y" + { + (yyval.str) = mm_strdup("execute"); +} +#line 55393 "preproc.c" + break; + + case 2369: /* unreserved_keyword: EXPLAIN */ +#line 13771 "preproc.y" + { + (yyval.str) = mm_strdup("explain"); +} +#line 55401 "preproc.c" + break; + + case 2370: /* unreserved_keyword: EXPRESSION */ +#line 13775 "preproc.y" + { + (yyval.str) = mm_strdup("expression"); +} +#line 55409 "preproc.c" + break; + + case 2371: /* unreserved_keyword: EXTENSION */ +#line 13779 "preproc.y" + { + (yyval.str) = mm_strdup("extension"); +} +#line 55417 "preproc.c" + break; + + case 2372: /* unreserved_keyword: EXTERNAL */ +#line 13783 "preproc.y" + { + (yyval.str) = mm_strdup("external"); +} +#line 55425 "preproc.c" + break; + + case 2373: /* unreserved_keyword: FAMILY */ +#line 13787 "preproc.y" + { + (yyval.str) = mm_strdup("family"); +} +#line 55433 "preproc.c" + break; + + case 2374: /* unreserved_keyword: FILTER */ +#line 13791 "preproc.y" + { + (yyval.str) = mm_strdup("filter"); +} +#line 55441 "preproc.c" + break; + + case 2375: /* unreserved_keyword: FINALIZE */ +#line 13795 "preproc.y" + { + (yyval.str) = mm_strdup("finalize"); +} +#line 55449 "preproc.c" + break; + + case 2376: /* unreserved_keyword: FIRST_P */ +#line 13799 "preproc.y" + { + (yyval.str) = mm_strdup("first"); +} +#line 55457 "preproc.c" + break; + + case 2377: /* unreserved_keyword: FOLLOWING */ +#line 13803 "preproc.y" + { + (yyval.str) = mm_strdup("following"); +} +#line 55465 "preproc.c" + break; + + case 2378: /* unreserved_keyword: FORCE */ +#line 13807 "preproc.y" + { + (yyval.str) = mm_strdup("force"); +} +#line 55473 "preproc.c" + break; + + case 2379: /* unreserved_keyword: FORWARD */ +#line 13811 "preproc.y" + { + (yyval.str) = mm_strdup("forward"); +} +#line 55481 "preproc.c" + break; + + case 2380: /* unreserved_keyword: FUNCTION */ +#line 13815 "preproc.y" + { + (yyval.str) = mm_strdup("function"); +} +#line 55489 "preproc.c" + break; + + case 2381: /* unreserved_keyword: FUNCTIONS */ +#line 13819 "preproc.y" + { + (yyval.str) = mm_strdup("functions"); +} +#line 55497 "preproc.c" + break; + + case 2382: /* unreserved_keyword: GENERATED */ +#line 13823 "preproc.y" + { + (yyval.str) = mm_strdup("generated"); +} +#line 55505 "preproc.c" + break; + + case 2383: /* unreserved_keyword: GLOBAL */ +#line 13827 "preproc.y" + { + (yyval.str) = mm_strdup("global"); +} +#line 55513 "preproc.c" + break; + + case 2384: /* unreserved_keyword: GRANTED */ +#line 13831 "preproc.y" + { + (yyval.str) = mm_strdup("granted"); +} +#line 55521 "preproc.c" + break; + + case 2385: /* unreserved_keyword: GROUPS */ +#line 13835 "preproc.y" + { + (yyval.str) = mm_strdup("groups"); +} +#line 55529 "preproc.c" + break; + + case 2386: /* unreserved_keyword: HANDLER */ +#line 13839 "preproc.y" + { + (yyval.str) = mm_strdup("handler"); +} +#line 55537 "preproc.c" + break; + + case 2387: /* unreserved_keyword: HEADER_P */ +#line 13843 "preproc.y" + { + (yyval.str) = mm_strdup("header"); +} +#line 55545 "preproc.c" + break; + + case 2388: /* unreserved_keyword: HOLD */ +#line 13847 "preproc.y" + { + (yyval.str) = mm_strdup("hold"); +} +#line 55553 "preproc.c" + break; + + case 2389: /* unreserved_keyword: IDENTITY_P */ +#line 13851 "preproc.y" + { + (yyval.str) = mm_strdup("identity"); +} +#line 55561 "preproc.c" + break; + + case 2390: /* unreserved_keyword: IF_P */ +#line 13855 "preproc.y" + { + (yyval.str) = mm_strdup("if"); +} +#line 55569 "preproc.c" + break; + + case 2391: /* unreserved_keyword: IMMEDIATE */ +#line 13859 "preproc.y" + { + (yyval.str) = mm_strdup("immediate"); +} +#line 55577 "preproc.c" + break; + + case 2392: /* unreserved_keyword: IMMUTABLE */ +#line 13863 "preproc.y" + { + (yyval.str) = mm_strdup("immutable"); +} +#line 55585 "preproc.c" + break; + + case 2393: /* unreserved_keyword: IMPLICIT_P */ +#line 13867 "preproc.y" + { + (yyval.str) = mm_strdup("implicit"); +} +#line 55593 "preproc.c" + break; + + case 2394: /* unreserved_keyword: IMPORT_P */ +#line 13871 "preproc.y" + { + (yyval.str) = mm_strdup("import"); +} +#line 55601 "preproc.c" + break; + + case 2395: /* unreserved_keyword: INCLUDE */ +#line 13875 "preproc.y" + { + (yyval.str) = mm_strdup("include"); +} +#line 55609 "preproc.c" + break; + + case 2396: /* unreserved_keyword: INCLUDING */ +#line 13879 "preproc.y" + { + (yyval.str) = mm_strdup("including"); +} +#line 55617 "preproc.c" + break; + + case 2397: /* unreserved_keyword: INCREMENT */ +#line 13883 "preproc.y" + { + (yyval.str) = mm_strdup("increment"); +} +#line 55625 "preproc.c" + break; + + case 2398: /* unreserved_keyword: INDEX */ +#line 13887 "preproc.y" + { + (yyval.str) = mm_strdup("index"); +} +#line 55633 "preproc.c" + break; + + case 2399: /* unreserved_keyword: INDEXES */ +#line 13891 "preproc.y" + { + (yyval.str) = mm_strdup("indexes"); +} +#line 55641 "preproc.c" + break; + + case 2400: /* unreserved_keyword: INHERIT */ +#line 13895 "preproc.y" + { + (yyval.str) = mm_strdup("inherit"); +} +#line 55649 "preproc.c" + break; + + case 2401: /* unreserved_keyword: INHERITS */ +#line 13899 "preproc.y" + { + (yyval.str) = mm_strdup("inherits"); +} +#line 55657 "preproc.c" + break; + + case 2402: /* unreserved_keyword: INLINE_P */ +#line 13903 "preproc.y" + { + (yyval.str) = mm_strdup("inline"); +} +#line 55665 "preproc.c" + break; + + case 2403: /* unreserved_keyword: INSENSITIVE */ +#line 13907 "preproc.y" + { + (yyval.str) = mm_strdup("insensitive"); +} +#line 55673 "preproc.c" + break; + + case 2404: /* unreserved_keyword: INSERT */ +#line 13911 "preproc.y" + { + (yyval.str) = mm_strdup("insert"); +} +#line 55681 "preproc.c" + break; + + case 2405: /* unreserved_keyword: INSTEAD */ +#line 13915 "preproc.y" + { + (yyval.str) = mm_strdup("instead"); +} +#line 55689 "preproc.c" + break; + + case 2406: /* unreserved_keyword: INVOKER */ +#line 13919 "preproc.y" + { + (yyval.str) = mm_strdup("invoker"); +} +#line 55697 "preproc.c" + break; + + case 2407: /* unreserved_keyword: ISOLATION */ +#line 13923 "preproc.y" + { + (yyval.str) = mm_strdup("isolation"); +} +#line 55705 "preproc.c" + break; + + case 2408: /* unreserved_keyword: KEY */ +#line 13927 "preproc.y" + { + (yyval.str) = mm_strdup("key"); +} +#line 55713 "preproc.c" + break; + + case 2409: /* unreserved_keyword: LABEL */ +#line 13931 "preproc.y" + { + (yyval.str) = mm_strdup("label"); +} +#line 55721 "preproc.c" + break; + + case 2410: /* unreserved_keyword: LANGUAGE */ +#line 13935 "preproc.y" + { + (yyval.str) = mm_strdup("language"); +} +#line 55729 "preproc.c" + break; + + case 2411: /* unreserved_keyword: LARGE_P */ +#line 13939 "preproc.y" + { + (yyval.str) = mm_strdup("large"); +} +#line 55737 "preproc.c" + break; + + case 2412: /* unreserved_keyword: LAST_P */ +#line 13943 "preproc.y" + { + (yyval.str) = mm_strdup("last"); +} +#line 55745 "preproc.c" + break; + + case 2413: /* unreserved_keyword: LEAKPROOF */ +#line 13947 "preproc.y" + { + (yyval.str) = mm_strdup("leakproof"); +} +#line 55753 "preproc.c" + break; + + case 2414: /* unreserved_keyword: LEVEL */ +#line 13951 "preproc.y" + { + (yyval.str) = mm_strdup("level"); +} +#line 55761 "preproc.c" + break; + + case 2415: /* unreserved_keyword: LISTEN */ +#line 13955 "preproc.y" + { + (yyval.str) = mm_strdup("listen"); +} +#line 55769 "preproc.c" + break; + + case 2416: /* unreserved_keyword: LOAD */ +#line 13959 "preproc.y" + { + (yyval.str) = mm_strdup("load"); +} +#line 55777 "preproc.c" + break; + + case 2417: /* unreserved_keyword: LOCAL */ +#line 13963 "preproc.y" + { + (yyval.str) = mm_strdup("local"); +} +#line 55785 "preproc.c" + break; + + case 2418: /* unreserved_keyword: LOCATION */ +#line 13967 "preproc.y" + { + (yyval.str) = mm_strdup("location"); +} +#line 55793 "preproc.c" + break; + + case 2419: /* unreserved_keyword: LOCK_P */ +#line 13971 "preproc.y" + { + (yyval.str) = mm_strdup("lock"); +} +#line 55801 "preproc.c" + break; + + case 2420: /* unreserved_keyword: LOCKED */ +#line 13975 "preproc.y" + { + (yyval.str) = mm_strdup("locked"); +} +#line 55809 "preproc.c" + break; + + case 2421: /* unreserved_keyword: LOGGED */ +#line 13979 "preproc.y" + { + (yyval.str) = mm_strdup("logged"); +} +#line 55817 "preproc.c" + break; + + case 2422: /* unreserved_keyword: MAPPING */ +#line 13983 "preproc.y" + { + (yyval.str) = mm_strdup("mapping"); +} +#line 55825 "preproc.c" + break; + + case 2423: /* unreserved_keyword: MATCH */ +#line 13987 "preproc.y" + { + (yyval.str) = mm_strdup("match"); +} +#line 55833 "preproc.c" + break; + + case 2424: /* unreserved_keyword: MATERIALIZED */ +#line 13991 "preproc.y" + { + (yyval.str) = mm_strdup("materialized"); +} +#line 55841 "preproc.c" + break; + + case 2425: /* unreserved_keyword: MAXVALUE */ +#line 13995 "preproc.y" + { + (yyval.str) = mm_strdup("maxvalue"); +} +#line 55849 "preproc.c" + break; + + case 2426: /* unreserved_keyword: METHOD */ +#line 13999 "preproc.y" + { + (yyval.str) = mm_strdup("method"); +} +#line 55857 "preproc.c" + break; + + case 2427: /* unreserved_keyword: MINVALUE */ +#line 14003 "preproc.y" + { + (yyval.str) = mm_strdup("minvalue"); +} +#line 55865 "preproc.c" + break; + + case 2428: /* unreserved_keyword: MODE */ +#line 14007 "preproc.y" + { + (yyval.str) = mm_strdup("mode"); +} +#line 55873 "preproc.c" + break; + + case 2429: /* unreserved_keyword: MOVE */ +#line 14011 "preproc.y" + { + (yyval.str) = mm_strdup("move"); +} +#line 55881 "preproc.c" + break; + + case 2430: /* unreserved_keyword: NAME_P */ +#line 14015 "preproc.y" + { + (yyval.str) = mm_strdup("name"); +} +#line 55889 "preproc.c" + break; + + case 2431: /* unreserved_keyword: NAMES */ +#line 14019 "preproc.y" + { + (yyval.str) = mm_strdup("names"); +} +#line 55897 "preproc.c" + break; + + case 2432: /* unreserved_keyword: NEW */ +#line 14023 "preproc.y" + { + (yyval.str) = mm_strdup("new"); +} +#line 55905 "preproc.c" + break; + + case 2433: /* unreserved_keyword: NEXT */ +#line 14027 "preproc.y" + { + (yyval.str) = mm_strdup("next"); +} +#line 55913 "preproc.c" + break; + + case 2434: /* unreserved_keyword: NFC */ +#line 14031 "preproc.y" + { + (yyval.str) = mm_strdup("nfc"); +} +#line 55921 "preproc.c" + break; + + case 2435: /* unreserved_keyword: NFD */ +#line 14035 "preproc.y" + { + (yyval.str) = mm_strdup("nfd"); +} +#line 55929 "preproc.c" + break; + + case 2436: /* unreserved_keyword: NFKC */ +#line 14039 "preproc.y" + { + (yyval.str) = mm_strdup("nfkc"); +} +#line 55937 "preproc.c" + break; + + case 2437: /* unreserved_keyword: NFKD */ +#line 14043 "preproc.y" + { + (yyval.str) = mm_strdup("nfkd"); +} +#line 55945 "preproc.c" + break; + + case 2438: /* unreserved_keyword: NO */ +#line 14047 "preproc.y" + { + (yyval.str) = mm_strdup("no"); +} +#line 55953 "preproc.c" + break; + + case 2439: /* unreserved_keyword: NORMALIZED */ +#line 14051 "preproc.y" + { + (yyval.str) = mm_strdup("normalized"); +} +#line 55961 "preproc.c" + break; + + case 2440: /* unreserved_keyword: NOTHING */ +#line 14055 "preproc.y" + { + (yyval.str) = mm_strdup("nothing"); +} +#line 55969 "preproc.c" + break; + + case 2441: /* unreserved_keyword: NOTIFY */ +#line 14059 "preproc.y" + { + (yyval.str) = mm_strdup("notify"); +} +#line 55977 "preproc.c" + break; + + case 2442: /* unreserved_keyword: NOWAIT */ +#line 14063 "preproc.y" + { + (yyval.str) = mm_strdup("nowait"); +} +#line 55985 "preproc.c" + break; + + case 2443: /* unreserved_keyword: NULLS_P */ +#line 14067 "preproc.y" + { + (yyval.str) = mm_strdup("nulls"); +} +#line 55993 "preproc.c" + break; + + case 2444: /* unreserved_keyword: OBJECT_P */ +#line 14071 "preproc.y" + { + (yyval.str) = mm_strdup("object"); +} +#line 56001 "preproc.c" + break; + + case 2445: /* unreserved_keyword: OF */ +#line 14075 "preproc.y" + { + (yyval.str) = mm_strdup("of"); +} +#line 56009 "preproc.c" + break; + + case 2446: /* unreserved_keyword: OFF */ +#line 14079 "preproc.y" + { + (yyval.str) = mm_strdup("off"); +} +#line 56017 "preproc.c" + break; + + case 2447: /* unreserved_keyword: OIDS */ +#line 14083 "preproc.y" + { + (yyval.str) = mm_strdup("oids"); +} +#line 56025 "preproc.c" + break; + + case 2448: /* unreserved_keyword: OLD */ +#line 14087 "preproc.y" + { + (yyval.str) = mm_strdup("old"); +} +#line 56033 "preproc.c" + break; + + case 2449: /* unreserved_keyword: OPERATOR */ +#line 14091 "preproc.y" + { + (yyval.str) = mm_strdup("operator"); +} +#line 56041 "preproc.c" + break; + + case 2450: /* unreserved_keyword: OPTION */ +#line 14095 "preproc.y" + { + (yyval.str) = mm_strdup("option"); +} +#line 56049 "preproc.c" + break; + + case 2451: /* unreserved_keyword: OPTIONS */ +#line 14099 "preproc.y" + { + (yyval.str) = mm_strdup("options"); +} +#line 56057 "preproc.c" + break; + + case 2452: /* unreserved_keyword: ORDINALITY */ +#line 14103 "preproc.y" + { + (yyval.str) = mm_strdup("ordinality"); +} +#line 56065 "preproc.c" + break; + + case 2453: /* unreserved_keyword: OTHERS */ +#line 14107 "preproc.y" + { + (yyval.str) = mm_strdup("others"); +} +#line 56073 "preproc.c" + break; + + case 2454: /* unreserved_keyword: OVER */ +#line 14111 "preproc.y" + { + (yyval.str) = mm_strdup("over"); +} +#line 56081 "preproc.c" + break; + + case 2455: /* unreserved_keyword: OVERRIDING */ +#line 14115 "preproc.y" + { + (yyval.str) = mm_strdup("overriding"); +} +#line 56089 "preproc.c" + break; + + case 2456: /* unreserved_keyword: OWNED */ +#line 14119 "preproc.y" + { + (yyval.str) = mm_strdup("owned"); +} +#line 56097 "preproc.c" + break; + + case 2457: /* unreserved_keyword: OWNER */ +#line 14123 "preproc.y" + { + (yyval.str) = mm_strdup("owner"); +} +#line 56105 "preproc.c" + break; + + case 2458: /* unreserved_keyword: PARALLEL */ +#line 14127 "preproc.y" + { + (yyval.str) = mm_strdup("parallel"); +} +#line 56113 "preproc.c" + break; + + case 2459: /* unreserved_keyword: PARSER */ +#line 14131 "preproc.y" + { + (yyval.str) = mm_strdup("parser"); +} +#line 56121 "preproc.c" + break; + + case 2460: /* unreserved_keyword: PARTIAL */ +#line 14135 "preproc.y" + { + (yyval.str) = mm_strdup("partial"); +} +#line 56129 "preproc.c" + break; + + case 2461: /* unreserved_keyword: PARTITION */ +#line 14139 "preproc.y" + { + (yyval.str) = mm_strdup("partition"); +} +#line 56137 "preproc.c" + break; + + case 2462: /* unreserved_keyword: PASSING */ +#line 14143 "preproc.y" + { + (yyval.str) = mm_strdup("passing"); +} +#line 56145 "preproc.c" + break; + + case 2463: /* unreserved_keyword: PASSWORD */ +#line 14147 "preproc.y" + { + (yyval.str) = mm_strdup("password"); +} +#line 56153 "preproc.c" + break; + + case 2464: /* unreserved_keyword: PLANS */ +#line 14151 "preproc.y" + { + (yyval.str) = mm_strdup("plans"); +} +#line 56161 "preproc.c" + break; + + case 2465: /* unreserved_keyword: POLICY */ +#line 14155 "preproc.y" + { + (yyval.str) = mm_strdup("policy"); +} +#line 56169 "preproc.c" + break; + + case 2466: /* unreserved_keyword: PRECEDING */ +#line 14159 "preproc.y" + { + (yyval.str) = mm_strdup("preceding"); +} +#line 56177 "preproc.c" + break; + + case 2467: /* unreserved_keyword: PREPARE */ +#line 14163 "preproc.y" + { + (yyval.str) = mm_strdup("prepare"); +} +#line 56185 "preproc.c" + break; + + case 2468: /* unreserved_keyword: PREPARED */ +#line 14167 "preproc.y" + { + (yyval.str) = mm_strdup("prepared"); +} +#line 56193 "preproc.c" + break; + + case 2469: /* unreserved_keyword: PRESERVE */ +#line 14171 "preproc.y" + { + (yyval.str) = mm_strdup("preserve"); +} +#line 56201 "preproc.c" + break; + + case 2470: /* unreserved_keyword: PRIOR */ +#line 14175 "preproc.y" + { + (yyval.str) = mm_strdup("prior"); +} +#line 56209 "preproc.c" + break; + + case 2471: /* unreserved_keyword: PRIVILEGES */ +#line 14179 "preproc.y" + { + (yyval.str) = mm_strdup("privileges"); +} +#line 56217 "preproc.c" + break; + + case 2472: /* unreserved_keyword: PROCEDURAL */ +#line 14183 "preproc.y" + { + (yyval.str) = mm_strdup("procedural"); +} +#line 56225 "preproc.c" + break; + + case 2473: /* unreserved_keyword: PROCEDURE */ +#line 14187 "preproc.y" + { + (yyval.str) = mm_strdup("procedure"); +} +#line 56233 "preproc.c" + break; + + case 2474: /* unreserved_keyword: PROCEDURES */ +#line 14191 "preproc.y" + { + (yyval.str) = mm_strdup("procedures"); +} +#line 56241 "preproc.c" + break; + + case 2475: /* unreserved_keyword: PROGRAM */ +#line 14195 "preproc.y" + { + (yyval.str) = mm_strdup("program"); +} +#line 56249 "preproc.c" + break; + + case 2476: /* unreserved_keyword: PUBLICATION */ +#line 14199 "preproc.y" + { + (yyval.str) = mm_strdup("publication"); +} +#line 56257 "preproc.c" + break; + + case 2477: /* unreserved_keyword: QUOTE */ +#line 14203 "preproc.y" + { + (yyval.str) = mm_strdup("quote"); +} +#line 56265 "preproc.c" + break; + + case 2478: /* unreserved_keyword: RANGE */ +#line 14207 "preproc.y" + { + (yyval.str) = mm_strdup("range"); +} +#line 56273 "preproc.c" + break; + + case 2479: /* unreserved_keyword: READ */ +#line 14211 "preproc.y" + { + (yyval.str) = mm_strdup("read"); +} +#line 56281 "preproc.c" + break; + + case 2480: /* unreserved_keyword: REASSIGN */ +#line 14215 "preproc.y" + { + (yyval.str) = mm_strdup("reassign"); +} +#line 56289 "preproc.c" + break; + + case 2481: /* unreserved_keyword: RECHECK */ +#line 14219 "preproc.y" + { + (yyval.str) = mm_strdup("recheck"); +} +#line 56297 "preproc.c" + break; + + case 2482: /* unreserved_keyword: RECURSIVE */ +#line 14223 "preproc.y" + { + (yyval.str) = mm_strdup("recursive"); +} +#line 56305 "preproc.c" + break; + + case 2483: /* unreserved_keyword: REF */ +#line 14227 "preproc.y" + { + (yyval.str) = mm_strdup("ref"); +} +#line 56313 "preproc.c" + break; + + case 2484: /* unreserved_keyword: REFERENCING */ +#line 14231 "preproc.y" + { + (yyval.str) = mm_strdup("referencing"); +} +#line 56321 "preproc.c" + break; + + case 2485: /* unreserved_keyword: REFRESH */ +#line 14235 "preproc.y" + { + (yyval.str) = mm_strdup("refresh"); +} +#line 56329 "preproc.c" + break; + + case 2486: /* unreserved_keyword: REINDEX */ +#line 14239 "preproc.y" + { + (yyval.str) = mm_strdup("reindex"); +} +#line 56337 "preproc.c" + break; + + case 2487: /* unreserved_keyword: RELATIVE_P */ +#line 14243 "preproc.y" + { + (yyval.str) = mm_strdup("relative"); +} +#line 56345 "preproc.c" + break; + + case 2488: /* unreserved_keyword: RELEASE */ +#line 14247 "preproc.y" + { + (yyval.str) = mm_strdup("release"); +} +#line 56353 "preproc.c" + break; + + case 2489: /* unreserved_keyword: RENAME */ +#line 14251 "preproc.y" + { + (yyval.str) = mm_strdup("rename"); +} +#line 56361 "preproc.c" + break; + + case 2490: /* unreserved_keyword: REPEATABLE */ +#line 14255 "preproc.y" + { + (yyval.str) = mm_strdup("repeatable"); +} +#line 56369 "preproc.c" + break; + + case 2491: /* unreserved_keyword: REPLACE */ +#line 14259 "preproc.y" + { + (yyval.str) = mm_strdup("replace"); +} +#line 56377 "preproc.c" + break; + + case 2492: /* unreserved_keyword: REPLICA */ +#line 14263 "preproc.y" + { + (yyval.str) = mm_strdup("replica"); +} +#line 56385 "preproc.c" + break; + + case 2493: /* unreserved_keyword: RESET */ +#line 14267 "preproc.y" + { + (yyval.str) = mm_strdup("reset"); +} +#line 56393 "preproc.c" + break; + + case 2494: /* unreserved_keyword: RESTART */ +#line 14271 "preproc.y" + { + (yyval.str) = mm_strdup("restart"); +} +#line 56401 "preproc.c" + break; + + case 2495: /* unreserved_keyword: RESTRICT */ +#line 14275 "preproc.y" + { + (yyval.str) = mm_strdup("restrict"); +} +#line 56409 "preproc.c" + break; + + case 2496: /* unreserved_keyword: RETURN */ +#line 14279 "preproc.y" + { + (yyval.str) = mm_strdup("return"); +} +#line 56417 "preproc.c" + break; + + case 2497: /* unreserved_keyword: RETURNS */ +#line 14283 "preproc.y" + { + (yyval.str) = mm_strdup("returns"); +} +#line 56425 "preproc.c" + break; + + case 2498: /* unreserved_keyword: REVOKE */ +#line 14287 "preproc.y" + { + (yyval.str) = mm_strdup("revoke"); +} +#line 56433 "preproc.c" + break; + + case 2499: /* unreserved_keyword: ROLE */ +#line 14291 "preproc.y" + { + (yyval.str) = mm_strdup("role"); +} +#line 56441 "preproc.c" + break; + + case 2500: /* unreserved_keyword: ROLLBACK */ +#line 14295 "preproc.y" + { + (yyval.str) = mm_strdup("rollback"); +} +#line 56449 "preproc.c" + break; + + case 2501: /* unreserved_keyword: ROLLUP */ +#line 14299 "preproc.y" + { + (yyval.str) = mm_strdup("rollup"); +} +#line 56457 "preproc.c" + break; + + case 2502: /* unreserved_keyword: ROUTINE */ +#line 14303 "preproc.y" + { + (yyval.str) = mm_strdup("routine"); +} +#line 56465 "preproc.c" + break; + + case 2503: /* unreserved_keyword: ROUTINES */ +#line 14307 "preproc.y" + { + (yyval.str) = mm_strdup("routines"); +} +#line 56473 "preproc.c" + break; + + case 2504: /* unreserved_keyword: ROWS */ +#line 14311 "preproc.y" + { + (yyval.str) = mm_strdup("rows"); +} +#line 56481 "preproc.c" + break; + + case 2505: /* unreserved_keyword: RULE */ +#line 14315 "preproc.y" + { + (yyval.str) = mm_strdup("rule"); +} +#line 56489 "preproc.c" + break; + + case 2506: /* unreserved_keyword: SAVEPOINT */ +#line 14319 "preproc.y" + { + (yyval.str) = mm_strdup("savepoint"); +} +#line 56497 "preproc.c" + break; + + case 2507: /* unreserved_keyword: SCHEMA */ +#line 14323 "preproc.y" + { + (yyval.str) = mm_strdup("schema"); +} +#line 56505 "preproc.c" + break; + + case 2508: /* unreserved_keyword: SCHEMAS */ +#line 14327 "preproc.y" + { + (yyval.str) = mm_strdup("schemas"); +} +#line 56513 "preproc.c" + break; + + case 2509: /* unreserved_keyword: SCROLL */ +#line 14331 "preproc.y" + { + (yyval.str) = mm_strdup("scroll"); +} +#line 56521 "preproc.c" + break; + + case 2510: /* unreserved_keyword: SEARCH */ +#line 14335 "preproc.y" + { + (yyval.str) = mm_strdup("search"); +} +#line 56529 "preproc.c" + break; + + case 2511: /* unreserved_keyword: SECURITY */ +#line 14339 "preproc.y" + { + (yyval.str) = mm_strdup("security"); +} +#line 56537 "preproc.c" + break; + + case 2512: /* unreserved_keyword: SEQUENCE */ +#line 14343 "preproc.y" + { + (yyval.str) = mm_strdup("sequence"); +} +#line 56545 "preproc.c" + break; + + case 2513: /* unreserved_keyword: SEQUENCES */ +#line 14347 "preproc.y" + { + (yyval.str) = mm_strdup("sequences"); +} +#line 56553 "preproc.c" + break; + + case 2514: /* unreserved_keyword: SERIALIZABLE */ +#line 14351 "preproc.y" + { + (yyval.str) = mm_strdup("serializable"); +} +#line 56561 "preproc.c" + break; + + case 2515: /* unreserved_keyword: SERVER */ +#line 14355 "preproc.y" + { + (yyval.str) = mm_strdup("server"); +} +#line 56569 "preproc.c" + break; + + case 2516: /* unreserved_keyword: SESSION */ +#line 14359 "preproc.y" + { + (yyval.str) = mm_strdup("session"); +} +#line 56577 "preproc.c" + break; + + case 2517: /* unreserved_keyword: SET */ +#line 14363 "preproc.y" + { + (yyval.str) = mm_strdup("set"); +} +#line 56585 "preproc.c" + break; + + case 2518: /* unreserved_keyword: SETS */ +#line 14367 "preproc.y" + { + (yyval.str) = mm_strdup("sets"); +} +#line 56593 "preproc.c" + break; + + case 2519: /* unreserved_keyword: SHARE */ +#line 14371 "preproc.y" + { + (yyval.str) = mm_strdup("share"); +} +#line 56601 "preproc.c" + break; + + case 2520: /* unreserved_keyword: SHOW */ +#line 14375 "preproc.y" + { + (yyval.str) = mm_strdup("show"); +} +#line 56609 "preproc.c" + break; + + case 2521: /* unreserved_keyword: SIMPLE */ +#line 14379 "preproc.y" + { + (yyval.str) = mm_strdup("simple"); +} +#line 56617 "preproc.c" + break; + + case 2522: /* unreserved_keyword: SKIP */ +#line 14383 "preproc.y" + { + (yyval.str) = mm_strdup("skip"); +} +#line 56625 "preproc.c" + break; + + case 2523: /* unreserved_keyword: SNAPSHOT */ +#line 14387 "preproc.y" + { + (yyval.str) = mm_strdup("snapshot"); +} +#line 56633 "preproc.c" + break; + + case 2524: /* unreserved_keyword: SQL_P */ +#line 14391 "preproc.y" + { + (yyval.str) = mm_strdup("sql"); +} +#line 56641 "preproc.c" + break; + + case 2525: /* unreserved_keyword: STABLE */ +#line 14395 "preproc.y" + { + (yyval.str) = mm_strdup("stable"); +} +#line 56649 "preproc.c" + break; + + case 2526: /* unreserved_keyword: STANDALONE_P */ +#line 14399 "preproc.y" + { + (yyval.str) = mm_strdup("standalone"); +} +#line 56657 "preproc.c" + break; + + case 2527: /* unreserved_keyword: START */ +#line 14403 "preproc.y" + { + (yyval.str) = mm_strdup("start"); +} +#line 56665 "preproc.c" + break; + + case 2528: /* unreserved_keyword: STATEMENT */ +#line 14407 "preproc.y" + { + (yyval.str) = mm_strdup("statement"); +} +#line 56673 "preproc.c" + break; + + case 2529: /* unreserved_keyword: STATISTICS */ +#line 14411 "preproc.y" + { + (yyval.str) = mm_strdup("statistics"); +} +#line 56681 "preproc.c" + break; + + case 2530: /* unreserved_keyword: STDIN */ +#line 14415 "preproc.y" + { + (yyval.str) = mm_strdup("stdin"); +} +#line 56689 "preproc.c" + break; + + case 2531: /* unreserved_keyword: STDOUT */ +#line 14419 "preproc.y" + { + (yyval.str) = mm_strdup("stdout"); +} +#line 56697 "preproc.c" + break; + + case 2532: /* unreserved_keyword: STORAGE */ +#line 14423 "preproc.y" + { + (yyval.str) = mm_strdup("storage"); +} +#line 56705 "preproc.c" + break; + + case 2533: /* unreserved_keyword: STORED */ +#line 14427 "preproc.y" + { + (yyval.str) = mm_strdup("stored"); +} +#line 56713 "preproc.c" + break; + + case 2534: /* unreserved_keyword: STRICT_P */ +#line 14431 "preproc.y" + { + (yyval.str) = mm_strdup("strict"); +} +#line 56721 "preproc.c" + break; + + case 2535: /* unreserved_keyword: STRIP_P */ +#line 14435 "preproc.y" + { + (yyval.str) = mm_strdup("strip"); +} +#line 56729 "preproc.c" + break; + + case 2536: /* unreserved_keyword: SUBSCRIPTION */ +#line 14439 "preproc.y" + { + (yyval.str) = mm_strdup("subscription"); +} +#line 56737 "preproc.c" + break; + + case 2537: /* unreserved_keyword: SUPPORT */ +#line 14443 "preproc.y" + { + (yyval.str) = mm_strdup("support"); +} +#line 56745 "preproc.c" + break; + + case 2538: /* unreserved_keyword: SYSID */ +#line 14447 "preproc.y" + { + (yyval.str) = mm_strdup("sysid"); +} +#line 56753 "preproc.c" + break; + + case 2539: /* unreserved_keyword: SYSTEM_P */ +#line 14451 "preproc.y" + { + (yyval.str) = mm_strdup("system"); +} +#line 56761 "preproc.c" + break; + + case 2540: /* unreserved_keyword: TABLES */ +#line 14455 "preproc.y" + { + (yyval.str) = mm_strdup("tables"); +} +#line 56769 "preproc.c" + break; + + case 2541: /* unreserved_keyword: TABLESPACE */ +#line 14459 "preproc.y" + { + (yyval.str) = mm_strdup("tablespace"); +} +#line 56777 "preproc.c" + break; + + case 2542: /* unreserved_keyword: TEMP */ +#line 14463 "preproc.y" + { + (yyval.str) = mm_strdup("temp"); +} +#line 56785 "preproc.c" + break; + + case 2543: /* unreserved_keyword: TEMPLATE */ +#line 14467 "preproc.y" + { + (yyval.str) = mm_strdup("template"); +} +#line 56793 "preproc.c" + break; + + case 2544: /* unreserved_keyword: TEMPORARY */ +#line 14471 "preproc.y" + { + (yyval.str) = mm_strdup("temporary"); +} +#line 56801 "preproc.c" + break; + + case 2545: /* unreserved_keyword: TEXT_P */ +#line 14475 "preproc.y" + { + (yyval.str) = mm_strdup("text"); +} +#line 56809 "preproc.c" + break; + + case 2546: /* unreserved_keyword: TIES */ +#line 14479 "preproc.y" + { + (yyval.str) = mm_strdup("ties"); +} +#line 56817 "preproc.c" + break; + + case 2547: /* unreserved_keyword: TRANSACTION */ +#line 14483 "preproc.y" + { + (yyval.str) = mm_strdup("transaction"); +} +#line 56825 "preproc.c" + break; + + case 2548: /* unreserved_keyword: TRANSFORM */ +#line 14487 "preproc.y" + { + (yyval.str) = mm_strdup("transform"); +} +#line 56833 "preproc.c" + break; + + case 2549: /* unreserved_keyword: TRIGGER */ +#line 14491 "preproc.y" + { + (yyval.str) = mm_strdup("trigger"); +} +#line 56841 "preproc.c" + break; + + case 2550: /* unreserved_keyword: TRUNCATE */ +#line 14495 "preproc.y" + { + (yyval.str) = mm_strdup("truncate"); +} +#line 56849 "preproc.c" + break; + + case 2551: /* unreserved_keyword: TRUSTED */ +#line 14499 "preproc.y" + { + (yyval.str) = mm_strdup("trusted"); +} +#line 56857 "preproc.c" + break; + + case 2552: /* unreserved_keyword: TYPE_P */ +#line 14503 "preproc.y" + { + (yyval.str) = mm_strdup("type"); +} +#line 56865 "preproc.c" + break; + + case 2553: /* unreserved_keyword: TYPES_P */ +#line 14507 "preproc.y" + { + (yyval.str) = mm_strdup("types"); +} +#line 56873 "preproc.c" + break; + + case 2554: /* unreserved_keyword: UESCAPE */ +#line 14511 "preproc.y" + { + (yyval.str) = mm_strdup("uescape"); +} +#line 56881 "preproc.c" + break; + + case 2555: /* unreserved_keyword: UNBOUNDED */ +#line 14515 "preproc.y" + { + (yyval.str) = mm_strdup("unbounded"); +} +#line 56889 "preproc.c" + break; + + case 2556: /* unreserved_keyword: UNCOMMITTED */ +#line 14519 "preproc.y" + { + (yyval.str) = mm_strdup("uncommitted"); +} +#line 56897 "preproc.c" + break; + + case 2557: /* unreserved_keyword: UNENCRYPTED */ +#line 14523 "preproc.y" + { + (yyval.str) = mm_strdup("unencrypted"); +} +#line 56905 "preproc.c" + break; + + case 2558: /* unreserved_keyword: UNKNOWN */ +#line 14527 "preproc.y" + { + (yyval.str) = mm_strdup("unknown"); +} +#line 56913 "preproc.c" + break; + + case 2559: /* unreserved_keyword: UNLISTEN */ +#line 14531 "preproc.y" + { + (yyval.str) = mm_strdup("unlisten"); +} +#line 56921 "preproc.c" + break; + + case 2560: /* unreserved_keyword: UNLOGGED */ +#line 14535 "preproc.y" + { + (yyval.str) = mm_strdup("unlogged"); +} +#line 56929 "preproc.c" + break; + + case 2561: /* unreserved_keyword: UNTIL */ +#line 14539 "preproc.y" + { + (yyval.str) = mm_strdup("until"); +} +#line 56937 "preproc.c" + break; + + case 2562: /* unreserved_keyword: UPDATE */ +#line 14543 "preproc.y" + { + (yyval.str) = mm_strdup("update"); +} +#line 56945 "preproc.c" + break; + + case 2563: /* unreserved_keyword: VACUUM */ +#line 14547 "preproc.y" + { + (yyval.str) = mm_strdup("vacuum"); +} +#line 56953 "preproc.c" + break; + + case 2564: /* unreserved_keyword: VALID */ +#line 14551 "preproc.y" + { + (yyval.str) = mm_strdup("valid"); +} +#line 56961 "preproc.c" + break; + + case 2565: /* unreserved_keyword: VALIDATE */ +#line 14555 "preproc.y" + { + (yyval.str) = mm_strdup("validate"); +} +#line 56969 "preproc.c" + break; + + case 2566: /* unreserved_keyword: VALIDATOR */ +#line 14559 "preproc.y" + { + (yyval.str) = mm_strdup("validator"); +} +#line 56977 "preproc.c" + break; + + case 2567: /* unreserved_keyword: VALUE_P */ +#line 14563 "preproc.y" + { + (yyval.str) = mm_strdup("value"); +} +#line 56985 "preproc.c" + break; + + case 2568: /* unreserved_keyword: VARYING */ +#line 14567 "preproc.y" + { + (yyval.str) = mm_strdup("varying"); +} +#line 56993 "preproc.c" + break; + + case 2569: /* unreserved_keyword: VERSION_P */ +#line 14571 "preproc.y" + { + (yyval.str) = mm_strdup("version"); +} +#line 57001 "preproc.c" + break; + + case 2570: /* unreserved_keyword: VIEW */ +#line 14575 "preproc.y" + { + (yyval.str) = mm_strdup("view"); +} +#line 57009 "preproc.c" + break; + + case 2571: /* unreserved_keyword: VIEWS */ +#line 14579 "preproc.y" + { + (yyval.str) = mm_strdup("views"); +} +#line 57017 "preproc.c" + break; + + case 2572: /* unreserved_keyword: VOLATILE */ +#line 14583 "preproc.y" + { + (yyval.str) = mm_strdup("volatile"); +} +#line 57025 "preproc.c" + break; + + case 2573: /* unreserved_keyword: WHITESPACE_P */ +#line 14587 "preproc.y" + { + (yyval.str) = mm_strdup("whitespace"); +} +#line 57033 "preproc.c" + break; + + case 2574: /* unreserved_keyword: WITHIN */ +#line 14591 "preproc.y" + { + (yyval.str) = mm_strdup("within"); +} +#line 57041 "preproc.c" + break; + + case 2575: /* unreserved_keyword: WITHOUT */ +#line 14595 "preproc.y" + { + (yyval.str) = mm_strdup("without"); +} +#line 57049 "preproc.c" + break; + + case 2576: /* unreserved_keyword: WORK */ +#line 14599 "preproc.y" + { + (yyval.str) = mm_strdup("work"); +} +#line 57057 "preproc.c" + break; + + case 2577: /* unreserved_keyword: WRAPPER */ +#line 14603 "preproc.y" + { + (yyval.str) = mm_strdup("wrapper"); +} +#line 57065 "preproc.c" + break; + + case 2578: /* unreserved_keyword: WRITE */ +#line 14607 "preproc.y" + { + (yyval.str) = mm_strdup("write"); +} +#line 57073 "preproc.c" + break; + + case 2579: /* unreserved_keyword: XML_P */ +#line 14611 "preproc.y" + { + (yyval.str) = mm_strdup("xml"); +} +#line 57081 "preproc.c" + break; + + case 2580: /* unreserved_keyword: YES_P */ +#line 14615 "preproc.y" + { + (yyval.str) = mm_strdup("yes"); +} +#line 57089 "preproc.c" + break; + + case 2581: /* unreserved_keyword: ZONE */ +#line 14619 "preproc.y" + { + (yyval.str) = mm_strdup("zone"); +} +#line 57097 "preproc.c" + break; + + case 2582: /* col_name_keyword: BETWEEN */ +#line 14627 "preproc.y" + { + (yyval.str) = mm_strdup("between"); +} +#line 57105 "preproc.c" + break; + + case 2583: /* col_name_keyword: BIGINT */ +#line 14631 "preproc.y" + { + (yyval.str) = mm_strdup("bigint"); +} +#line 57113 "preproc.c" + break; + + case 2584: /* col_name_keyword: BIT */ +#line 14635 "preproc.y" + { + (yyval.str) = mm_strdup("bit"); +} +#line 57121 "preproc.c" + break; + + case 2585: /* col_name_keyword: BOOLEAN_P */ +#line 14639 "preproc.y" + { + (yyval.str) = mm_strdup("boolean"); +} +#line 57129 "preproc.c" + break; + + case 2586: /* col_name_keyword: CHARACTER */ +#line 14643 "preproc.y" + { + (yyval.str) = mm_strdup("character"); +} +#line 57137 "preproc.c" + break; + + case 2587: /* col_name_keyword: COALESCE */ +#line 14647 "preproc.y" + { + (yyval.str) = mm_strdup("coalesce"); +} +#line 57145 "preproc.c" + break; + + case 2588: /* col_name_keyword: DEC */ +#line 14651 "preproc.y" + { + (yyval.str) = mm_strdup("dec"); +} +#line 57153 "preproc.c" + break; + + case 2589: /* col_name_keyword: DECIMAL_P */ +#line 14655 "preproc.y" + { + (yyval.str) = mm_strdup("decimal"); +} +#line 57161 "preproc.c" + break; + + case 2590: /* col_name_keyword: EXISTS */ +#line 14659 "preproc.y" + { + (yyval.str) = mm_strdup("exists"); +} +#line 57169 "preproc.c" + break; + + case 2591: /* col_name_keyword: EXTRACT */ +#line 14663 "preproc.y" + { + (yyval.str) = mm_strdup("extract"); +} +#line 57177 "preproc.c" + break; + + case 2592: /* col_name_keyword: FLOAT_P */ +#line 14667 "preproc.y" + { + (yyval.str) = mm_strdup("float"); +} +#line 57185 "preproc.c" + break; + + case 2593: /* col_name_keyword: GREATEST */ +#line 14671 "preproc.y" + { + (yyval.str) = mm_strdup("greatest"); +} +#line 57193 "preproc.c" + break; + + case 2594: /* col_name_keyword: GROUPING */ +#line 14675 "preproc.y" + { + (yyval.str) = mm_strdup("grouping"); +} +#line 57201 "preproc.c" + break; + + case 2595: /* col_name_keyword: INOUT */ +#line 14679 "preproc.y" + { + (yyval.str) = mm_strdup("inout"); +} +#line 57209 "preproc.c" + break; + + case 2596: /* col_name_keyword: INTEGER */ +#line 14683 "preproc.y" + { + (yyval.str) = mm_strdup("integer"); +} +#line 57217 "preproc.c" + break; + + case 2597: /* col_name_keyword: INTERVAL */ +#line 14687 "preproc.y" + { + (yyval.str) = mm_strdup("interval"); +} +#line 57225 "preproc.c" + break; + + case 2598: /* col_name_keyword: LEAST */ +#line 14691 "preproc.y" + { + (yyval.str) = mm_strdup("least"); +} +#line 57233 "preproc.c" + break; + + case 2599: /* col_name_keyword: NATIONAL */ +#line 14695 "preproc.y" + { + (yyval.str) = mm_strdup("national"); +} +#line 57241 "preproc.c" + break; + + case 2600: /* col_name_keyword: NCHAR */ +#line 14699 "preproc.y" + { + (yyval.str) = mm_strdup("nchar"); +} +#line 57249 "preproc.c" + break; + + case 2601: /* col_name_keyword: NONE */ +#line 14703 "preproc.y" + { + (yyval.str) = mm_strdup("none"); +} +#line 57257 "preproc.c" + break; + + case 2602: /* col_name_keyword: NORMALIZE */ +#line 14707 "preproc.y" + { + (yyval.str) = mm_strdup("normalize"); +} +#line 57265 "preproc.c" + break; + + case 2603: /* col_name_keyword: NULLIF */ +#line 14711 "preproc.y" + { + (yyval.str) = mm_strdup("nullif"); +} +#line 57273 "preproc.c" + break; + + case 2604: /* col_name_keyword: NUMERIC */ +#line 14715 "preproc.y" + { + (yyval.str) = mm_strdup("numeric"); +} +#line 57281 "preproc.c" + break; + + case 2605: /* col_name_keyword: OUT_P */ +#line 14719 "preproc.y" + { + (yyval.str) = mm_strdup("out"); +} +#line 57289 "preproc.c" + break; + + case 2606: /* col_name_keyword: OVERLAY */ +#line 14723 "preproc.y" + { + (yyval.str) = mm_strdup("overlay"); +} +#line 57297 "preproc.c" + break; + + case 2607: /* col_name_keyword: POSITION */ +#line 14727 "preproc.y" + { + (yyval.str) = mm_strdup("position"); +} +#line 57305 "preproc.c" + break; + + case 2608: /* col_name_keyword: PRECISION */ +#line 14731 "preproc.y" + { + (yyval.str) = mm_strdup("precision"); +} +#line 57313 "preproc.c" + break; + + case 2609: /* col_name_keyword: REAL */ +#line 14735 "preproc.y" + { + (yyval.str) = mm_strdup("real"); +} +#line 57321 "preproc.c" + break; + + case 2610: /* col_name_keyword: ROW */ +#line 14739 "preproc.y" + { + (yyval.str) = mm_strdup("row"); +} +#line 57329 "preproc.c" + break; + + case 2611: /* col_name_keyword: SETOF */ +#line 14743 "preproc.y" + { + (yyval.str) = mm_strdup("setof"); +} +#line 57337 "preproc.c" + break; + + case 2612: /* col_name_keyword: SMALLINT */ +#line 14747 "preproc.y" + { + (yyval.str) = mm_strdup("smallint"); +} +#line 57345 "preproc.c" + break; + + case 2613: /* col_name_keyword: SUBSTRING */ +#line 14751 "preproc.y" + { + (yyval.str) = mm_strdup("substring"); +} +#line 57353 "preproc.c" + break; + + case 2614: /* col_name_keyword: TIME */ +#line 14755 "preproc.y" + { + (yyval.str) = mm_strdup("time"); +} +#line 57361 "preproc.c" + break; + + case 2615: /* col_name_keyword: TIMESTAMP */ +#line 14759 "preproc.y" + { + (yyval.str) = mm_strdup("timestamp"); +} +#line 57369 "preproc.c" + break; + + case 2616: /* col_name_keyword: TREAT */ +#line 14763 "preproc.y" + { + (yyval.str) = mm_strdup("treat"); +} +#line 57377 "preproc.c" + break; + + case 2617: /* col_name_keyword: TRIM */ +#line 14767 "preproc.y" + { + (yyval.str) = mm_strdup("trim"); +} +#line 57385 "preproc.c" + break; + + case 2618: /* col_name_keyword: VARCHAR */ +#line 14771 "preproc.y" + { + (yyval.str) = mm_strdup("varchar"); +} +#line 57393 "preproc.c" + break; + + case 2619: /* col_name_keyword: XMLATTRIBUTES */ +#line 14775 "preproc.y" + { + (yyval.str) = mm_strdup("xmlattributes"); +} +#line 57401 "preproc.c" + break; + + case 2620: /* col_name_keyword: XMLCONCAT */ +#line 14779 "preproc.y" + { + (yyval.str) = mm_strdup("xmlconcat"); +} +#line 57409 "preproc.c" + break; + + case 2621: /* col_name_keyword: XMLELEMENT */ +#line 14783 "preproc.y" + { + (yyval.str) = mm_strdup("xmlelement"); +} +#line 57417 "preproc.c" + break; + + case 2622: /* col_name_keyword: XMLEXISTS */ +#line 14787 "preproc.y" + { + (yyval.str) = mm_strdup("xmlexists"); +} +#line 57425 "preproc.c" + break; + + case 2623: /* col_name_keyword: XMLFOREST */ +#line 14791 "preproc.y" + { + (yyval.str) = mm_strdup("xmlforest"); +} +#line 57433 "preproc.c" + break; + + case 2624: /* col_name_keyword: XMLNAMESPACES */ +#line 14795 "preproc.y" + { + (yyval.str) = mm_strdup("xmlnamespaces"); +} +#line 57441 "preproc.c" + break; + + case 2625: /* col_name_keyword: XMLPARSE */ +#line 14799 "preproc.y" + { + (yyval.str) = mm_strdup("xmlparse"); +} +#line 57449 "preproc.c" + break; + + case 2626: /* col_name_keyword: XMLPI */ +#line 14803 "preproc.y" + { + (yyval.str) = mm_strdup("xmlpi"); +} +#line 57457 "preproc.c" + break; + + case 2627: /* col_name_keyword: XMLROOT */ +#line 14807 "preproc.y" + { + (yyval.str) = mm_strdup("xmlroot"); +} +#line 57465 "preproc.c" + break; + + case 2628: /* col_name_keyword: XMLSERIALIZE */ +#line 14811 "preproc.y" + { + (yyval.str) = mm_strdup("xmlserialize"); +} +#line 57473 "preproc.c" + break; + + case 2629: /* col_name_keyword: XMLTABLE */ +#line 14815 "preproc.y" + { + (yyval.str) = mm_strdup("xmltable"); +} +#line 57481 "preproc.c" + break; + + case 2630: /* type_func_name_keyword: AUTHORIZATION */ +#line 14823 "preproc.y" + { + (yyval.str) = mm_strdup("authorization"); +} +#line 57489 "preproc.c" + break; + + case 2631: /* type_func_name_keyword: BINARY */ +#line 14827 "preproc.y" + { + (yyval.str) = mm_strdup("binary"); +} +#line 57497 "preproc.c" + break; + + case 2632: /* type_func_name_keyword: COLLATION */ +#line 14831 "preproc.y" + { + (yyval.str) = mm_strdup("collation"); +} +#line 57505 "preproc.c" + break; + + case 2633: /* type_func_name_keyword: CONCURRENTLY */ +#line 14835 "preproc.y" + { + (yyval.str) = mm_strdup("concurrently"); +} +#line 57513 "preproc.c" + break; + + case 2634: /* type_func_name_keyword: CROSS */ +#line 14839 "preproc.y" + { + (yyval.str) = mm_strdup("cross"); +} +#line 57521 "preproc.c" + break; + + case 2635: /* type_func_name_keyword: CURRENT_SCHEMA */ +#line 14843 "preproc.y" + { + (yyval.str) = mm_strdup("current_schema"); +} +#line 57529 "preproc.c" + break; + + case 2636: /* type_func_name_keyword: FREEZE */ +#line 14847 "preproc.y" + { + (yyval.str) = mm_strdup("freeze"); +} +#line 57537 "preproc.c" + break; + + case 2637: /* type_func_name_keyword: FULL */ +#line 14851 "preproc.y" + { + (yyval.str) = mm_strdup("full"); +} +#line 57545 "preproc.c" + break; + + case 2638: /* type_func_name_keyword: ILIKE */ +#line 14855 "preproc.y" + { + (yyval.str) = mm_strdup("ilike"); +} +#line 57553 "preproc.c" + break; + + case 2639: /* type_func_name_keyword: INNER_P */ +#line 14859 "preproc.y" + { + (yyval.str) = mm_strdup("inner"); +} +#line 57561 "preproc.c" + break; + + case 2640: /* type_func_name_keyword: IS */ +#line 14863 "preproc.y" + { + (yyval.str) = mm_strdup("is"); +} +#line 57569 "preproc.c" + break; + + case 2641: /* type_func_name_keyword: ISNULL */ +#line 14867 "preproc.y" + { + (yyval.str) = mm_strdup("isnull"); +} +#line 57577 "preproc.c" + break; + + case 2642: /* type_func_name_keyword: JOIN */ +#line 14871 "preproc.y" + { + (yyval.str) = mm_strdup("join"); +} +#line 57585 "preproc.c" + break; + + case 2643: /* type_func_name_keyword: LEFT */ +#line 14875 "preproc.y" + { + (yyval.str) = mm_strdup("left"); +} +#line 57593 "preproc.c" + break; + + case 2644: /* type_func_name_keyword: LIKE */ +#line 14879 "preproc.y" + { + (yyval.str) = mm_strdup("like"); +} +#line 57601 "preproc.c" + break; + + case 2645: /* type_func_name_keyword: NATURAL */ +#line 14883 "preproc.y" + { + (yyval.str) = mm_strdup("natural"); +} +#line 57609 "preproc.c" + break; + + case 2646: /* type_func_name_keyword: NOTNULL */ +#line 14887 "preproc.y" + { + (yyval.str) = mm_strdup("notnull"); +} +#line 57617 "preproc.c" + break; + + case 2647: /* type_func_name_keyword: OUTER_P */ +#line 14891 "preproc.y" + { + (yyval.str) = mm_strdup("outer"); +} +#line 57625 "preproc.c" + break; + + case 2648: /* type_func_name_keyword: OVERLAPS */ +#line 14895 "preproc.y" + { + (yyval.str) = mm_strdup("overlaps"); +} +#line 57633 "preproc.c" + break; + + case 2649: /* type_func_name_keyword: RIGHT */ +#line 14899 "preproc.y" + { + (yyval.str) = mm_strdup("right"); +} +#line 57641 "preproc.c" + break; + + case 2650: /* type_func_name_keyword: SIMILAR */ +#line 14903 "preproc.y" + { + (yyval.str) = mm_strdup("similar"); +} +#line 57649 "preproc.c" + break; + + case 2651: /* type_func_name_keyword: TABLESAMPLE */ +#line 14907 "preproc.y" + { + (yyval.str) = mm_strdup("tablesample"); +} +#line 57657 "preproc.c" + break; + + case 2652: /* type_func_name_keyword: VERBOSE */ +#line 14911 "preproc.y" + { + (yyval.str) = mm_strdup("verbose"); +} +#line 57665 "preproc.c" + break; + + case 2653: /* reserved_keyword: ALL */ +#line 14919 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 57673 "preproc.c" + break; + + case 2654: /* reserved_keyword: ANALYSE */ +#line 14923 "preproc.y" + { + (yyval.str) = mm_strdup("analyse"); +} +#line 57681 "preproc.c" + break; + + case 2655: /* reserved_keyword: ANALYZE */ +#line 14927 "preproc.y" + { + (yyval.str) = mm_strdup("analyze"); +} +#line 57689 "preproc.c" + break; + + case 2656: /* reserved_keyword: AND */ +#line 14931 "preproc.y" + { + (yyval.str) = mm_strdup("and"); +} +#line 57697 "preproc.c" + break; + + case 2657: /* reserved_keyword: ANY */ +#line 14935 "preproc.y" + { + (yyval.str) = mm_strdup("any"); +} +#line 57705 "preproc.c" + break; + + case 2658: /* reserved_keyword: ARRAY */ +#line 14939 "preproc.y" + { + (yyval.str) = mm_strdup("array"); +} +#line 57713 "preproc.c" + break; + + case 2659: /* reserved_keyword: AS */ +#line 14943 "preproc.y" + { + (yyval.str) = mm_strdup("as"); +} +#line 57721 "preproc.c" + break; + + case 2660: /* reserved_keyword: ASC */ +#line 14947 "preproc.y" + { + (yyval.str) = mm_strdup("asc"); +} +#line 57729 "preproc.c" + break; + + case 2661: /* reserved_keyword: ASYMMETRIC */ +#line 14951 "preproc.y" + { + (yyval.str) = mm_strdup("asymmetric"); +} +#line 57737 "preproc.c" + break; + + case 2662: /* reserved_keyword: BOTH */ +#line 14955 "preproc.y" + { + (yyval.str) = mm_strdup("both"); +} +#line 57745 "preproc.c" + break; + + case 2663: /* reserved_keyword: CASE */ +#line 14959 "preproc.y" + { + (yyval.str) = mm_strdup("case"); +} +#line 57753 "preproc.c" + break; + + case 2664: /* reserved_keyword: CAST */ +#line 14963 "preproc.y" + { + (yyval.str) = mm_strdup("cast"); +} +#line 57761 "preproc.c" + break; + + case 2665: /* reserved_keyword: CHECK */ +#line 14967 "preproc.y" + { + (yyval.str) = mm_strdup("check"); +} +#line 57769 "preproc.c" + break; + + case 2666: /* reserved_keyword: COLLATE */ +#line 14971 "preproc.y" + { + (yyval.str) = mm_strdup("collate"); +} +#line 57777 "preproc.c" + break; + + case 2667: /* reserved_keyword: COLUMN */ +#line 14975 "preproc.y" + { + (yyval.str) = mm_strdup("column"); +} +#line 57785 "preproc.c" + break; + + case 2668: /* reserved_keyword: CONSTRAINT */ +#line 14979 "preproc.y" + { + (yyval.str) = mm_strdup("constraint"); +} +#line 57793 "preproc.c" + break; + + case 2669: /* reserved_keyword: CREATE */ +#line 14983 "preproc.y" + { + (yyval.str) = mm_strdup("create"); +} +#line 57801 "preproc.c" + break; + + case 2670: /* reserved_keyword: CURRENT_CATALOG */ +#line 14987 "preproc.y" + { + (yyval.str) = mm_strdup("current_catalog"); +} +#line 57809 "preproc.c" + break; + + case 2671: /* reserved_keyword: CURRENT_DATE */ +#line 14991 "preproc.y" + { + (yyval.str) = mm_strdup("current_date"); +} +#line 57817 "preproc.c" + break; + + case 2672: /* reserved_keyword: CURRENT_ROLE */ +#line 14995 "preproc.y" + { + (yyval.str) = mm_strdup("current_role"); +} +#line 57825 "preproc.c" + break; + + case 2673: /* reserved_keyword: CURRENT_TIME */ +#line 14999 "preproc.y" + { + (yyval.str) = mm_strdup("current_time"); +} +#line 57833 "preproc.c" + break; + + case 2674: /* reserved_keyword: CURRENT_TIMESTAMP */ +#line 15003 "preproc.y" + { + (yyval.str) = mm_strdup("current_timestamp"); +} +#line 57841 "preproc.c" + break; + + case 2675: /* reserved_keyword: CURRENT_USER */ +#line 15007 "preproc.y" + { + (yyval.str) = mm_strdup("current_user"); +} +#line 57849 "preproc.c" + break; + + case 2676: /* reserved_keyword: DEFAULT */ +#line 15011 "preproc.y" + { + (yyval.str) = mm_strdup("default"); +} +#line 57857 "preproc.c" + break; + + case 2677: /* reserved_keyword: DEFERRABLE */ +#line 15015 "preproc.y" + { + (yyval.str) = mm_strdup("deferrable"); +} +#line 57865 "preproc.c" + break; + + case 2678: /* reserved_keyword: DESC */ +#line 15019 "preproc.y" + { + (yyval.str) = mm_strdup("desc"); +} +#line 57873 "preproc.c" + break; + + case 2679: /* reserved_keyword: DISTINCT */ +#line 15023 "preproc.y" + { + (yyval.str) = mm_strdup("distinct"); +} +#line 57881 "preproc.c" + break; + + case 2680: /* reserved_keyword: DO */ +#line 15027 "preproc.y" + { + (yyval.str) = mm_strdup("do"); +} +#line 57889 "preproc.c" + break; + + case 2681: /* reserved_keyword: ELSE */ +#line 15031 "preproc.y" + { + (yyval.str) = mm_strdup("else"); +} +#line 57897 "preproc.c" + break; + + case 2682: /* reserved_keyword: END_P */ +#line 15035 "preproc.y" + { + (yyval.str) = mm_strdup("end"); +} +#line 57905 "preproc.c" + break; + + case 2683: /* reserved_keyword: EXCEPT */ +#line 15039 "preproc.y" + { + (yyval.str) = mm_strdup("except"); +} +#line 57913 "preproc.c" + break; + + case 2684: /* reserved_keyword: FALSE_P */ +#line 15043 "preproc.y" + { + (yyval.str) = mm_strdup("false"); +} +#line 57921 "preproc.c" + break; + + case 2685: /* reserved_keyword: FETCH */ +#line 15047 "preproc.y" + { + (yyval.str) = mm_strdup("fetch"); +} +#line 57929 "preproc.c" + break; + + case 2686: /* reserved_keyword: FOR */ +#line 15051 "preproc.y" + { + (yyval.str) = mm_strdup("for"); +} +#line 57937 "preproc.c" + break; + + case 2687: /* reserved_keyword: FOREIGN */ +#line 15055 "preproc.y" + { + (yyval.str) = mm_strdup("foreign"); +} +#line 57945 "preproc.c" + break; + + case 2688: /* reserved_keyword: FROM */ +#line 15059 "preproc.y" + { + (yyval.str) = mm_strdup("from"); +} +#line 57953 "preproc.c" + break; + + case 2689: /* reserved_keyword: GRANT */ +#line 15063 "preproc.y" + { + (yyval.str) = mm_strdup("grant"); +} +#line 57961 "preproc.c" + break; + + case 2690: /* reserved_keyword: GROUP_P */ +#line 15067 "preproc.y" + { + (yyval.str) = mm_strdup("group"); +} +#line 57969 "preproc.c" + break; + + case 2691: /* reserved_keyword: HAVING */ +#line 15071 "preproc.y" + { + (yyval.str) = mm_strdup("having"); +} +#line 57977 "preproc.c" + break; + + case 2692: /* reserved_keyword: IN_P */ +#line 15075 "preproc.y" + { + (yyval.str) = mm_strdup("in"); +} +#line 57985 "preproc.c" + break; + + case 2693: /* reserved_keyword: INITIALLY */ +#line 15079 "preproc.y" + { + (yyval.str) = mm_strdup("initially"); +} +#line 57993 "preproc.c" + break; + + case 2694: /* reserved_keyword: INTERSECT */ +#line 15083 "preproc.y" + { + (yyval.str) = mm_strdup("intersect"); +} +#line 58001 "preproc.c" + break; + + case 2695: /* reserved_keyword: INTO */ +#line 15087 "preproc.y" + { + (yyval.str) = mm_strdup("into"); +} +#line 58009 "preproc.c" + break; + + case 2696: /* reserved_keyword: LATERAL_P */ +#line 15091 "preproc.y" + { + (yyval.str) = mm_strdup("lateral"); +} +#line 58017 "preproc.c" + break; + + case 2697: /* reserved_keyword: LEADING */ +#line 15095 "preproc.y" + { + (yyval.str) = mm_strdup("leading"); +} +#line 58025 "preproc.c" + break; + + case 2698: /* reserved_keyword: LIMIT */ +#line 15099 "preproc.y" + { + (yyval.str) = mm_strdup("limit"); +} +#line 58033 "preproc.c" + break; + + case 2699: /* reserved_keyword: LOCALTIME */ +#line 15103 "preproc.y" + { + (yyval.str) = mm_strdup("localtime"); +} +#line 58041 "preproc.c" + break; + + case 2700: /* reserved_keyword: LOCALTIMESTAMP */ +#line 15107 "preproc.y" + { + (yyval.str) = mm_strdup("localtimestamp"); +} +#line 58049 "preproc.c" + break; + + case 2701: /* reserved_keyword: NOT */ +#line 15111 "preproc.y" + { + (yyval.str) = mm_strdup("not"); +} +#line 58057 "preproc.c" + break; + + case 2702: /* reserved_keyword: NULL_P */ +#line 15115 "preproc.y" + { + (yyval.str) = mm_strdup("null"); +} +#line 58065 "preproc.c" + break; + + case 2703: /* reserved_keyword: OFFSET */ +#line 15119 "preproc.y" + { + (yyval.str) = mm_strdup("offset"); +} +#line 58073 "preproc.c" + break; + + case 2704: /* reserved_keyword: ON */ +#line 15123 "preproc.y" + { + (yyval.str) = mm_strdup("on"); +} +#line 58081 "preproc.c" + break; + + case 2705: /* reserved_keyword: ONLY */ +#line 15127 "preproc.y" + { + (yyval.str) = mm_strdup("only"); +} +#line 58089 "preproc.c" + break; + + case 2706: /* reserved_keyword: OR */ +#line 15131 "preproc.y" + { + (yyval.str) = mm_strdup("or"); +} +#line 58097 "preproc.c" + break; + + case 2707: /* reserved_keyword: ORDER */ +#line 15135 "preproc.y" + { + (yyval.str) = mm_strdup("order"); +} +#line 58105 "preproc.c" + break; + + case 2708: /* reserved_keyword: PLACING */ +#line 15139 "preproc.y" + { + (yyval.str) = mm_strdup("placing"); +} +#line 58113 "preproc.c" + break; + + case 2709: /* reserved_keyword: PRIMARY */ +#line 15143 "preproc.y" + { + (yyval.str) = mm_strdup("primary"); +} +#line 58121 "preproc.c" + break; + + case 2710: /* reserved_keyword: REFERENCES */ +#line 15147 "preproc.y" + { + (yyval.str) = mm_strdup("references"); +} +#line 58129 "preproc.c" + break; + + case 2711: /* reserved_keyword: RETURNING */ +#line 15151 "preproc.y" + { + (yyval.str) = mm_strdup("returning"); +} +#line 58137 "preproc.c" + break; + + case 2712: /* reserved_keyword: SELECT */ +#line 15155 "preproc.y" + { + (yyval.str) = mm_strdup("select"); +} +#line 58145 "preproc.c" + break; + + case 2713: /* reserved_keyword: SESSION_USER */ +#line 15159 "preproc.y" + { + (yyval.str) = mm_strdup("session_user"); +} +#line 58153 "preproc.c" + break; + + case 2714: /* reserved_keyword: SOME */ +#line 15163 "preproc.y" + { + (yyval.str) = mm_strdup("some"); +} +#line 58161 "preproc.c" + break; + + case 2715: /* reserved_keyword: SYMMETRIC */ +#line 15167 "preproc.y" + { + (yyval.str) = mm_strdup("symmetric"); +} +#line 58169 "preproc.c" + break; + + case 2716: /* reserved_keyword: TABLE */ +#line 15171 "preproc.y" + { + (yyval.str) = mm_strdup("table"); +} +#line 58177 "preproc.c" + break; + + case 2717: /* reserved_keyword: THEN */ +#line 15175 "preproc.y" + { + (yyval.str) = mm_strdup("then"); +} +#line 58185 "preproc.c" + break; + + case 2718: /* reserved_keyword: TRAILING */ +#line 15179 "preproc.y" + { + (yyval.str) = mm_strdup("trailing"); +} +#line 58193 "preproc.c" + break; + + case 2719: /* reserved_keyword: TRUE_P */ +#line 15183 "preproc.y" + { + (yyval.str) = mm_strdup("true"); +} +#line 58201 "preproc.c" + break; + + case 2720: /* reserved_keyword: UNIQUE */ +#line 15187 "preproc.y" + { + (yyval.str) = mm_strdup("unique"); +} +#line 58209 "preproc.c" + break; + + case 2721: /* reserved_keyword: USER */ +#line 15191 "preproc.y" + { + (yyval.str) = mm_strdup("user"); +} +#line 58217 "preproc.c" + break; + + case 2722: /* reserved_keyword: USING */ +#line 15195 "preproc.y" + { + (yyval.str) = mm_strdup("using"); +} +#line 58225 "preproc.c" + break; + + case 2723: /* reserved_keyword: VARIADIC */ +#line 15199 "preproc.y" + { + (yyval.str) = mm_strdup("variadic"); +} +#line 58233 "preproc.c" + break; + + case 2724: /* reserved_keyword: WHEN */ +#line 15203 "preproc.y" + { + (yyval.str) = mm_strdup("when"); +} +#line 58241 "preproc.c" + break; + + case 2725: /* reserved_keyword: WHERE */ +#line 15207 "preproc.y" + { + (yyval.str) = mm_strdup("where"); +} +#line 58249 "preproc.c" + break; + + case 2726: /* reserved_keyword: WINDOW */ +#line 15211 "preproc.y" + { + (yyval.str) = mm_strdup("window"); +} +#line 58257 "preproc.c" + break; + + case 2727: /* reserved_keyword: WITH */ +#line 15215 "preproc.y" + { + (yyval.str) = mm_strdup("with"); +} +#line 58265 "preproc.c" + break; + + case 2728: /* bare_label_keyword: ABORT_P */ +#line 15223 "preproc.y" + { + (yyval.str) = mm_strdup("abort"); +} +#line 58273 "preproc.c" + break; + + case 2729: /* bare_label_keyword: ABSOLUTE_P */ +#line 15227 "preproc.y" + { + (yyval.str) = mm_strdup("absolute"); +} +#line 58281 "preproc.c" + break; + + case 2730: /* bare_label_keyword: ACCESS */ +#line 15231 "preproc.y" + { + (yyval.str) = mm_strdup("access"); +} +#line 58289 "preproc.c" + break; + + case 2731: /* bare_label_keyword: ACTION */ +#line 15235 "preproc.y" + { + (yyval.str) = mm_strdup("action"); +} +#line 58297 "preproc.c" + break; + + case 2732: /* bare_label_keyword: ADD_P */ +#line 15239 "preproc.y" + { + (yyval.str) = mm_strdup("add"); +} +#line 58305 "preproc.c" + break; + + case 2733: /* bare_label_keyword: ADMIN */ +#line 15243 "preproc.y" + { + (yyval.str) = mm_strdup("admin"); +} +#line 58313 "preproc.c" + break; + + case 2734: /* bare_label_keyword: AFTER */ +#line 15247 "preproc.y" + { + (yyval.str) = mm_strdup("after"); +} +#line 58321 "preproc.c" + break; + + case 2735: /* bare_label_keyword: AGGREGATE */ +#line 15251 "preproc.y" + { + (yyval.str) = mm_strdup("aggregate"); +} +#line 58329 "preproc.c" + break; + + case 2736: /* bare_label_keyword: ALL */ +#line 15255 "preproc.y" + { + (yyval.str) = mm_strdup("all"); +} +#line 58337 "preproc.c" + break; + + case 2737: /* bare_label_keyword: ALSO */ +#line 15259 "preproc.y" + { + (yyval.str) = mm_strdup("also"); +} +#line 58345 "preproc.c" + break; + + case 2738: /* bare_label_keyword: ALTER */ +#line 15263 "preproc.y" + { + (yyval.str) = mm_strdup("alter"); +} +#line 58353 "preproc.c" + break; + + case 2739: /* bare_label_keyword: ALWAYS */ +#line 15267 "preproc.y" + { + (yyval.str) = mm_strdup("always"); +} +#line 58361 "preproc.c" + break; + + case 2740: /* bare_label_keyword: ANALYSE */ +#line 15271 "preproc.y" + { + (yyval.str) = mm_strdup("analyse"); +} +#line 58369 "preproc.c" + break; + + case 2741: /* bare_label_keyword: ANALYZE */ +#line 15275 "preproc.y" + { + (yyval.str) = mm_strdup("analyze"); +} +#line 58377 "preproc.c" + break; + + case 2742: /* bare_label_keyword: AND */ +#line 15279 "preproc.y" + { + (yyval.str) = mm_strdup("and"); +} +#line 58385 "preproc.c" + break; + + case 2743: /* bare_label_keyword: ANY */ +#line 15283 "preproc.y" + { + (yyval.str) = mm_strdup("any"); +} +#line 58393 "preproc.c" + break; + + case 2744: /* bare_label_keyword: ASC */ +#line 15287 "preproc.y" + { + (yyval.str) = mm_strdup("asc"); +} +#line 58401 "preproc.c" + break; + + case 2745: /* bare_label_keyword: ASENSITIVE */ +#line 15291 "preproc.y" + { + (yyval.str) = mm_strdup("asensitive"); +} +#line 58409 "preproc.c" + break; + + case 2746: /* bare_label_keyword: ASSERTION */ +#line 15295 "preproc.y" + { + (yyval.str) = mm_strdup("assertion"); +} +#line 58417 "preproc.c" + break; + + case 2747: /* bare_label_keyword: ASSIGNMENT */ +#line 15299 "preproc.y" + { + (yyval.str) = mm_strdup("assignment"); +} +#line 58425 "preproc.c" + break; + + case 2748: /* bare_label_keyword: ASYMMETRIC */ +#line 15303 "preproc.y" + { + (yyval.str) = mm_strdup("asymmetric"); +} +#line 58433 "preproc.c" + break; + + case 2749: /* bare_label_keyword: AT */ +#line 15307 "preproc.y" + { + (yyval.str) = mm_strdup("at"); +} +#line 58441 "preproc.c" + break; + + case 2750: /* bare_label_keyword: ATOMIC */ +#line 15311 "preproc.y" + { + (yyval.str) = mm_strdup("atomic"); +} +#line 58449 "preproc.c" + break; + + case 2751: /* bare_label_keyword: ATTACH */ +#line 15315 "preproc.y" + { + (yyval.str) = mm_strdup("attach"); +} +#line 58457 "preproc.c" + break; + + case 2752: /* bare_label_keyword: ATTRIBUTE */ +#line 15319 "preproc.y" + { + (yyval.str) = mm_strdup("attribute"); +} +#line 58465 "preproc.c" + break; + + case 2753: /* bare_label_keyword: AUTHORIZATION */ +#line 15323 "preproc.y" + { + (yyval.str) = mm_strdup("authorization"); +} +#line 58473 "preproc.c" + break; + + case 2754: /* bare_label_keyword: BACKWARD */ +#line 15327 "preproc.y" + { + (yyval.str) = mm_strdup("backward"); +} +#line 58481 "preproc.c" + break; + + case 2755: /* bare_label_keyword: BEFORE */ +#line 15331 "preproc.y" + { + (yyval.str) = mm_strdup("before"); +} +#line 58489 "preproc.c" + break; + + case 2756: /* bare_label_keyword: BEGIN_P */ +#line 15335 "preproc.y" + { + (yyval.str) = mm_strdup("begin"); +} +#line 58497 "preproc.c" + break; + + case 2757: /* bare_label_keyword: BETWEEN */ +#line 15339 "preproc.y" + { + (yyval.str) = mm_strdup("between"); +} +#line 58505 "preproc.c" + break; + + case 2758: /* bare_label_keyword: BIGINT */ +#line 15343 "preproc.y" + { + (yyval.str) = mm_strdup("bigint"); +} +#line 58513 "preproc.c" + break; + + case 2759: /* bare_label_keyword: BINARY */ +#line 15347 "preproc.y" + { + (yyval.str) = mm_strdup("binary"); +} +#line 58521 "preproc.c" + break; + + case 2760: /* bare_label_keyword: BIT */ +#line 15351 "preproc.y" + { + (yyval.str) = mm_strdup("bit"); +} +#line 58529 "preproc.c" + break; + + case 2761: /* bare_label_keyword: BOOLEAN_P */ +#line 15355 "preproc.y" + { + (yyval.str) = mm_strdup("boolean"); +} +#line 58537 "preproc.c" + break; + + case 2762: /* bare_label_keyword: BOTH */ +#line 15359 "preproc.y" + { + (yyval.str) = mm_strdup("both"); +} +#line 58545 "preproc.c" + break; + + case 2763: /* bare_label_keyword: BREADTH */ +#line 15363 "preproc.y" + { + (yyval.str) = mm_strdup("breadth"); +} +#line 58553 "preproc.c" + break; + + case 2764: /* bare_label_keyword: BY */ +#line 15367 "preproc.y" + { + (yyval.str) = mm_strdup("by"); +} +#line 58561 "preproc.c" + break; + + case 2765: /* bare_label_keyword: CACHE */ +#line 15371 "preproc.y" + { + (yyval.str) = mm_strdup("cache"); +} +#line 58569 "preproc.c" + break; + + case 2766: /* bare_label_keyword: CALL */ +#line 15375 "preproc.y" + { + (yyval.str) = mm_strdup("call"); +} +#line 58577 "preproc.c" + break; + + case 2767: /* bare_label_keyword: CALLED */ +#line 15379 "preproc.y" + { + (yyval.str) = mm_strdup("called"); +} +#line 58585 "preproc.c" + break; + + case 2768: /* bare_label_keyword: CASCADE */ +#line 15383 "preproc.y" + { + (yyval.str) = mm_strdup("cascade"); +} +#line 58593 "preproc.c" + break; + + case 2769: /* bare_label_keyword: CASCADED */ +#line 15387 "preproc.y" + { + (yyval.str) = mm_strdup("cascaded"); +} +#line 58601 "preproc.c" + break; + + case 2770: /* bare_label_keyword: CASE */ +#line 15391 "preproc.y" + { + (yyval.str) = mm_strdup("case"); +} +#line 58609 "preproc.c" + break; + + case 2771: /* bare_label_keyword: CAST */ +#line 15395 "preproc.y" + { + (yyval.str) = mm_strdup("cast"); +} +#line 58617 "preproc.c" + break; + + case 2772: /* bare_label_keyword: CATALOG_P */ +#line 15399 "preproc.y" + { + (yyval.str) = mm_strdup("catalog"); +} +#line 58625 "preproc.c" + break; + + case 2773: /* bare_label_keyword: CHAIN */ +#line 15403 "preproc.y" + { + (yyval.str) = mm_strdup("chain"); +} +#line 58633 "preproc.c" + break; + + case 2774: /* bare_label_keyword: CHARACTERISTICS */ +#line 15407 "preproc.y" + { + (yyval.str) = mm_strdup("characteristics"); +} +#line 58641 "preproc.c" + break; + + case 2775: /* bare_label_keyword: CHECK */ +#line 15411 "preproc.y" + { + (yyval.str) = mm_strdup("check"); +} +#line 58649 "preproc.c" + break; + + case 2776: /* bare_label_keyword: CHECKPOINT */ +#line 15415 "preproc.y" + { + (yyval.str) = mm_strdup("checkpoint"); +} +#line 58657 "preproc.c" + break; + + case 2777: /* bare_label_keyword: CLASS */ +#line 15419 "preproc.y" + { + (yyval.str) = mm_strdup("class"); +} +#line 58665 "preproc.c" + break; + + case 2778: /* bare_label_keyword: CLOSE */ +#line 15423 "preproc.y" + { + (yyval.str) = mm_strdup("close"); +} +#line 58673 "preproc.c" + break; + + case 2779: /* bare_label_keyword: CLUSTER */ +#line 15427 "preproc.y" + { + (yyval.str) = mm_strdup("cluster"); +} +#line 58681 "preproc.c" + break; + + case 2780: /* bare_label_keyword: COALESCE */ +#line 15431 "preproc.y" + { + (yyval.str) = mm_strdup("coalesce"); +} +#line 58689 "preproc.c" + break; + + case 2781: /* bare_label_keyword: COLLATE */ +#line 15435 "preproc.y" + { + (yyval.str) = mm_strdup("collate"); +} +#line 58697 "preproc.c" + break; + + case 2782: /* bare_label_keyword: COLLATION */ +#line 15439 "preproc.y" + { + (yyval.str) = mm_strdup("collation"); +} +#line 58705 "preproc.c" + break; + + case 2783: /* bare_label_keyword: COLUMN */ +#line 15443 "preproc.y" + { + (yyval.str) = mm_strdup("column"); +} +#line 58713 "preproc.c" + break; + + case 2784: /* bare_label_keyword: COLUMNS */ +#line 15447 "preproc.y" + { + (yyval.str) = mm_strdup("columns"); +} +#line 58721 "preproc.c" + break; + + case 2785: /* bare_label_keyword: COMMENT */ +#line 15451 "preproc.y" + { + (yyval.str) = mm_strdup("comment"); +} +#line 58729 "preproc.c" + break; + + case 2786: /* bare_label_keyword: COMMENTS */ +#line 15455 "preproc.y" + { + (yyval.str) = mm_strdup("comments"); +} +#line 58737 "preproc.c" + break; + + case 2787: /* bare_label_keyword: COMMIT */ +#line 15459 "preproc.y" + { + (yyval.str) = mm_strdup("commit"); +} +#line 58745 "preproc.c" + break; + + case 2788: /* bare_label_keyword: COMMITTED */ +#line 15463 "preproc.y" + { + (yyval.str) = mm_strdup("committed"); +} +#line 58753 "preproc.c" + break; + + case 2789: /* bare_label_keyword: COMPRESSION */ +#line 15467 "preproc.y" + { + (yyval.str) = mm_strdup("compression"); +} +#line 58761 "preproc.c" + break; + + case 2790: /* bare_label_keyword: CONCURRENTLY */ +#line 15471 "preproc.y" + { + (yyval.str) = mm_strdup("concurrently"); +} +#line 58769 "preproc.c" + break; + + case 2791: /* bare_label_keyword: CONFIGURATION */ +#line 15475 "preproc.y" + { + (yyval.str) = mm_strdup("configuration"); +} +#line 58777 "preproc.c" + break; + + case 2792: /* bare_label_keyword: CONFLICT */ +#line 15479 "preproc.y" + { + (yyval.str) = mm_strdup("conflict"); +} +#line 58785 "preproc.c" + break; + + case 2793: /* bare_label_keyword: CONNECTION */ +#line 15483 "preproc.y" + { + (yyval.str) = mm_strdup("connection"); +} +#line 58793 "preproc.c" + break; + + case 2794: /* bare_label_keyword: CONSTRAINT */ +#line 15487 "preproc.y" + { + (yyval.str) = mm_strdup("constraint"); +} +#line 58801 "preproc.c" + break; + + case 2795: /* bare_label_keyword: CONSTRAINTS */ +#line 15491 "preproc.y" + { + (yyval.str) = mm_strdup("constraints"); +} +#line 58809 "preproc.c" + break; + + case 2796: /* bare_label_keyword: CONTENT_P */ +#line 15495 "preproc.y" + { + (yyval.str) = mm_strdup("content"); +} +#line 58817 "preproc.c" + break; + + case 2797: /* bare_label_keyword: CONTINUE_P */ +#line 15499 "preproc.y" + { + (yyval.str) = mm_strdup("continue"); +} +#line 58825 "preproc.c" + break; + + case 2798: /* bare_label_keyword: CONVERSION_P */ +#line 15503 "preproc.y" + { + (yyval.str) = mm_strdup("conversion"); +} +#line 58833 "preproc.c" + break; + + case 2799: /* bare_label_keyword: COPY */ +#line 15507 "preproc.y" + { + (yyval.str) = mm_strdup("copy"); +} +#line 58841 "preproc.c" + break; + + case 2800: /* bare_label_keyword: COST */ +#line 15511 "preproc.y" + { + (yyval.str) = mm_strdup("cost"); +} +#line 58849 "preproc.c" + break; + + case 2801: /* bare_label_keyword: CROSS */ +#line 15515 "preproc.y" + { + (yyval.str) = mm_strdup("cross"); +} +#line 58857 "preproc.c" + break; + + case 2802: /* bare_label_keyword: CSV */ +#line 15519 "preproc.y" + { + (yyval.str) = mm_strdup("csv"); +} +#line 58865 "preproc.c" + break; + + case 2803: /* bare_label_keyword: CUBE */ +#line 15523 "preproc.y" + { + (yyval.str) = mm_strdup("cube"); +} +#line 58873 "preproc.c" + break; + + case 2804: /* bare_label_keyword: CURRENT_P */ +#line 15527 "preproc.y" + { + (yyval.str) = mm_strdup("current"); +} +#line 58881 "preproc.c" + break; + + case 2805: /* bare_label_keyword: CURRENT_CATALOG */ +#line 15531 "preproc.y" + { + (yyval.str) = mm_strdup("current_catalog"); +} +#line 58889 "preproc.c" + break; + + case 2806: /* bare_label_keyword: CURRENT_DATE */ +#line 15535 "preproc.y" + { + (yyval.str) = mm_strdup("current_date"); +} +#line 58897 "preproc.c" + break; + + case 2807: /* bare_label_keyword: CURRENT_ROLE */ +#line 15539 "preproc.y" + { + (yyval.str) = mm_strdup("current_role"); +} +#line 58905 "preproc.c" + break; + + case 2808: /* bare_label_keyword: CURRENT_SCHEMA */ +#line 15543 "preproc.y" + { + (yyval.str) = mm_strdup("current_schema"); +} +#line 58913 "preproc.c" + break; + + case 2809: /* bare_label_keyword: CURRENT_TIME */ +#line 15547 "preproc.y" + { + (yyval.str) = mm_strdup("current_time"); +} +#line 58921 "preproc.c" + break; + + case 2810: /* bare_label_keyword: CURRENT_TIMESTAMP */ +#line 15551 "preproc.y" + { + (yyval.str) = mm_strdup("current_timestamp"); +} +#line 58929 "preproc.c" + break; + + case 2811: /* bare_label_keyword: CURRENT_USER */ +#line 15555 "preproc.y" + { + (yyval.str) = mm_strdup("current_user"); +} +#line 58937 "preproc.c" + break; + + case 2812: /* bare_label_keyword: CURSOR */ +#line 15559 "preproc.y" + { + (yyval.str) = mm_strdup("cursor"); +} +#line 58945 "preproc.c" + break; + + case 2813: /* bare_label_keyword: CYCLE */ +#line 15563 "preproc.y" + { + (yyval.str) = mm_strdup("cycle"); +} +#line 58953 "preproc.c" + break; + + case 2814: /* bare_label_keyword: DATA_P */ +#line 15567 "preproc.y" + { + (yyval.str) = mm_strdup("data"); +} +#line 58961 "preproc.c" + break; + + case 2815: /* bare_label_keyword: DATABASE */ +#line 15571 "preproc.y" + { + (yyval.str) = mm_strdup("database"); +} +#line 58969 "preproc.c" + break; + + case 2816: /* bare_label_keyword: DEALLOCATE */ +#line 15575 "preproc.y" + { + (yyval.str) = mm_strdup("deallocate"); +} +#line 58977 "preproc.c" + break; + + case 2817: /* bare_label_keyword: DEC */ +#line 15579 "preproc.y" + { + (yyval.str) = mm_strdup("dec"); +} +#line 58985 "preproc.c" + break; + + case 2818: /* bare_label_keyword: DECIMAL_P */ +#line 15583 "preproc.y" + { + (yyval.str) = mm_strdup("decimal"); +} +#line 58993 "preproc.c" + break; + + case 2819: /* bare_label_keyword: DECLARE */ +#line 15587 "preproc.y" + { + (yyval.str) = mm_strdup("declare"); +} +#line 59001 "preproc.c" + break; + + case 2820: /* bare_label_keyword: DEFAULT */ +#line 15591 "preproc.y" + { + (yyval.str) = mm_strdup("default"); +} +#line 59009 "preproc.c" + break; + + case 2821: /* bare_label_keyword: DEFAULTS */ +#line 15595 "preproc.y" + { + (yyval.str) = mm_strdup("defaults"); +} +#line 59017 "preproc.c" + break; + + case 2822: /* bare_label_keyword: DEFERRABLE */ +#line 15599 "preproc.y" + { + (yyval.str) = mm_strdup("deferrable"); +} +#line 59025 "preproc.c" + break; + + case 2823: /* bare_label_keyword: DEFERRED */ +#line 15603 "preproc.y" + { + (yyval.str) = mm_strdup("deferred"); +} +#line 59033 "preproc.c" + break; + + case 2824: /* bare_label_keyword: DEFINER */ +#line 15607 "preproc.y" + { + (yyval.str) = mm_strdup("definer"); +} +#line 59041 "preproc.c" + break; + + case 2825: /* bare_label_keyword: DELETE_P */ +#line 15611 "preproc.y" + { + (yyval.str) = mm_strdup("delete"); +} +#line 59049 "preproc.c" + break; + + case 2826: /* bare_label_keyword: DELIMITER */ +#line 15615 "preproc.y" + { + (yyval.str) = mm_strdup("delimiter"); +} +#line 59057 "preproc.c" + break; + + case 2827: /* bare_label_keyword: DELIMITERS */ +#line 15619 "preproc.y" + { + (yyval.str) = mm_strdup("delimiters"); +} +#line 59065 "preproc.c" + break; + + case 2828: /* bare_label_keyword: DEPENDS */ +#line 15623 "preproc.y" + { + (yyval.str) = mm_strdup("depends"); +} +#line 59073 "preproc.c" + break; + + case 2829: /* bare_label_keyword: DEPTH */ +#line 15627 "preproc.y" + { + (yyval.str) = mm_strdup("depth"); +} +#line 59081 "preproc.c" + break; + + case 2830: /* bare_label_keyword: DESC */ +#line 15631 "preproc.y" + { + (yyval.str) = mm_strdup("desc"); +} +#line 59089 "preproc.c" + break; + + case 2831: /* bare_label_keyword: DETACH */ +#line 15635 "preproc.y" + { + (yyval.str) = mm_strdup("detach"); +} +#line 59097 "preproc.c" + break; + + case 2832: /* bare_label_keyword: DICTIONARY */ +#line 15639 "preproc.y" + { + (yyval.str) = mm_strdup("dictionary"); +} +#line 59105 "preproc.c" + break; + + case 2833: /* bare_label_keyword: DISABLE_P */ +#line 15643 "preproc.y" + { + (yyval.str) = mm_strdup("disable"); +} +#line 59113 "preproc.c" + break; + + case 2834: /* bare_label_keyword: DISCARD */ +#line 15647 "preproc.y" + { + (yyval.str) = mm_strdup("discard"); +} +#line 59121 "preproc.c" + break; + + case 2835: /* bare_label_keyword: DISTINCT */ +#line 15651 "preproc.y" + { + (yyval.str) = mm_strdup("distinct"); +} +#line 59129 "preproc.c" + break; + + case 2836: /* bare_label_keyword: DO */ +#line 15655 "preproc.y" + { + (yyval.str) = mm_strdup("do"); +} +#line 59137 "preproc.c" + break; + + case 2837: /* bare_label_keyword: DOCUMENT_P */ +#line 15659 "preproc.y" + { + (yyval.str) = mm_strdup("document"); +} +#line 59145 "preproc.c" + break; + + case 2838: /* bare_label_keyword: DOMAIN_P */ +#line 15663 "preproc.y" + { + (yyval.str) = mm_strdup("domain"); +} +#line 59153 "preproc.c" + break; + + case 2839: /* bare_label_keyword: DOUBLE_P */ +#line 15667 "preproc.y" + { + (yyval.str) = mm_strdup("double"); +} +#line 59161 "preproc.c" + break; + + case 2840: /* bare_label_keyword: DROP */ +#line 15671 "preproc.y" + { + (yyval.str) = mm_strdup("drop"); +} +#line 59169 "preproc.c" + break; + + case 2841: /* bare_label_keyword: EACH */ +#line 15675 "preproc.y" + { + (yyval.str) = mm_strdup("each"); +} +#line 59177 "preproc.c" + break; + + case 2842: /* bare_label_keyword: ELSE */ +#line 15679 "preproc.y" + { + (yyval.str) = mm_strdup("else"); +} +#line 59185 "preproc.c" + break; + + case 2843: /* bare_label_keyword: ENABLE_P */ +#line 15683 "preproc.y" + { + (yyval.str) = mm_strdup("enable"); +} +#line 59193 "preproc.c" + break; + + case 2844: /* bare_label_keyword: ENCODING */ +#line 15687 "preproc.y" + { + (yyval.str) = mm_strdup("encoding"); +} +#line 59201 "preproc.c" + break; + + case 2845: /* bare_label_keyword: ENCRYPTED */ +#line 15691 "preproc.y" + { + (yyval.str) = mm_strdup("encrypted"); +} +#line 59209 "preproc.c" + break; + + case 2846: /* bare_label_keyword: END_P */ +#line 15695 "preproc.y" + { + (yyval.str) = mm_strdup("end"); +} +#line 59217 "preproc.c" + break; + + case 2847: /* bare_label_keyword: ENUM_P */ +#line 15699 "preproc.y" + { + (yyval.str) = mm_strdup("enum"); +} +#line 59225 "preproc.c" + break; + + case 2848: /* bare_label_keyword: ESCAPE */ +#line 15703 "preproc.y" + { + (yyval.str) = mm_strdup("escape"); +} +#line 59233 "preproc.c" + break; + + case 2849: /* bare_label_keyword: EVENT */ +#line 15707 "preproc.y" + { + (yyval.str) = mm_strdup("event"); +} +#line 59241 "preproc.c" + break; + + case 2850: /* bare_label_keyword: EXCLUDE */ +#line 15711 "preproc.y" + { + (yyval.str) = mm_strdup("exclude"); +} +#line 59249 "preproc.c" + break; + + case 2851: /* bare_label_keyword: EXCLUDING */ +#line 15715 "preproc.y" + { + (yyval.str) = mm_strdup("excluding"); +} +#line 59257 "preproc.c" + break; + + case 2852: /* bare_label_keyword: EXCLUSIVE */ +#line 15719 "preproc.y" + { + (yyval.str) = mm_strdup("exclusive"); +} +#line 59265 "preproc.c" + break; + + case 2853: /* bare_label_keyword: EXECUTE */ +#line 15723 "preproc.y" + { + (yyval.str) = mm_strdup("execute"); +} +#line 59273 "preproc.c" + break; + + case 2854: /* bare_label_keyword: EXISTS */ +#line 15727 "preproc.y" + { + (yyval.str) = mm_strdup("exists"); +} +#line 59281 "preproc.c" + break; + + case 2855: /* bare_label_keyword: EXPLAIN */ +#line 15731 "preproc.y" + { + (yyval.str) = mm_strdup("explain"); +} +#line 59289 "preproc.c" + break; + + case 2856: /* bare_label_keyword: EXPRESSION */ +#line 15735 "preproc.y" + { + (yyval.str) = mm_strdup("expression"); +} +#line 59297 "preproc.c" + break; + + case 2857: /* bare_label_keyword: EXTENSION */ +#line 15739 "preproc.y" + { + (yyval.str) = mm_strdup("extension"); +} +#line 59305 "preproc.c" + break; + + case 2858: /* bare_label_keyword: EXTERNAL */ +#line 15743 "preproc.y" + { + (yyval.str) = mm_strdup("external"); +} +#line 59313 "preproc.c" + break; + + case 2859: /* bare_label_keyword: EXTRACT */ +#line 15747 "preproc.y" + { + (yyval.str) = mm_strdup("extract"); +} +#line 59321 "preproc.c" + break; + + case 2860: /* bare_label_keyword: FALSE_P */ +#line 15751 "preproc.y" + { + (yyval.str) = mm_strdup("false"); +} +#line 59329 "preproc.c" + break; + + case 2861: /* bare_label_keyword: FAMILY */ +#line 15755 "preproc.y" + { + (yyval.str) = mm_strdup("family"); +} +#line 59337 "preproc.c" + break; + + case 2862: /* bare_label_keyword: FINALIZE */ +#line 15759 "preproc.y" + { + (yyval.str) = mm_strdup("finalize"); +} +#line 59345 "preproc.c" + break; + + case 2863: /* bare_label_keyword: FIRST_P */ +#line 15763 "preproc.y" + { + (yyval.str) = mm_strdup("first"); +} +#line 59353 "preproc.c" + break; + + case 2864: /* bare_label_keyword: FLOAT_P */ +#line 15767 "preproc.y" + { + (yyval.str) = mm_strdup("float"); +} +#line 59361 "preproc.c" + break; + + case 2865: /* bare_label_keyword: FOLLOWING */ +#line 15771 "preproc.y" + { + (yyval.str) = mm_strdup("following"); +} +#line 59369 "preproc.c" + break; + + case 2866: /* bare_label_keyword: FORCE */ +#line 15775 "preproc.y" + { + (yyval.str) = mm_strdup("force"); +} +#line 59377 "preproc.c" + break; + + case 2867: /* bare_label_keyword: FOREIGN */ +#line 15779 "preproc.y" + { + (yyval.str) = mm_strdup("foreign"); +} +#line 59385 "preproc.c" + break; + + case 2868: /* bare_label_keyword: FORWARD */ +#line 15783 "preproc.y" + { + (yyval.str) = mm_strdup("forward"); +} +#line 59393 "preproc.c" + break; + + case 2869: /* bare_label_keyword: FREEZE */ +#line 15787 "preproc.y" + { + (yyval.str) = mm_strdup("freeze"); +} +#line 59401 "preproc.c" + break; + + case 2870: /* bare_label_keyword: FULL */ +#line 15791 "preproc.y" + { + (yyval.str) = mm_strdup("full"); +} +#line 59409 "preproc.c" + break; + + case 2871: /* bare_label_keyword: FUNCTION */ +#line 15795 "preproc.y" + { + (yyval.str) = mm_strdup("function"); +} +#line 59417 "preproc.c" + break; + + case 2872: /* bare_label_keyword: FUNCTIONS */ +#line 15799 "preproc.y" + { + (yyval.str) = mm_strdup("functions"); +} +#line 59425 "preproc.c" + break; + + case 2873: /* bare_label_keyword: GENERATED */ +#line 15803 "preproc.y" + { + (yyval.str) = mm_strdup("generated"); +} +#line 59433 "preproc.c" + break; + + case 2874: /* bare_label_keyword: GLOBAL */ +#line 15807 "preproc.y" + { + (yyval.str) = mm_strdup("global"); +} +#line 59441 "preproc.c" + break; + + case 2875: /* bare_label_keyword: GRANTED */ +#line 15811 "preproc.y" + { + (yyval.str) = mm_strdup("granted"); +} +#line 59449 "preproc.c" + break; + + case 2876: /* bare_label_keyword: GREATEST */ +#line 15815 "preproc.y" + { + (yyval.str) = mm_strdup("greatest"); +} +#line 59457 "preproc.c" + break; + + case 2877: /* bare_label_keyword: GROUPING */ +#line 15819 "preproc.y" + { + (yyval.str) = mm_strdup("grouping"); +} +#line 59465 "preproc.c" + break; + + case 2878: /* bare_label_keyword: GROUPS */ +#line 15823 "preproc.y" + { + (yyval.str) = mm_strdup("groups"); +} +#line 59473 "preproc.c" + break; + + case 2879: /* bare_label_keyword: HANDLER */ +#line 15827 "preproc.y" + { + (yyval.str) = mm_strdup("handler"); +} +#line 59481 "preproc.c" + break; + + case 2880: /* bare_label_keyword: HEADER_P */ +#line 15831 "preproc.y" + { + (yyval.str) = mm_strdup("header"); +} +#line 59489 "preproc.c" + break; + + case 2881: /* bare_label_keyword: HOLD */ +#line 15835 "preproc.y" + { + (yyval.str) = mm_strdup("hold"); +} +#line 59497 "preproc.c" + break; + + case 2882: /* bare_label_keyword: IDENTITY_P */ +#line 15839 "preproc.y" + { + (yyval.str) = mm_strdup("identity"); +} +#line 59505 "preproc.c" + break; + + case 2883: /* bare_label_keyword: IF_P */ +#line 15843 "preproc.y" + { + (yyval.str) = mm_strdup("if"); +} +#line 59513 "preproc.c" + break; + + case 2884: /* bare_label_keyword: ILIKE */ +#line 15847 "preproc.y" + { + (yyval.str) = mm_strdup("ilike"); +} +#line 59521 "preproc.c" + break; + + case 2885: /* bare_label_keyword: IMMEDIATE */ +#line 15851 "preproc.y" + { + (yyval.str) = mm_strdup("immediate"); +} +#line 59529 "preproc.c" + break; + + case 2886: /* bare_label_keyword: IMMUTABLE */ +#line 15855 "preproc.y" + { + (yyval.str) = mm_strdup("immutable"); +} +#line 59537 "preproc.c" + break; + + case 2887: /* bare_label_keyword: IMPLICIT_P */ +#line 15859 "preproc.y" + { + (yyval.str) = mm_strdup("implicit"); +} +#line 59545 "preproc.c" + break; + + case 2888: /* bare_label_keyword: IMPORT_P */ +#line 15863 "preproc.y" + { + (yyval.str) = mm_strdup("import"); +} +#line 59553 "preproc.c" + break; + + case 2889: /* bare_label_keyword: IN_P */ +#line 15867 "preproc.y" + { + (yyval.str) = mm_strdup("in"); +} +#line 59561 "preproc.c" + break; + + case 2890: /* bare_label_keyword: INCLUDE */ +#line 15871 "preproc.y" + { + (yyval.str) = mm_strdup("include"); +} +#line 59569 "preproc.c" + break; + + case 2891: /* bare_label_keyword: INCLUDING */ +#line 15875 "preproc.y" + { + (yyval.str) = mm_strdup("including"); +} +#line 59577 "preproc.c" + break; + + case 2892: /* bare_label_keyword: INCREMENT */ +#line 15879 "preproc.y" + { + (yyval.str) = mm_strdup("increment"); +} +#line 59585 "preproc.c" + break; + + case 2893: /* bare_label_keyword: INDEX */ +#line 15883 "preproc.y" + { + (yyval.str) = mm_strdup("index"); +} +#line 59593 "preproc.c" + break; + + case 2894: /* bare_label_keyword: INDEXES */ +#line 15887 "preproc.y" + { + (yyval.str) = mm_strdup("indexes"); +} +#line 59601 "preproc.c" + break; + + case 2895: /* bare_label_keyword: INHERIT */ +#line 15891 "preproc.y" + { + (yyval.str) = mm_strdup("inherit"); +} +#line 59609 "preproc.c" + break; + + case 2896: /* bare_label_keyword: INHERITS */ +#line 15895 "preproc.y" + { + (yyval.str) = mm_strdup("inherits"); +} +#line 59617 "preproc.c" + break; + + case 2897: /* bare_label_keyword: INITIALLY */ +#line 15899 "preproc.y" + { + (yyval.str) = mm_strdup("initially"); +} +#line 59625 "preproc.c" + break; + + case 2898: /* bare_label_keyword: INLINE_P */ +#line 15903 "preproc.y" + { + (yyval.str) = mm_strdup("inline"); +} +#line 59633 "preproc.c" + break; + + case 2899: /* bare_label_keyword: INNER_P */ +#line 15907 "preproc.y" + { + (yyval.str) = mm_strdup("inner"); +} +#line 59641 "preproc.c" + break; + + case 2900: /* bare_label_keyword: INOUT */ +#line 15911 "preproc.y" + { + (yyval.str) = mm_strdup("inout"); +} +#line 59649 "preproc.c" + break; + + case 2901: /* bare_label_keyword: INPUT_P */ +#line 15915 "preproc.y" + { + (yyval.str) = mm_strdup("input"); +} +#line 59657 "preproc.c" + break; + + case 2902: /* bare_label_keyword: INSENSITIVE */ +#line 15919 "preproc.y" + { + (yyval.str) = mm_strdup("insensitive"); +} +#line 59665 "preproc.c" + break; + + case 2903: /* bare_label_keyword: INSERT */ +#line 15923 "preproc.y" + { + (yyval.str) = mm_strdup("insert"); +} +#line 59673 "preproc.c" + break; + + case 2904: /* bare_label_keyword: INSTEAD */ +#line 15927 "preproc.y" + { + (yyval.str) = mm_strdup("instead"); +} +#line 59681 "preproc.c" + break; + + case 2905: /* bare_label_keyword: INT_P */ +#line 15931 "preproc.y" + { + (yyval.str) = mm_strdup("int"); +} +#line 59689 "preproc.c" + break; + + case 2906: /* bare_label_keyword: INTEGER */ +#line 15935 "preproc.y" + { + (yyval.str) = mm_strdup("integer"); +} +#line 59697 "preproc.c" + break; + + case 2907: /* bare_label_keyword: INTERVAL */ +#line 15939 "preproc.y" + { + (yyval.str) = mm_strdup("interval"); +} +#line 59705 "preproc.c" + break; + + case 2908: /* bare_label_keyword: INVOKER */ +#line 15943 "preproc.y" + { + (yyval.str) = mm_strdup("invoker"); +} +#line 59713 "preproc.c" + break; + + case 2909: /* bare_label_keyword: IS */ +#line 15947 "preproc.y" + { + (yyval.str) = mm_strdup("is"); +} +#line 59721 "preproc.c" + break; + + case 2910: /* bare_label_keyword: ISOLATION */ +#line 15951 "preproc.y" + { + (yyval.str) = mm_strdup("isolation"); +} +#line 59729 "preproc.c" + break; + + case 2911: /* bare_label_keyword: JOIN */ +#line 15955 "preproc.y" + { + (yyval.str) = mm_strdup("join"); +} +#line 59737 "preproc.c" + break; + + case 2912: /* bare_label_keyword: KEY */ +#line 15959 "preproc.y" + { + (yyval.str) = mm_strdup("key"); +} +#line 59745 "preproc.c" + break; + + case 2913: /* bare_label_keyword: LABEL */ +#line 15963 "preproc.y" + { + (yyval.str) = mm_strdup("label"); +} +#line 59753 "preproc.c" + break; + + case 2914: /* bare_label_keyword: LANGUAGE */ +#line 15967 "preproc.y" + { + (yyval.str) = mm_strdup("language"); +} +#line 59761 "preproc.c" + break; + + case 2915: /* bare_label_keyword: LARGE_P */ +#line 15971 "preproc.y" + { + (yyval.str) = mm_strdup("large"); +} +#line 59769 "preproc.c" + break; + + case 2916: /* bare_label_keyword: LAST_P */ +#line 15975 "preproc.y" + { + (yyval.str) = mm_strdup("last"); +} +#line 59777 "preproc.c" + break; + + case 2917: /* bare_label_keyword: LATERAL_P */ +#line 15979 "preproc.y" + { + (yyval.str) = mm_strdup("lateral"); +} +#line 59785 "preproc.c" + break; + + case 2918: /* bare_label_keyword: LEADING */ +#line 15983 "preproc.y" + { + (yyval.str) = mm_strdup("leading"); +} +#line 59793 "preproc.c" + break; + + case 2919: /* bare_label_keyword: LEAKPROOF */ +#line 15987 "preproc.y" + { + (yyval.str) = mm_strdup("leakproof"); +} +#line 59801 "preproc.c" + break; + + case 2920: /* bare_label_keyword: LEAST */ +#line 15991 "preproc.y" + { + (yyval.str) = mm_strdup("least"); +} +#line 59809 "preproc.c" + break; + + case 2921: /* bare_label_keyword: LEFT */ +#line 15995 "preproc.y" + { + (yyval.str) = mm_strdup("left"); +} +#line 59817 "preproc.c" + break; + + case 2922: /* bare_label_keyword: LEVEL */ +#line 15999 "preproc.y" + { + (yyval.str) = mm_strdup("level"); +} +#line 59825 "preproc.c" + break; + + case 2923: /* bare_label_keyword: LIKE */ +#line 16003 "preproc.y" + { + (yyval.str) = mm_strdup("like"); +} +#line 59833 "preproc.c" + break; + + case 2924: /* bare_label_keyword: LISTEN */ +#line 16007 "preproc.y" + { + (yyval.str) = mm_strdup("listen"); +} +#line 59841 "preproc.c" + break; + + case 2925: /* bare_label_keyword: LOAD */ +#line 16011 "preproc.y" + { + (yyval.str) = mm_strdup("load"); +} +#line 59849 "preproc.c" + break; + + case 2926: /* bare_label_keyword: LOCAL */ +#line 16015 "preproc.y" + { + (yyval.str) = mm_strdup("local"); +} +#line 59857 "preproc.c" + break; + + case 2927: /* bare_label_keyword: LOCALTIME */ +#line 16019 "preproc.y" + { + (yyval.str) = mm_strdup("localtime"); +} +#line 59865 "preproc.c" + break; + + case 2928: /* bare_label_keyword: LOCALTIMESTAMP */ +#line 16023 "preproc.y" + { + (yyval.str) = mm_strdup("localtimestamp"); +} +#line 59873 "preproc.c" + break; + + case 2929: /* bare_label_keyword: LOCATION */ +#line 16027 "preproc.y" + { + (yyval.str) = mm_strdup("location"); +} +#line 59881 "preproc.c" + break; + + case 2930: /* bare_label_keyword: LOCK_P */ +#line 16031 "preproc.y" + { + (yyval.str) = mm_strdup("lock"); +} +#line 59889 "preproc.c" + break; + + case 2931: /* bare_label_keyword: LOCKED */ +#line 16035 "preproc.y" + { + (yyval.str) = mm_strdup("locked"); +} +#line 59897 "preproc.c" + break; + + case 2932: /* bare_label_keyword: LOGGED */ +#line 16039 "preproc.y" + { + (yyval.str) = mm_strdup("logged"); +} +#line 59905 "preproc.c" + break; + + case 2933: /* bare_label_keyword: MAPPING */ +#line 16043 "preproc.y" + { + (yyval.str) = mm_strdup("mapping"); +} +#line 59913 "preproc.c" + break; + + case 2934: /* bare_label_keyword: MATCH */ +#line 16047 "preproc.y" + { + (yyval.str) = mm_strdup("match"); +} +#line 59921 "preproc.c" + break; + + case 2935: /* bare_label_keyword: MATERIALIZED */ +#line 16051 "preproc.y" + { + (yyval.str) = mm_strdup("materialized"); +} +#line 59929 "preproc.c" + break; + + case 2936: /* bare_label_keyword: MAXVALUE */ +#line 16055 "preproc.y" + { + (yyval.str) = mm_strdup("maxvalue"); +} +#line 59937 "preproc.c" + break; + + case 2937: /* bare_label_keyword: METHOD */ +#line 16059 "preproc.y" + { + (yyval.str) = mm_strdup("method"); +} +#line 59945 "preproc.c" + break; + + case 2938: /* bare_label_keyword: MINVALUE */ +#line 16063 "preproc.y" + { + (yyval.str) = mm_strdup("minvalue"); +} +#line 59953 "preproc.c" + break; + + case 2939: /* bare_label_keyword: MODE */ +#line 16067 "preproc.y" + { + (yyval.str) = mm_strdup("mode"); +} +#line 59961 "preproc.c" + break; + + case 2940: /* bare_label_keyword: MOVE */ +#line 16071 "preproc.y" + { + (yyval.str) = mm_strdup("move"); +} +#line 59969 "preproc.c" + break; + + case 2941: /* bare_label_keyword: NAME_P */ +#line 16075 "preproc.y" + { + (yyval.str) = mm_strdup("name"); +} +#line 59977 "preproc.c" + break; + + case 2942: /* bare_label_keyword: NAMES */ +#line 16079 "preproc.y" + { + (yyval.str) = mm_strdup("names"); +} +#line 59985 "preproc.c" + break; + + case 2943: /* bare_label_keyword: NATIONAL */ +#line 16083 "preproc.y" + { + (yyval.str) = mm_strdup("national"); +} +#line 59993 "preproc.c" + break; + + case 2944: /* bare_label_keyword: NATURAL */ +#line 16087 "preproc.y" + { + (yyval.str) = mm_strdup("natural"); +} +#line 60001 "preproc.c" + break; + + case 2945: /* bare_label_keyword: NCHAR */ +#line 16091 "preproc.y" + { + (yyval.str) = mm_strdup("nchar"); +} +#line 60009 "preproc.c" + break; + + case 2946: /* bare_label_keyword: NEW */ +#line 16095 "preproc.y" + { + (yyval.str) = mm_strdup("new"); +} +#line 60017 "preproc.c" + break; + + case 2947: /* bare_label_keyword: NEXT */ +#line 16099 "preproc.y" + { + (yyval.str) = mm_strdup("next"); +} +#line 60025 "preproc.c" + break; + + case 2948: /* bare_label_keyword: NFC */ +#line 16103 "preproc.y" + { + (yyval.str) = mm_strdup("nfc"); +} +#line 60033 "preproc.c" + break; + + case 2949: /* bare_label_keyword: NFD */ +#line 16107 "preproc.y" + { + (yyval.str) = mm_strdup("nfd"); +} +#line 60041 "preproc.c" + break; + + case 2950: /* bare_label_keyword: NFKC */ +#line 16111 "preproc.y" + { + (yyval.str) = mm_strdup("nfkc"); +} +#line 60049 "preproc.c" + break; + + case 2951: /* bare_label_keyword: NFKD */ +#line 16115 "preproc.y" + { + (yyval.str) = mm_strdup("nfkd"); +} +#line 60057 "preproc.c" + break; + + case 2952: /* bare_label_keyword: NO */ +#line 16119 "preproc.y" + { + (yyval.str) = mm_strdup("no"); +} +#line 60065 "preproc.c" + break; + + case 2953: /* bare_label_keyword: NONE */ +#line 16123 "preproc.y" + { + (yyval.str) = mm_strdup("none"); +} +#line 60073 "preproc.c" + break; + + case 2954: /* bare_label_keyword: NORMALIZE */ +#line 16127 "preproc.y" + { + (yyval.str) = mm_strdup("normalize"); +} +#line 60081 "preproc.c" + break; + + case 2955: /* bare_label_keyword: NORMALIZED */ +#line 16131 "preproc.y" + { + (yyval.str) = mm_strdup("normalized"); +} +#line 60089 "preproc.c" + break; + + case 2956: /* bare_label_keyword: NOT */ +#line 16135 "preproc.y" + { + (yyval.str) = mm_strdup("not"); +} +#line 60097 "preproc.c" + break; + + case 2957: /* bare_label_keyword: NOTHING */ +#line 16139 "preproc.y" + { + (yyval.str) = mm_strdup("nothing"); +} +#line 60105 "preproc.c" + break; + + case 2958: /* bare_label_keyword: NOTIFY */ +#line 16143 "preproc.y" + { + (yyval.str) = mm_strdup("notify"); +} +#line 60113 "preproc.c" + break; + + case 2959: /* bare_label_keyword: NOWAIT */ +#line 16147 "preproc.y" + { + (yyval.str) = mm_strdup("nowait"); +} +#line 60121 "preproc.c" + break; + + case 2960: /* bare_label_keyword: NULL_P */ +#line 16151 "preproc.y" + { + (yyval.str) = mm_strdup("null"); +} +#line 60129 "preproc.c" + break; + + case 2961: /* bare_label_keyword: NULLIF */ +#line 16155 "preproc.y" + { + (yyval.str) = mm_strdup("nullif"); +} +#line 60137 "preproc.c" + break; + + case 2962: /* bare_label_keyword: NULLS_P */ +#line 16159 "preproc.y" + { + (yyval.str) = mm_strdup("nulls"); +} +#line 60145 "preproc.c" + break; + + case 2963: /* bare_label_keyword: NUMERIC */ +#line 16163 "preproc.y" + { + (yyval.str) = mm_strdup("numeric"); +} +#line 60153 "preproc.c" + break; + + case 2964: /* bare_label_keyword: OBJECT_P */ +#line 16167 "preproc.y" + { + (yyval.str) = mm_strdup("object"); +} +#line 60161 "preproc.c" + break; + + case 2965: /* bare_label_keyword: OF */ +#line 16171 "preproc.y" + { + (yyval.str) = mm_strdup("of"); +} +#line 60169 "preproc.c" + break; + + case 2966: /* bare_label_keyword: OFF */ +#line 16175 "preproc.y" + { + (yyval.str) = mm_strdup("off"); +} +#line 60177 "preproc.c" + break; + + case 2967: /* bare_label_keyword: OIDS */ +#line 16179 "preproc.y" + { + (yyval.str) = mm_strdup("oids"); +} +#line 60185 "preproc.c" + break; + + case 2968: /* bare_label_keyword: OLD */ +#line 16183 "preproc.y" + { + (yyval.str) = mm_strdup("old"); +} +#line 60193 "preproc.c" + break; + + case 2969: /* bare_label_keyword: ONLY */ +#line 16187 "preproc.y" + { + (yyval.str) = mm_strdup("only"); +} +#line 60201 "preproc.c" + break; + + case 2970: /* bare_label_keyword: OPERATOR */ +#line 16191 "preproc.y" + { + (yyval.str) = mm_strdup("operator"); +} +#line 60209 "preproc.c" + break; + + case 2971: /* bare_label_keyword: OPTION */ +#line 16195 "preproc.y" + { + (yyval.str) = mm_strdup("option"); +} +#line 60217 "preproc.c" + break; + + case 2972: /* bare_label_keyword: OPTIONS */ +#line 16199 "preproc.y" + { + (yyval.str) = mm_strdup("options"); +} +#line 60225 "preproc.c" + break; + + case 2973: /* bare_label_keyword: OR */ +#line 16203 "preproc.y" + { + (yyval.str) = mm_strdup("or"); +} +#line 60233 "preproc.c" + break; + + case 2974: /* bare_label_keyword: ORDINALITY */ +#line 16207 "preproc.y" + { + (yyval.str) = mm_strdup("ordinality"); +} +#line 60241 "preproc.c" + break; + + case 2975: /* bare_label_keyword: OTHERS */ +#line 16211 "preproc.y" + { + (yyval.str) = mm_strdup("others"); +} +#line 60249 "preproc.c" + break; + + case 2976: /* bare_label_keyword: OUT_P */ +#line 16215 "preproc.y" + { + (yyval.str) = mm_strdup("out"); +} +#line 60257 "preproc.c" + break; + + case 2977: /* bare_label_keyword: OUTER_P */ +#line 16219 "preproc.y" + { + (yyval.str) = mm_strdup("outer"); +} +#line 60265 "preproc.c" + break; + + case 2978: /* bare_label_keyword: OVERLAY */ +#line 16223 "preproc.y" + { + (yyval.str) = mm_strdup("overlay"); +} +#line 60273 "preproc.c" + break; + + case 2979: /* bare_label_keyword: OVERRIDING */ +#line 16227 "preproc.y" + { + (yyval.str) = mm_strdup("overriding"); +} +#line 60281 "preproc.c" + break; + + case 2980: /* bare_label_keyword: OWNED */ +#line 16231 "preproc.y" + { + (yyval.str) = mm_strdup("owned"); +} +#line 60289 "preproc.c" + break; + + case 2981: /* bare_label_keyword: OWNER */ +#line 16235 "preproc.y" + { + (yyval.str) = mm_strdup("owner"); +} +#line 60297 "preproc.c" + break; + + case 2982: /* bare_label_keyword: PARALLEL */ +#line 16239 "preproc.y" + { + (yyval.str) = mm_strdup("parallel"); +} +#line 60305 "preproc.c" + break; + + case 2983: /* bare_label_keyword: PARSER */ +#line 16243 "preproc.y" + { + (yyval.str) = mm_strdup("parser"); +} +#line 60313 "preproc.c" + break; + + case 2984: /* bare_label_keyword: PARTIAL */ +#line 16247 "preproc.y" + { + (yyval.str) = mm_strdup("partial"); +} +#line 60321 "preproc.c" + break; + + case 2985: /* bare_label_keyword: PARTITION */ +#line 16251 "preproc.y" + { + (yyval.str) = mm_strdup("partition"); +} +#line 60329 "preproc.c" + break; + + case 2986: /* bare_label_keyword: PASSING */ +#line 16255 "preproc.y" + { + (yyval.str) = mm_strdup("passing"); +} +#line 60337 "preproc.c" + break; + + case 2987: /* bare_label_keyword: PASSWORD */ +#line 16259 "preproc.y" + { + (yyval.str) = mm_strdup("password"); +} +#line 60345 "preproc.c" + break; + + case 2988: /* bare_label_keyword: PLACING */ +#line 16263 "preproc.y" + { + (yyval.str) = mm_strdup("placing"); +} +#line 60353 "preproc.c" + break; + + case 2989: /* bare_label_keyword: PLANS */ +#line 16267 "preproc.y" + { + (yyval.str) = mm_strdup("plans"); +} +#line 60361 "preproc.c" + break; + + case 2990: /* bare_label_keyword: POLICY */ +#line 16271 "preproc.y" + { + (yyval.str) = mm_strdup("policy"); +} +#line 60369 "preproc.c" + break; + + case 2991: /* bare_label_keyword: POSITION */ +#line 16275 "preproc.y" + { + (yyval.str) = mm_strdup("position"); +} +#line 60377 "preproc.c" + break; + + case 2992: /* bare_label_keyword: PRECEDING */ +#line 16279 "preproc.y" + { + (yyval.str) = mm_strdup("preceding"); +} +#line 60385 "preproc.c" + break; + + case 2993: /* bare_label_keyword: PREPARE */ +#line 16283 "preproc.y" + { + (yyval.str) = mm_strdup("prepare"); +} +#line 60393 "preproc.c" + break; + + case 2994: /* bare_label_keyword: PREPARED */ +#line 16287 "preproc.y" + { + (yyval.str) = mm_strdup("prepared"); +} +#line 60401 "preproc.c" + break; + + case 2995: /* bare_label_keyword: PRESERVE */ +#line 16291 "preproc.y" + { + (yyval.str) = mm_strdup("preserve"); +} +#line 60409 "preproc.c" + break; + + case 2996: /* bare_label_keyword: PRIMARY */ +#line 16295 "preproc.y" + { + (yyval.str) = mm_strdup("primary"); +} +#line 60417 "preproc.c" + break; + + case 2997: /* bare_label_keyword: PRIOR */ +#line 16299 "preproc.y" + { + (yyval.str) = mm_strdup("prior"); +} +#line 60425 "preproc.c" + break; + + case 2998: /* bare_label_keyword: PRIVILEGES */ +#line 16303 "preproc.y" + { + (yyval.str) = mm_strdup("privileges"); +} +#line 60433 "preproc.c" + break; + + case 2999: /* bare_label_keyword: PROCEDURAL */ +#line 16307 "preproc.y" + { + (yyval.str) = mm_strdup("procedural"); +} +#line 60441 "preproc.c" + break; + + case 3000: /* bare_label_keyword: PROCEDURE */ +#line 16311 "preproc.y" + { + (yyval.str) = mm_strdup("procedure"); +} +#line 60449 "preproc.c" + break; + + case 3001: /* bare_label_keyword: PROCEDURES */ +#line 16315 "preproc.y" + { + (yyval.str) = mm_strdup("procedures"); +} +#line 60457 "preproc.c" + break; + + case 3002: /* bare_label_keyword: PROGRAM */ +#line 16319 "preproc.y" + { + (yyval.str) = mm_strdup("program"); +} +#line 60465 "preproc.c" + break; + + case 3003: /* bare_label_keyword: PUBLICATION */ +#line 16323 "preproc.y" + { + (yyval.str) = mm_strdup("publication"); +} +#line 60473 "preproc.c" + break; + + case 3004: /* bare_label_keyword: QUOTE */ +#line 16327 "preproc.y" + { + (yyval.str) = mm_strdup("quote"); +} +#line 60481 "preproc.c" + break; + + case 3005: /* bare_label_keyword: RANGE */ +#line 16331 "preproc.y" + { + (yyval.str) = mm_strdup("range"); +} +#line 60489 "preproc.c" + break; + + case 3006: /* bare_label_keyword: READ */ +#line 16335 "preproc.y" + { + (yyval.str) = mm_strdup("read"); +} +#line 60497 "preproc.c" + break; + + case 3007: /* bare_label_keyword: REAL */ +#line 16339 "preproc.y" + { + (yyval.str) = mm_strdup("real"); +} +#line 60505 "preproc.c" + break; + + case 3008: /* bare_label_keyword: REASSIGN */ +#line 16343 "preproc.y" + { + (yyval.str) = mm_strdup("reassign"); +} +#line 60513 "preproc.c" + break; + + case 3009: /* bare_label_keyword: RECHECK */ +#line 16347 "preproc.y" + { + (yyval.str) = mm_strdup("recheck"); +} +#line 60521 "preproc.c" + break; + + case 3010: /* bare_label_keyword: RECURSIVE */ +#line 16351 "preproc.y" + { + (yyval.str) = mm_strdup("recursive"); +} +#line 60529 "preproc.c" + break; + + case 3011: /* bare_label_keyword: REF */ +#line 16355 "preproc.y" + { + (yyval.str) = mm_strdup("ref"); +} +#line 60537 "preproc.c" + break; + + case 3012: /* bare_label_keyword: REFERENCES */ +#line 16359 "preproc.y" + { + (yyval.str) = mm_strdup("references"); +} +#line 60545 "preproc.c" + break; + + case 3013: /* bare_label_keyword: REFERENCING */ +#line 16363 "preproc.y" + { + (yyval.str) = mm_strdup("referencing"); +} +#line 60553 "preproc.c" + break; + + case 3014: /* bare_label_keyword: REFRESH */ +#line 16367 "preproc.y" + { + (yyval.str) = mm_strdup("refresh"); +} +#line 60561 "preproc.c" + break; + + case 3015: /* bare_label_keyword: REINDEX */ +#line 16371 "preproc.y" + { + (yyval.str) = mm_strdup("reindex"); +} +#line 60569 "preproc.c" + break; + + case 3016: /* bare_label_keyword: RELATIVE_P */ +#line 16375 "preproc.y" + { + (yyval.str) = mm_strdup("relative"); +} +#line 60577 "preproc.c" + break; + + case 3017: /* bare_label_keyword: RELEASE */ +#line 16379 "preproc.y" + { + (yyval.str) = mm_strdup("release"); +} +#line 60585 "preproc.c" + break; + + case 3018: /* bare_label_keyword: RENAME */ +#line 16383 "preproc.y" + { + (yyval.str) = mm_strdup("rename"); +} +#line 60593 "preproc.c" + break; + + case 3019: /* bare_label_keyword: REPEATABLE */ +#line 16387 "preproc.y" + { + (yyval.str) = mm_strdup("repeatable"); +} +#line 60601 "preproc.c" + break; + + case 3020: /* bare_label_keyword: REPLACE */ +#line 16391 "preproc.y" + { + (yyval.str) = mm_strdup("replace"); +} +#line 60609 "preproc.c" + break; + + case 3021: /* bare_label_keyword: REPLICA */ +#line 16395 "preproc.y" + { + (yyval.str) = mm_strdup("replica"); +} +#line 60617 "preproc.c" + break; + + case 3022: /* bare_label_keyword: RESET */ +#line 16399 "preproc.y" + { + (yyval.str) = mm_strdup("reset"); +} +#line 60625 "preproc.c" + break; + + case 3023: /* bare_label_keyword: RESTART */ +#line 16403 "preproc.y" + { + (yyval.str) = mm_strdup("restart"); +} +#line 60633 "preproc.c" + break; + + case 3024: /* bare_label_keyword: RESTRICT */ +#line 16407 "preproc.y" + { + (yyval.str) = mm_strdup("restrict"); +} +#line 60641 "preproc.c" + break; + + case 3025: /* bare_label_keyword: RETURN */ +#line 16411 "preproc.y" + { + (yyval.str) = mm_strdup("return"); +} +#line 60649 "preproc.c" + break; + + case 3026: /* bare_label_keyword: RETURNS */ +#line 16415 "preproc.y" + { + (yyval.str) = mm_strdup("returns"); +} +#line 60657 "preproc.c" + break; + + case 3027: /* bare_label_keyword: REVOKE */ +#line 16419 "preproc.y" + { + (yyval.str) = mm_strdup("revoke"); +} +#line 60665 "preproc.c" + break; + + case 3028: /* bare_label_keyword: RIGHT */ +#line 16423 "preproc.y" + { + (yyval.str) = mm_strdup("right"); +} +#line 60673 "preproc.c" + break; + + case 3029: /* bare_label_keyword: ROLE */ +#line 16427 "preproc.y" + { + (yyval.str) = mm_strdup("role"); +} +#line 60681 "preproc.c" + break; + + case 3030: /* bare_label_keyword: ROLLBACK */ +#line 16431 "preproc.y" + { + (yyval.str) = mm_strdup("rollback"); +} +#line 60689 "preproc.c" + break; + + case 3031: /* bare_label_keyword: ROLLUP */ +#line 16435 "preproc.y" + { + (yyval.str) = mm_strdup("rollup"); +} +#line 60697 "preproc.c" + break; + + case 3032: /* bare_label_keyword: ROUTINE */ +#line 16439 "preproc.y" + { + (yyval.str) = mm_strdup("routine"); +} +#line 60705 "preproc.c" + break; + + case 3033: /* bare_label_keyword: ROUTINES */ +#line 16443 "preproc.y" + { + (yyval.str) = mm_strdup("routines"); +} +#line 60713 "preproc.c" + break; + + case 3034: /* bare_label_keyword: ROW */ +#line 16447 "preproc.y" + { + (yyval.str) = mm_strdup("row"); +} +#line 60721 "preproc.c" + break; + + case 3035: /* bare_label_keyword: ROWS */ +#line 16451 "preproc.y" + { + (yyval.str) = mm_strdup("rows"); +} +#line 60729 "preproc.c" + break; + + case 3036: /* bare_label_keyword: RULE */ +#line 16455 "preproc.y" + { + (yyval.str) = mm_strdup("rule"); +} +#line 60737 "preproc.c" + break; + + case 3037: /* bare_label_keyword: SAVEPOINT */ +#line 16459 "preproc.y" + { + (yyval.str) = mm_strdup("savepoint"); +} +#line 60745 "preproc.c" + break; + + case 3038: /* bare_label_keyword: SCHEMA */ +#line 16463 "preproc.y" + { + (yyval.str) = mm_strdup("schema"); +} +#line 60753 "preproc.c" + break; + + case 3039: /* bare_label_keyword: SCHEMAS */ +#line 16467 "preproc.y" + { + (yyval.str) = mm_strdup("schemas"); +} +#line 60761 "preproc.c" + break; + + case 3040: /* bare_label_keyword: SCROLL */ +#line 16471 "preproc.y" + { + (yyval.str) = mm_strdup("scroll"); +} +#line 60769 "preproc.c" + break; + + case 3041: /* bare_label_keyword: SEARCH */ +#line 16475 "preproc.y" + { + (yyval.str) = mm_strdup("search"); +} +#line 60777 "preproc.c" + break; + + case 3042: /* bare_label_keyword: SECURITY */ +#line 16479 "preproc.y" + { + (yyval.str) = mm_strdup("security"); +} +#line 60785 "preproc.c" + break; + + case 3043: /* bare_label_keyword: SELECT */ +#line 16483 "preproc.y" + { + (yyval.str) = mm_strdup("select"); +} +#line 60793 "preproc.c" + break; + + case 3044: /* bare_label_keyword: SEQUENCE */ +#line 16487 "preproc.y" + { + (yyval.str) = mm_strdup("sequence"); +} +#line 60801 "preproc.c" + break; + + case 3045: /* bare_label_keyword: SEQUENCES */ +#line 16491 "preproc.y" + { + (yyval.str) = mm_strdup("sequences"); +} +#line 60809 "preproc.c" + break; + + case 3046: /* bare_label_keyword: SERIALIZABLE */ +#line 16495 "preproc.y" + { + (yyval.str) = mm_strdup("serializable"); +} +#line 60817 "preproc.c" + break; + + case 3047: /* bare_label_keyword: SERVER */ +#line 16499 "preproc.y" + { + (yyval.str) = mm_strdup("server"); +} +#line 60825 "preproc.c" + break; + + case 3048: /* bare_label_keyword: SESSION */ +#line 16503 "preproc.y" + { + (yyval.str) = mm_strdup("session"); +} +#line 60833 "preproc.c" + break; + + case 3049: /* bare_label_keyword: SESSION_USER */ +#line 16507 "preproc.y" + { + (yyval.str) = mm_strdup("session_user"); +} +#line 60841 "preproc.c" + break; + + case 3050: /* bare_label_keyword: SET */ +#line 16511 "preproc.y" + { + (yyval.str) = mm_strdup("set"); +} +#line 60849 "preproc.c" + break; + + case 3051: /* bare_label_keyword: SETOF */ +#line 16515 "preproc.y" + { + (yyval.str) = mm_strdup("setof"); +} +#line 60857 "preproc.c" + break; + + case 3052: /* bare_label_keyword: SETS */ +#line 16519 "preproc.y" + { + (yyval.str) = mm_strdup("sets"); +} +#line 60865 "preproc.c" + break; + + case 3053: /* bare_label_keyword: SHARE */ +#line 16523 "preproc.y" + { + (yyval.str) = mm_strdup("share"); +} +#line 60873 "preproc.c" + break; + + case 3054: /* bare_label_keyword: SHOW */ +#line 16527 "preproc.y" + { + (yyval.str) = mm_strdup("show"); +} +#line 60881 "preproc.c" + break; + + case 3055: /* bare_label_keyword: SIMILAR */ +#line 16531 "preproc.y" + { + (yyval.str) = mm_strdup("similar"); +} +#line 60889 "preproc.c" + break; + + case 3056: /* bare_label_keyword: SIMPLE */ +#line 16535 "preproc.y" + { + (yyval.str) = mm_strdup("simple"); +} +#line 60897 "preproc.c" + break; + + case 3057: /* bare_label_keyword: SKIP */ +#line 16539 "preproc.y" + { + (yyval.str) = mm_strdup("skip"); +} +#line 60905 "preproc.c" + break; + + case 3058: /* bare_label_keyword: SMALLINT */ +#line 16543 "preproc.y" + { + (yyval.str) = mm_strdup("smallint"); +} +#line 60913 "preproc.c" + break; + + case 3059: /* bare_label_keyword: SNAPSHOT */ +#line 16547 "preproc.y" + { + (yyval.str) = mm_strdup("snapshot"); +} +#line 60921 "preproc.c" + break; + + case 3060: /* bare_label_keyword: SOME */ +#line 16551 "preproc.y" + { + (yyval.str) = mm_strdup("some"); +} +#line 60929 "preproc.c" + break; + + case 3061: /* bare_label_keyword: SQL_P */ +#line 16555 "preproc.y" + { + (yyval.str) = mm_strdup("sql"); +} +#line 60937 "preproc.c" + break; + + case 3062: /* bare_label_keyword: STABLE */ +#line 16559 "preproc.y" + { + (yyval.str) = mm_strdup("stable"); +} +#line 60945 "preproc.c" + break; + + case 3063: /* bare_label_keyword: STANDALONE_P */ +#line 16563 "preproc.y" + { + (yyval.str) = mm_strdup("standalone"); +} +#line 60953 "preproc.c" + break; + + case 3064: /* bare_label_keyword: START */ +#line 16567 "preproc.y" + { + (yyval.str) = mm_strdup("start"); +} +#line 60961 "preproc.c" + break; + + case 3065: /* bare_label_keyword: STATEMENT */ +#line 16571 "preproc.y" + { + (yyval.str) = mm_strdup("statement"); +} +#line 60969 "preproc.c" + break; + + case 3066: /* bare_label_keyword: STATISTICS */ +#line 16575 "preproc.y" + { + (yyval.str) = mm_strdup("statistics"); +} +#line 60977 "preproc.c" + break; + + case 3067: /* bare_label_keyword: STDIN */ +#line 16579 "preproc.y" + { + (yyval.str) = mm_strdup("stdin"); +} +#line 60985 "preproc.c" + break; + + case 3068: /* bare_label_keyword: STDOUT */ +#line 16583 "preproc.y" + { + (yyval.str) = mm_strdup("stdout"); +} +#line 60993 "preproc.c" + break; + + case 3069: /* bare_label_keyword: STORAGE */ +#line 16587 "preproc.y" + { + (yyval.str) = mm_strdup("storage"); +} +#line 61001 "preproc.c" + break; + + case 3070: /* bare_label_keyword: STORED */ +#line 16591 "preproc.y" + { + (yyval.str) = mm_strdup("stored"); +} +#line 61009 "preproc.c" + break; + + case 3071: /* bare_label_keyword: STRICT_P */ +#line 16595 "preproc.y" + { + (yyval.str) = mm_strdup("strict"); +} +#line 61017 "preproc.c" + break; + + case 3072: /* bare_label_keyword: STRIP_P */ +#line 16599 "preproc.y" + { + (yyval.str) = mm_strdup("strip"); +} +#line 61025 "preproc.c" + break; + + case 3073: /* bare_label_keyword: SUBSCRIPTION */ +#line 16603 "preproc.y" + { + (yyval.str) = mm_strdup("subscription"); +} +#line 61033 "preproc.c" + break; + + case 3074: /* bare_label_keyword: SUBSTRING */ +#line 16607 "preproc.y" + { + (yyval.str) = mm_strdup("substring"); +} +#line 61041 "preproc.c" + break; + + case 3075: /* bare_label_keyword: SUPPORT */ +#line 16611 "preproc.y" + { + (yyval.str) = mm_strdup("support"); +} +#line 61049 "preproc.c" + break; + + case 3076: /* bare_label_keyword: SYMMETRIC */ +#line 16615 "preproc.y" + { + (yyval.str) = mm_strdup("symmetric"); +} +#line 61057 "preproc.c" + break; + + case 3077: /* bare_label_keyword: SYSID */ +#line 16619 "preproc.y" + { + (yyval.str) = mm_strdup("sysid"); +} +#line 61065 "preproc.c" + break; + + case 3078: /* bare_label_keyword: SYSTEM_P */ +#line 16623 "preproc.y" + { + (yyval.str) = mm_strdup("system"); +} +#line 61073 "preproc.c" + break; + + case 3079: /* bare_label_keyword: TABLE */ +#line 16627 "preproc.y" + { + (yyval.str) = mm_strdup("table"); +} +#line 61081 "preproc.c" + break; + + case 3080: /* bare_label_keyword: TABLES */ +#line 16631 "preproc.y" + { + (yyval.str) = mm_strdup("tables"); +} +#line 61089 "preproc.c" + break; + + case 3081: /* bare_label_keyword: TABLESAMPLE */ +#line 16635 "preproc.y" + { + (yyval.str) = mm_strdup("tablesample"); +} +#line 61097 "preproc.c" + break; + + case 3082: /* bare_label_keyword: TABLESPACE */ +#line 16639 "preproc.y" + { + (yyval.str) = mm_strdup("tablespace"); +} +#line 61105 "preproc.c" + break; + + case 3083: /* bare_label_keyword: TEMP */ +#line 16643 "preproc.y" + { + (yyval.str) = mm_strdup("temp"); +} +#line 61113 "preproc.c" + break; + + case 3084: /* bare_label_keyword: TEMPLATE */ +#line 16647 "preproc.y" + { + (yyval.str) = mm_strdup("template"); +} +#line 61121 "preproc.c" + break; + + case 3085: /* bare_label_keyword: TEMPORARY */ +#line 16651 "preproc.y" + { + (yyval.str) = mm_strdup("temporary"); +} +#line 61129 "preproc.c" + break; + + case 3086: /* bare_label_keyword: TEXT_P */ +#line 16655 "preproc.y" + { + (yyval.str) = mm_strdup("text"); +} +#line 61137 "preproc.c" + break; + + case 3087: /* bare_label_keyword: THEN */ +#line 16659 "preproc.y" + { + (yyval.str) = mm_strdup("then"); +} +#line 61145 "preproc.c" + break; + + case 3088: /* bare_label_keyword: TIES */ +#line 16663 "preproc.y" + { + (yyval.str) = mm_strdup("ties"); +} +#line 61153 "preproc.c" + break; + + case 3089: /* bare_label_keyword: TIME */ +#line 16667 "preproc.y" + { + (yyval.str) = mm_strdup("time"); +} +#line 61161 "preproc.c" + break; + + case 3090: /* bare_label_keyword: TIMESTAMP */ +#line 16671 "preproc.y" + { + (yyval.str) = mm_strdup("timestamp"); +} +#line 61169 "preproc.c" + break; + + case 3091: /* bare_label_keyword: TRAILING */ +#line 16675 "preproc.y" + { + (yyval.str) = mm_strdup("trailing"); +} +#line 61177 "preproc.c" + break; + + case 3092: /* bare_label_keyword: TRANSACTION */ +#line 16679 "preproc.y" + { + (yyval.str) = mm_strdup("transaction"); +} +#line 61185 "preproc.c" + break; + + case 3093: /* bare_label_keyword: TRANSFORM */ +#line 16683 "preproc.y" + { + (yyval.str) = mm_strdup("transform"); +} +#line 61193 "preproc.c" + break; + + case 3094: /* bare_label_keyword: TREAT */ +#line 16687 "preproc.y" + { + (yyval.str) = mm_strdup("treat"); +} +#line 61201 "preproc.c" + break; + + case 3095: /* bare_label_keyword: TRIGGER */ +#line 16691 "preproc.y" + { + (yyval.str) = mm_strdup("trigger"); +} +#line 61209 "preproc.c" + break; + + case 3096: /* bare_label_keyword: TRIM */ +#line 16695 "preproc.y" + { + (yyval.str) = mm_strdup("trim"); +} +#line 61217 "preproc.c" + break; + + case 3097: /* bare_label_keyword: TRUE_P */ +#line 16699 "preproc.y" + { + (yyval.str) = mm_strdup("true"); +} +#line 61225 "preproc.c" + break; + + case 3098: /* bare_label_keyword: TRUNCATE */ +#line 16703 "preproc.y" + { + (yyval.str) = mm_strdup("truncate"); +} +#line 61233 "preproc.c" + break; + + case 3099: /* bare_label_keyword: TRUSTED */ +#line 16707 "preproc.y" + { + (yyval.str) = mm_strdup("trusted"); +} +#line 61241 "preproc.c" + break; + + case 3100: /* bare_label_keyword: TYPE_P */ +#line 16711 "preproc.y" + { + (yyval.str) = mm_strdup("type"); +} +#line 61249 "preproc.c" + break; + + case 3101: /* bare_label_keyword: TYPES_P */ +#line 16715 "preproc.y" + { + (yyval.str) = mm_strdup("types"); +} +#line 61257 "preproc.c" + break; + + case 3102: /* bare_label_keyword: UESCAPE */ +#line 16719 "preproc.y" + { + (yyval.str) = mm_strdup("uescape"); +} +#line 61265 "preproc.c" + break; + + case 3103: /* bare_label_keyword: UNBOUNDED */ +#line 16723 "preproc.y" + { + (yyval.str) = mm_strdup("unbounded"); +} +#line 61273 "preproc.c" + break; + + case 3104: /* bare_label_keyword: UNCOMMITTED */ +#line 16727 "preproc.y" + { + (yyval.str) = mm_strdup("uncommitted"); +} +#line 61281 "preproc.c" + break; + + case 3105: /* bare_label_keyword: UNENCRYPTED */ +#line 16731 "preproc.y" + { + (yyval.str) = mm_strdup("unencrypted"); +} +#line 61289 "preproc.c" + break; + + case 3106: /* bare_label_keyword: UNIQUE */ +#line 16735 "preproc.y" + { + (yyval.str) = mm_strdup("unique"); +} +#line 61297 "preproc.c" + break; + + case 3107: /* bare_label_keyword: UNKNOWN */ +#line 16739 "preproc.y" + { + (yyval.str) = mm_strdup("unknown"); +} +#line 61305 "preproc.c" + break; + + case 3108: /* bare_label_keyword: UNLISTEN */ +#line 16743 "preproc.y" + { + (yyval.str) = mm_strdup("unlisten"); +} +#line 61313 "preproc.c" + break; + + case 3109: /* bare_label_keyword: UNLOGGED */ +#line 16747 "preproc.y" + { + (yyval.str) = mm_strdup("unlogged"); +} +#line 61321 "preproc.c" + break; + + case 3110: /* bare_label_keyword: UNTIL */ +#line 16751 "preproc.y" + { + (yyval.str) = mm_strdup("until"); +} +#line 61329 "preproc.c" + break; + + case 3111: /* bare_label_keyword: UPDATE */ +#line 16755 "preproc.y" + { + (yyval.str) = mm_strdup("update"); +} +#line 61337 "preproc.c" + break; + + case 3112: /* bare_label_keyword: USER */ +#line 16759 "preproc.y" + { + (yyval.str) = mm_strdup("user"); +} +#line 61345 "preproc.c" + break; + + case 3113: /* bare_label_keyword: USING */ +#line 16763 "preproc.y" + { + (yyval.str) = mm_strdup("using"); +} +#line 61353 "preproc.c" + break; + + case 3114: /* bare_label_keyword: VACUUM */ +#line 16767 "preproc.y" + { + (yyval.str) = mm_strdup("vacuum"); +} +#line 61361 "preproc.c" + break; + + case 3115: /* bare_label_keyword: VALID */ +#line 16771 "preproc.y" + { + (yyval.str) = mm_strdup("valid"); +} +#line 61369 "preproc.c" + break; + + case 3116: /* bare_label_keyword: VALIDATE */ +#line 16775 "preproc.y" + { + (yyval.str) = mm_strdup("validate"); +} +#line 61377 "preproc.c" + break; + + case 3117: /* bare_label_keyword: VALIDATOR */ +#line 16779 "preproc.y" + { + (yyval.str) = mm_strdup("validator"); +} +#line 61385 "preproc.c" + break; + + case 3118: /* bare_label_keyword: VALUE_P */ +#line 16783 "preproc.y" + { + (yyval.str) = mm_strdup("value"); +} +#line 61393 "preproc.c" + break; + + case 3119: /* bare_label_keyword: VALUES */ +#line 16787 "preproc.y" + { + (yyval.str) = mm_strdup("values"); +} +#line 61401 "preproc.c" + break; + + case 3120: /* bare_label_keyword: VARCHAR */ +#line 16791 "preproc.y" + { + (yyval.str) = mm_strdup("varchar"); +} +#line 61409 "preproc.c" + break; + + case 3121: /* bare_label_keyword: VARIADIC */ +#line 16795 "preproc.y" + { + (yyval.str) = mm_strdup("variadic"); +} +#line 61417 "preproc.c" + break; + + case 3122: /* bare_label_keyword: VERBOSE */ +#line 16799 "preproc.y" + { + (yyval.str) = mm_strdup("verbose"); +} +#line 61425 "preproc.c" + break; + + case 3123: /* bare_label_keyword: VERSION_P */ +#line 16803 "preproc.y" + { + (yyval.str) = mm_strdup("version"); +} +#line 61433 "preproc.c" + break; + + case 3124: /* bare_label_keyword: VIEW */ +#line 16807 "preproc.y" + { + (yyval.str) = mm_strdup("view"); +} +#line 61441 "preproc.c" + break; + + case 3125: /* bare_label_keyword: VIEWS */ +#line 16811 "preproc.y" + { + (yyval.str) = mm_strdup("views"); +} +#line 61449 "preproc.c" + break; + + case 3126: /* bare_label_keyword: VOLATILE */ +#line 16815 "preproc.y" + { + (yyval.str) = mm_strdup("volatile"); +} +#line 61457 "preproc.c" + break; + + case 3127: /* bare_label_keyword: WHEN */ +#line 16819 "preproc.y" + { + (yyval.str) = mm_strdup("when"); +} +#line 61465 "preproc.c" + break; + + case 3128: /* bare_label_keyword: WHITESPACE_P */ +#line 16823 "preproc.y" + { + (yyval.str) = mm_strdup("whitespace"); +} +#line 61473 "preproc.c" + break; + + case 3129: /* bare_label_keyword: WORK */ +#line 16827 "preproc.y" + { + (yyval.str) = mm_strdup("work"); +} +#line 61481 "preproc.c" + break; + + case 3130: /* bare_label_keyword: WRAPPER */ +#line 16831 "preproc.y" + { + (yyval.str) = mm_strdup("wrapper"); +} +#line 61489 "preproc.c" + break; + + case 3131: /* bare_label_keyword: WRITE */ +#line 16835 "preproc.y" + { + (yyval.str) = mm_strdup("write"); +} +#line 61497 "preproc.c" + break; + + case 3132: /* bare_label_keyword: XML_P */ +#line 16839 "preproc.y" + { + (yyval.str) = mm_strdup("xml"); +} +#line 61505 "preproc.c" + break; + + case 3133: /* bare_label_keyword: XMLATTRIBUTES */ +#line 16843 "preproc.y" + { + (yyval.str) = mm_strdup("xmlattributes"); +} +#line 61513 "preproc.c" + break; + + case 3134: /* bare_label_keyword: XMLCONCAT */ +#line 16847 "preproc.y" + { + (yyval.str) = mm_strdup("xmlconcat"); +} +#line 61521 "preproc.c" + break; + + case 3135: /* bare_label_keyword: XMLELEMENT */ +#line 16851 "preproc.y" + { + (yyval.str) = mm_strdup("xmlelement"); +} +#line 61529 "preproc.c" + break; + + case 3136: /* bare_label_keyword: XMLEXISTS */ +#line 16855 "preproc.y" + { + (yyval.str) = mm_strdup("xmlexists"); +} +#line 61537 "preproc.c" + break; + + case 3137: /* bare_label_keyword: XMLFOREST */ +#line 16859 "preproc.y" + { + (yyval.str) = mm_strdup("xmlforest"); +} +#line 61545 "preproc.c" + break; + + case 3138: /* bare_label_keyword: XMLNAMESPACES */ +#line 16863 "preproc.y" + { + (yyval.str) = mm_strdup("xmlnamespaces"); +} +#line 61553 "preproc.c" + break; + + case 3139: /* bare_label_keyword: XMLPARSE */ +#line 16867 "preproc.y" + { + (yyval.str) = mm_strdup("xmlparse"); +} +#line 61561 "preproc.c" + break; + + case 3140: /* bare_label_keyword: XMLPI */ +#line 16871 "preproc.y" + { + (yyval.str) = mm_strdup("xmlpi"); +} +#line 61569 "preproc.c" + break; + + case 3141: /* bare_label_keyword: XMLROOT */ +#line 16875 "preproc.y" + { + (yyval.str) = mm_strdup("xmlroot"); +} +#line 61577 "preproc.c" + break; + + case 3142: /* bare_label_keyword: XMLSERIALIZE */ +#line 16879 "preproc.y" + { + (yyval.str) = mm_strdup("xmlserialize"); +} +#line 61585 "preproc.c" + break; + + case 3143: /* bare_label_keyword: XMLTABLE */ +#line 16883 "preproc.y" + { + (yyval.str) = mm_strdup("xmltable"); +} +#line 61593 "preproc.c" + break; + + case 3144: /* bare_label_keyword: YES_P */ +#line 16887 "preproc.y" + { + (yyval.str) = mm_strdup("yes"); +} +#line 61601 "preproc.c" + break; + + case 3145: /* bare_label_keyword: ZONE */ +#line 16891 "preproc.y" + { + (yyval.str) = mm_strdup("zone"); +} +#line 61609 "preproc.c" + break; + + case 3148: /* statement: ecpgstart at toplevel_stmt ';' */ +#line 16905 "preproc.y" + { + if (connection) + free(connection); + connection = NULL; + } +#line 61619 "preproc.c" + break; + + case 3149: /* statement: ecpgstart toplevel_stmt ';' */ +#line 16911 "preproc.y" + { + if (connection) + free(connection); + connection = NULL; + } +#line 61629 "preproc.c" + break; + + case 3150: /* statement: ecpgstart ECPGVarDeclaration */ +#line 16917 "preproc.y" + { + fprintf(base_yyout, "%s", (yyvsp[0].str)); + free((yyvsp[0].str)); + output_line_number(); + } +#line 61639 "preproc.c" + break; + + case 3152: /* statement: c_thing */ +#line 16923 "preproc.y" + { fprintf(base_yyout, "%s", (yyvsp[0].str)); free((yyvsp[0].str)); } +#line 61645 "preproc.c" + break; + + case 3153: /* statement: CPP_LINE */ +#line 16924 "preproc.y" + { fprintf(base_yyout, "%s", (yyvsp[0].str)); free((yyvsp[0].str)); } +#line 61651 "preproc.c" + break; + + case 3154: /* statement: '{' */ +#line 16925 "preproc.y" + { braces_open++; fputs("{", base_yyout); } +#line 61657 "preproc.c" + break; + + case 3155: /* statement: '}' */ +#line 16927 "preproc.y" + { + remove_typedefs(braces_open); + remove_variables(braces_open--); + if (braces_open == 0) + { + free(current_function); + current_function = NULL; + } + fputs("}", base_yyout); + } +#line 61672 "preproc.c" + break; + + case 3156: /* $@1: %empty */ +#line 16939 "preproc.y" + {FoundInto = 0;} +#line 61678 "preproc.c" + break; + + case 3157: /* CreateAsStmt: CREATE OptTemp TABLE create_as_target AS $@1 SelectStmt opt_with_data */ +#line 16940 "preproc.y" + { + if (FoundInto == 1) + mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE AS cannot specify INTO"); + + (yyval.str) = cat_str(7, mm_strdup("create"), (yyvsp[-6].str), mm_strdup("table"), (yyvsp[-4].str), mm_strdup("as"), (yyvsp[-1].str), (yyvsp[0].str)); + } +#line 61689 "preproc.c" + break; + + case 3158: /* $@2: %empty */ +#line 16946 "preproc.y" + {FoundInto = 0;} +#line 61695 "preproc.c" + break; + + case 3159: /* CreateAsStmt: CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS $@2 SelectStmt opt_with_data */ +#line 16947 "preproc.y" + { + if (FoundInto == 1) + mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE AS cannot specify INTO"); + + (yyval.str) = cat_str(7, mm_strdup("create"), (yyvsp[-9].str), mm_strdup("table if not exists"), (yyvsp[-4].str), mm_strdup("as"), (yyvsp[-1].str), (yyvsp[0].str)); + } +#line 61706 "preproc.c" + break; + + case 3160: /* at: AT connection_object */ +#line 16956 "preproc.y" + { + connection = (yyvsp[0].str); + /* + * Do we have a variable as connection target? Remove the variable + * from the variable list or else it will be used twice. + */ + if (argsinsert != NULL) + argsinsert = NULL; + } +#line 61720 "preproc.c" + break; + + case 3161: /* ECPGConnect: SQL_CONNECT TO connection_target opt_connection_name opt_user */ +#line 16971 "preproc.y" + { (yyval.str) = cat_str(5, (yyvsp[-2].str), mm_strdup(","), (yyvsp[0].str), mm_strdup(","), (yyvsp[-1].str)); } +#line 61726 "preproc.c" + break; + + case 3162: /* ECPGConnect: SQL_CONNECT TO DEFAULT */ +#line 16973 "preproc.y" + { (yyval.str) = mm_strdup("NULL, NULL, NULL, \"DEFAULT\""); } +#line 61732 "preproc.c" + break; + + case 3163: /* ECPGConnect: SQL_CONNECT ora_user */ +#line 16976 "preproc.y" + { (yyval.str) = cat_str(3, mm_strdup("NULL,"), (yyvsp[0].str), mm_strdup(", NULL")); } +#line 61738 "preproc.c" + break; + + case 3164: /* ECPGConnect: DATABASE connection_target */ +#line 16978 "preproc.y" + { (yyval.str) = cat2_str((yyvsp[0].str), mm_strdup(", NULL, NULL, NULL")); } +#line 61744 "preproc.c" + break; + + case 3165: /* connection_target: opt_database_name opt_server opt_port */ +#line 16982 "preproc.y" + { + /* old style: dbname[@server][:port] */ + if (strlen((yyvsp[-1].str)) > 0 && *((yyvsp[-1].str)) != '@') + mmerror(PARSE_ERROR, ET_ERROR, "expected \"@\", found \"%s\"", (yyvsp[-1].str)); + + /* C strings need to be handled differently */ + if ((yyvsp[-2].str)[0] == '\"') + (yyval.str) = (yyvsp[-2].str); + else + (yyval.str) = make3_str(mm_strdup("\""), make3_str((yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)), mm_strdup("\"")); + } +#line 61760 "preproc.c" + break; + + case 3166: /* connection_target: db_prefix ':' server opt_port '/' opt_database_name opt_options */ +#line 16994 "preproc.y" + { + /* new style: :postgresql://server[:port][/dbname] */ + if (strncmp((yyvsp[-6].str), "unix:postgresql", strlen("unix:postgresql")) != 0 && strncmp((yyvsp[-6].str), "tcp:postgresql", strlen("tcp:postgresql")) != 0) + mmerror(PARSE_ERROR, ET_ERROR, "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported"); + + if (strncmp((yyvsp[-4].str), "//", strlen("//")) != 0) + mmerror(PARSE_ERROR, ET_ERROR, "expected \"://\", found \"%s\"", (yyvsp[-4].str)); + + if (strncmp((yyvsp[-6].str), "unix", strlen("unix")) == 0 && + strncmp((yyvsp[-4].str) + strlen("//"), "localhost", strlen("localhost")) != 0 && + strncmp((yyvsp[-4].str) + strlen("//"), "127.0.0.1", strlen("127.0.0.1")) != 0) + mmerror(PARSE_ERROR, ET_ERROR, "Unix-domain sockets only work on \"localhost\" but not on \"%s\"", (yyvsp[-4].str) + strlen("//")); + + (yyval.str) = make3_str(make3_str(mm_strdup("\""), (yyvsp[-6].str), mm_strdup(":")), (yyvsp[-4].str), make3_str(make3_str((yyvsp[-3].str), mm_strdup("/"), (yyvsp[-1].str)), (yyvsp[0].str), mm_strdup("\""))); + } +#line 61780 "preproc.c" + break; + + case 3167: /* connection_target: char_variable */ +#line 17010 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); + } +#line 61788 "preproc.c" + break; + + case 3168: /* connection_target: ecpg_sconst */ +#line 17014 "preproc.y" + { + /* We can only process double quoted strings not single quotes ones, + * so we change the quotes. + * Note, that the rule for ecpg_sconst adds these single quotes. */ + (yyvsp[0].str)[0] = '\"'; + (yyvsp[0].str)[strlen((yyvsp[0].str))-1] = '\"'; + (yyval.str) = (yyvsp[0].str); + } +#line 61801 "preproc.c" + break; + + case 3169: /* opt_database_name: name */ +#line 17024 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 61807 "preproc.c" + break; + + case 3170: /* opt_database_name: %empty */ +#line 17025 "preproc.y" + { (yyval.str) = EMPTY; } +#line 61813 "preproc.c" + break; + + case 3171: /* db_prefix: ecpg_ident cvariable */ +#line 17029 "preproc.y" + { + if (strcmp((yyvsp[0].str), "postgresql") != 0 && strcmp((yyvsp[0].str), "postgres") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "expected \"postgresql\", found \"%s\"", (yyvsp[0].str)); + + if (strcmp((yyvsp[-1].str), "tcp") != 0 && strcmp((yyvsp[-1].str), "unix") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "invalid connection type: %s", (yyvsp[-1].str)); + + (yyval.str) = make3_str((yyvsp[-1].str), mm_strdup(":"), (yyvsp[0].str)); + } +#line 61827 "preproc.c" + break; + + case 3172: /* server: Op server_name */ +#line 17041 "preproc.y" + { + if (strcmp((yyvsp[-1].str), "@") != 0 && strcmp((yyvsp[-1].str), "//") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "expected \"@\" or \"://\", found \"%s\"", (yyvsp[-1].str)); + + (yyval.str) = make2_str((yyvsp[-1].str), (yyvsp[0].str)); + } +#line 61838 "preproc.c" + break; + + case 3173: /* opt_server: server */ +#line 17049 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 61844 "preproc.c" + break; + + case 3174: /* opt_server: %empty */ +#line 17050 "preproc.y" + { (yyval.str) = EMPTY; } +#line 61850 "preproc.c" + break; + + case 3175: /* server_name: ColId */ +#line 17053 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 61856 "preproc.c" + break; + + case 3176: /* server_name: ColId '.' server_name */ +#line 17054 "preproc.y" + { (yyval.str) = make3_str((yyvsp[-2].str), mm_strdup("."), (yyvsp[0].str)); } +#line 61862 "preproc.c" + break; + + case 3177: /* server_name: IP */ +#line 17055 "preproc.y" + { (yyval.str) = make_name(); } +#line 61868 "preproc.c" + break; + + case 3178: /* opt_port: ':' Iconst */ +#line 17058 "preproc.y" + { (yyval.str) = make2_str(mm_strdup(":"), (yyvsp[0].str)); } +#line 61874 "preproc.c" + break; + + case 3179: /* opt_port: %empty */ +#line 17059 "preproc.y" + { (yyval.str) = EMPTY; } +#line 61880 "preproc.c" + break; + + case 3180: /* opt_connection_name: AS connection_object */ +#line 17062 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 61886 "preproc.c" + break; + + case 3181: /* opt_connection_name: %empty */ +#line 17063 "preproc.y" + { (yyval.str) = mm_strdup("NULL"); } +#line 61892 "preproc.c" + break; + + case 3182: /* opt_user: USER ora_user */ +#line 17066 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 61898 "preproc.c" + break; + + case 3183: /* opt_user: %empty */ +#line 17067 "preproc.y" + { (yyval.str) = mm_strdup("NULL, NULL"); } +#line 61904 "preproc.c" + break; + + case 3184: /* ora_user: user_name */ +#line 17071 "preproc.y" + { (yyval.str) = cat2_str((yyvsp[0].str), mm_strdup(", NULL")); } +#line 61910 "preproc.c" + break; + + case 3185: /* ora_user: user_name '/' user_name */ +#line 17073 "preproc.y" + { (yyval.str) = cat_str(3, (yyvsp[-2].str), mm_strdup(","), (yyvsp[0].str)); } +#line 61916 "preproc.c" + break; + + case 3186: /* ora_user: user_name SQL_IDENTIFIED BY user_name */ +#line 17075 "preproc.y" + { (yyval.str) = cat_str(3, (yyvsp[-3].str), mm_strdup(","), (yyvsp[0].str)); } +#line 61922 "preproc.c" + break; + + case 3187: /* ora_user: user_name USING user_name */ +#line 17077 "preproc.y" + { (yyval.str) = cat_str(3, (yyvsp[-2].str), mm_strdup(","), (yyvsp[0].str)); } +#line 61928 "preproc.c" + break; + + case 3188: /* user_name: RoleId */ +#line 17081 "preproc.y" + { + if ((yyvsp[0].str)[0] == '\"') + (yyval.str) = (yyvsp[0].str); + else + (yyval.str) = make3_str(mm_strdup("\""), (yyvsp[0].str), mm_strdup("\"")); + } +#line 61939 "preproc.c" + break; + + case 3189: /* user_name: ecpg_sconst */ +#line 17088 "preproc.y" + { + if ((yyvsp[0].str)[0] == '\"') + (yyval.str) = (yyvsp[0].str); + else + (yyval.str) = make3_str(mm_strdup("\""), (yyvsp[0].str), mm_strdup("\"")); + } +#line 61950 "preproc.c" + break; + + case 3190: /* user_name: civar */ +#line 17095 "preproc.y" + { + enum ECPGttype type = argsinsert->variable->type->type; + + /* if array see what's inside */ + if (type == ECPGt_array) + type = argsinsert->variable->type->u.element->type; + + /* handle varchars */ + if (type == ECPGt_varchar) + (yyval.str) = make2_str(mm_strdup(argsinsert->variable->name), mm_strdup(".arr")); + else + (yyval.str) = mm_strdup(argsinsert->variable->name); + } +#line 61968 "preproc.c" + break; + + case 3191: /* char_variable: cvariable */ +#line 17111 "preproc.y" + { + /* check if we have a string variable */ + struct variable *p = find_variable((yyvsp[0].str)); + enum ECPGttype type = p->type->type; + + /* If we have just one character this is not a string */ + if (atol(p->type->size) == 1) + mmerror(PARSE_ERROR, ET_ERROR, "invalid data type"); + else + { + /* if array see what's inside */ + if (type == ECPGt_array) + type = p->type->u.element->type; + + switch (type) + { + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + (yyval.str) = (yyvsp[0].str); + break; + case ECPGt_varchar: + (yyval.str) = make2_str((yyvsp[0].str), mm_strdup(".arr")); + break; + default: + mmerror(PARSE_ERROR, ET_ERROR, "invalid data type"); + (yyval.str) = (yyvsp[0].str); + break; + } + } + } +#line 62004 "preproc.c" + break; + + case 3192: /* opt_options: Op connect_options */ +#line 17145 "preproc.y" + { + if (strlen((yyvsp[-1].str)) == 0) + mmerror(PARSE_ERROR, ET_ERROR, "incomplete statement"); + + if (strcmp((yyvsp[-1].str), "?") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "unrecognized token \"%s\"", (yyvsp[-1].str)); + + (yyval.str) = make2_str(mm_strdup("?"), (yyvsp[0].str)); + } +#line 62018 "preproc.c" + break; + + case 3193: /* opt_options: %empty */ +#line 17154 "preproc.y" + { (yyval.str) = EMPTY; } +#line 62024 "preproc.c" + break; + + case 3194: /* connect_options: ColId opt_opt_value */ +#line 17158 "preproc.y" + { + (yyval.str) = make2_str((yyvsp[-1].str), (yyvsp[0].str)); + } +#line 62032 "preproc.c" + break; + + case 3195: /* connect_options: ColId opt_opt_value Op connect_options */ +#line 17162 "preproc.y" + { + if (strlen((yyvsp[-1].str)) == 0) + mmerror(PARSE_ERROR, ET_ERROR, "incomplete statement"); + + if (strcmp((yyvsp[-1].str), "&") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "unrecognized token \"%s\"", (yyvsp[-1].str)); + + (yyval.str) = cat_str(3, make2_str((yyvsp[-3].str), (yyvsp[-2].str)), (yyvsp[-1].str), (yyvsp[0].str)); + } +#line 62046 "preproc.c" + break; + + case 3196: /* opt_opt_value: %empty */ +#line 17174 "preproc.y" + { (yyval.str) = EMPTY; } +#line 62052 "preproc.c" + break; + + case 3197: /* opt_opt_value: '=' Iconst */ +#line 17176 "preproc.y" + { (yyval.str) = make2_str(mm_strdup("="), (yyvsp[0].str)); } +#line 62058 "preproc.c" + break; + + case 3198: /* opt_opt_value: '=' ecpg_ident */ +#line 17178 "preproc.y" + { (yyval.str) = make2_str(mm_strdup("="), (yyvsp[0].str)); } +#line 62064 "preproc.c" + break; + + case 3199: /* opt_opt_value: '=' civar */ +#line 17180 "preproc.y" + { (yyval.str) = make2_str(mm_strdup("="), (yyvsp[0].str)); } +#line 62070 "preproc.c" + break; + + case 3200: /* prepared_name: name */ +#line 17184 "preproc.y" + { + if ((yyvsp[0].str)[0] == '\"' && (yyvsp[0].str)[strlen((yyvsp[0].str))-1] == '\"') /* already quoted? */ + (yyval.str) = (yyvsp[0].str); + else /* not quoted => convert to lowercase */ + { + size_t i; + + for (i = 0; i< strlen((yyvsp[0].str)); i++) + (yyvsp[0].str)[i] = tolower((unsigned char) (yyvsp[0].str)[i]); + + (yyval.str) = make3_str(mm_strdup("\""), (yyvsp[0].str), mm_strdup("\"")); + } + } +#line 62088 "preproc.c" + break; + + case 3201: /* prepared_name: char_variable */ +#line 17197 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62094 "preproc.c" + break; + + case 3202: /* ECPGDeclareStmt: DECLARE prepared_name STATEMENT */ +#line 17204 "preproc.y" + { + struct declared_list *ptr = NULL; + /* Check whether the declared name has been defined or not */ + for (ptr = g_declared_list; ptr != NULL; ptr = ptr->next) + { + if (strcmp((yyvsp[-1].str), ptr->name) == 0) + { + /* re-definition is not allowed */ + mmerror(PARSE_ERROR, ET_ERROR, "name \"%s\" is already declared", ptr->name); + } + } + + /* Add a new declared name into the g_declared_list */ + ptr = NULL; + ptr = (struct declared_list *)mm_alloc(sizeof(struct declared_list)); + if (ptr) + { + /* initial definition */ + ptr -> name = (yyvsp[-1].str); + if (connection) + ptr -> connection = mm_strdup(connection); + else + ptr -> connection = NULL; + + ptr -> next = g_declared_list; + g_declared_list = ptr; + } + + (yyval.str) = cat_str(3 , mm_strdup("/* declare "), mm_strdup((yyvsp[-1].str)), mm_strdup(" as an SQL identifier */")); + } +#line 62129 "preproc.c" + break; + + case 3203: /* ECPGCursorStmt: DECLARE cursor_name cursor_options CURSOR opt_hold FOR prepared_name */ +#line 17241 "preproc.y" + { + struct cursor *ptr, *this; + char *cursor_marker = (yyvsp[-5].str)[0] == ':' ? mm_strdup("$0") : mm_strdup((yyvsp[-5].str)); + int (* strcmp_fn)(const char *, const char *) = (((yyvsp[-5].str)[0] == ':' || (yyvsp[-5].str)[0] == '"') ? strcmp : pg_strcasecmp); + struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable)); + char *comment; + char *con; + + if (INFORMIX_MODE && pg_strcasecmp((yyvsp[-5].str), "database") == 0) + mmfatal(PARSE_ERROR, "\"database\" cannot be used as cursor name in INFORMIX mode"); + + check_declared_list((yyvsp[0].str)); + con = connection ? connection : "NULL"; + for (ptr = cur; ptr != NULL; ptr = ptr->next) + { + if (strcmp_fn((yyvsp[-5].str), ptr->name) == 0) + { + /* re-definition is a bug */ + if ((yyvsp[-5].str)[0] == ':') + mmerror(PARSE_ERROR, ET_ERROR, "using variable \"%s\" in different declare statements is not supported", (yyvsp[-5].str)+1); + else + mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" is already defined", (yyvsp[-5].str)); + } + } + + this = (struct cursor *) mm_alloc(sizeof(struct cursor)); + + /* initial definition */ + this->next = cur; + this->name = (yyvsp[-5].str); + this->function = (current_function ? mm_strdup(current_function) : NULL); + this->connection = connection ? mm_strdup(connection) : NULL; + this->command = cat_str(6, mm_strdup("declare"), cursor_marker, (yyvsp[-4].str), mm_strdup("cursor"), (yyvsp[-2].str), mm_strdup("for $1")); + this->argsresult = NULL; + this->argsresult_oos = NULL; + + thisquery->type = &ecpg_query; + thisquery->brace_level = 0; + thisquery->next = NULL; + thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement(, , __LINE__)") + strlen(con) + strlen((yyvsp[0].str))); + sprintf(thisquery->name, "ECPGprepared_statement(%s, %s, __LINE__)", con, (yyvsp[0].str)); + + this->argsinsert = NULL; + this->argsinsert_oos = NULL; + if ((yyvsp[-5].str)[0] == ':') + { + struct variable *var = find_variable((yyvsp[-5].str) + 1); + remove_variable_from_list(&argsinsert, var); + add_variable_to_head(&(this->argsinsert), var, &no_indicator); + } + add_variable_to_head(&(this->argsinsert), thisquery, &no_indicator); + + cur = this; + + comment = cat_str(3, mm_strdup("/*"), mm_strdup(this->command), mm_strdup("*/")); + + (yyval.str) = cat_str(2, adjust_outofscope_cursor_vars(this), + comment); + } +#line 62193 "preproc.c" + break; + + case 3204: /* ECPGExecuteImmediateStmt: EXECUTE IMMEDIATE execstring */ +#line 17303 "preproc.y" + { + /* execute immediate means prepare the statement and + * immediately execute it */ + (yyval.str) = (yyvsp[0].str); + } +#line 62203 "preproc.c" + break; + + case 3206: /* single_vt_declaration: type_declaration */ +#line 17313 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62209 "preproc.c" + break; + + case 3207: /* single_vt_declaration: var_declaration */ +#line 17314 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62215 "preproc.c" + break; + + case 3208: /* precision: NumericOnly */ +#line 17317 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62221 "preproc.c" + break; + + case 3209: /* opt_scale: ',' NumericOnly */ +#line 17319 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62227 "preproc.c" + break; + + case 3210: /* opt_scale: %empty */ +#line 17320 "preproc.y" + { (yyval.str) = EMPTY; } +#line 62233 "preproc.c" + break; + + case 3211: /* ecpg_interval: opt_interval */ +#line 17323 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62239 "preproc.c" + break; + + case 3212: /* ecpg_interval: YEAR_P TO MINUTE_P */ +#line 17324 "preproc.y" + { (yyval.str) = mm_strdup("year to minute"); } +#line 62245 "preproc.c" + break; + + case 3213: /* ecpg_interval: YEAR_P TO SECOND_P */ +#line 17325 "preproc.y" + { (yyval.str) = mm_strdup("year to second"); } +#line 62251 "preproc.c" + break; + + case 3214: /* ecpg_interval: DAY_P TO DAY_P */ +#line 17326 "preproc.y" + { (yyval.str) = mm_strdup("day to day"); } +#line 62257 "preproc.c" + break; + + case 3215: /* ecpg_interval: MONTH_P TO MONTH_P */ +#line 17327 "preproc.y" + { (yyval.str) = mm_strdup("month to month"); } +#line 62263 "preproc.c" + break; + + case 3216: /* $@3: %empty */ +#line 17334 "preproc.y" + { fputs("/* exec sql begin declare section */", base_yyout); } +#line 62269 "preproc.c" + break; + + case 3217: /* ECPGDeclaration: sql_startdeclare $@3 var_type_declarations sql_enddeclare */ +#line 17336 "preproc.y" + { + fprintf(base_yyout, "%s/* exec sql end declare section */", (yyvsp[-1].str)); + free((yyvsp[-1].str)); + output_line_number(); + } +#line 62279 "preproc.c" + break; + + case 3218: /* sql_startdeclare: ecpgstart BEGIN_P DECLARE SQL_SECTION ';' */ +#line 17343 "preproc.y" + {} +#line 62285 "preproc.c" + break; + + case 3219: /* sql_enddeclare: ecpgstart END_P DECLARE SQL_SECTION ';' */ +#line 17345 "preproc.y" + {} +#line 62291 "preproc.c" + break; + + case 3220: /* var_type_declarations: %empty */ +#line 17347 "preproc.y" + { (yyval.str) = EMPTY; } +#line 62297 "preproc.c" + break; + + case 3221: /* var_type_declarations: vt_declarations */ +#line 17348 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62303 "preproc.c" + break; + + case 3222: /* vt_declarations: single_vt_declaration */ +#line 17351 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62309 "preproc.c" + break; + + case 3223: /* vt_declarations: CPP_LINE */ +#line 17352 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62315 "preproc.c" + break; + + case 3224: /* vt_declarations: vt_declarations single_vt_declaration */ +#line 17353 "preproc.y" + { (yyval.str) = cat2_str((yyvsp[-1].str), (yyvsp[0].str)); } +#line 62321 "preproc.c" + break; + + case 3225: /* vt_declarations: vt_declarations CPP_LINE */ +#line 17354 "preproc.y" + { (yyval.str) = cat2_str((yyvsp[-1].str), (yyvsp[0].str)); } +#line 62327 "preproc.c" + break; + + case 3226: /* variable_declarations: var_declaration */ +#line 17357 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62333 "preproc.c" + break; + + case 3227: /* variable_declarations: variable_declarations var_declaration */ +#line 17358 "preproc.y" + { (yyval.str) = cat2_str((yyvsp[-1].str), (yyvsp[0].str)); } +#line 62339 "preproc.c" + break; + + case 3228: /* $@4: %empty */ +#line 17362 "preproc.y" + { + /* reset this variable so we see if there was */ + /* an initializer specified */ + initializer = 0; + } +#line 62349 "preproc.c" + break; + + case 3229: /* type_declaration: S_TYPEDEF $@4 var_type opt_pointer ECPGColLabelCommon opt_array_bounds ';' */ +#line 17368 "preproc.y" + { + add_typedef((yyvsp[-2].str), (yyvsp[-1].index).index1, (yyvsp[-1].index).index2, (yyvsp[-4].type).type_enum, (yyvsp[-4].type).type_dimension, (yyvsp[-4].type).type_index, initializer, *(yyvsp[-3].str) ? 1 : 0); + + fprintf(base_yyout, "typedef %s %s %s %s;\n", (yyvsp[-4].type).type_str, *(yyvsp[-3].str) ? "*" : "", (yyvsp[-2].str), (yyvsp[-1].index).str); + output_line_number(); + (yyval.str) = mm_strdup(""); + } +#line 62361 "preproc.c" + break; + + case 3230: /* $@5: %empty */ +#line 17378 "preproc.y" + { + actual_type[struct_level].type_enum = (yyvsp[0].type).type_enum; + actual_type[struct_level].type_str = (yyvsp[0].type).type_str; + actual_type[struct_level].type_dimension = (yyvsp[0].type).type_dimension; + actual_type[struct_level].type_index = (yyvsp[0].type).type_index; + actual_type[struct_level].type_sizeof = (yyvsp[0].type).type_sizeof; + + actual_startline[struct_level] = hashline_number(); + } +#line 62375 "preproc.c" + break; + + case 3231: /* var_declaration: storage_declaration var_type $@5 variable_list ';' */ +#line 17388 "preproc.y" + { + (yyval.str) = cat_str(5, actual_startline[struct_level], (yyvsp[-4].str), (yyvsp[-3].type).type_str, (yyvsp[-1].str), mm_strdup(";\n")); + } +#line 62383 "preproc.c" + break; + + case 3232: /* $@6: %empty */ +#line 17392 "preproc.y" + { + actual_type[struct_level].type_enum = (yyvsp[0].type).type_enum; + actual_type[struct_level].type_str = (yyvsp[0].type).type_str; + actual_type[struct_level].type_dimension = (yyvsp[0].type).type_dimension; + actual_type[struct_level].type_index = (yyvsp[0].type).type_index; + actual_type[struct_level].type_sizeof = (yyvsp[0].type).type_sizeof; + + actual_startline[struct_level] = hashline_number(); + } +#line 62397 "preproc.c" + break; + + case 3233: /* var_declaration: var_type $@6 variable_list ';' */ +#line 17402 "preproc.y" + { + (yyval.str) = cat_str(4, actual_startline[struct_level], (yyvsp[-3].type).type_str, (yyvsp[-1].str), mm_strdup(";\n")); + } +#line 62405 "preproc.c" + break; + + case 3234: /* var_declaration: struct_union_type_with_symbol ';' */ +#line 17406 "preproc.y" + { + (yyval.str) = cat2_str((yyvsp[-1].str), mm_strdup(";")); + } +#line 62413 "preproc.c" + break; + + case 3235: /* opt_bit_field: ':' Iconst */ +#line 17411 "preproc.y" + { (yyval.str) =cat2_str(mm_strdup(":"), (yyvsp[0].str)); } +#line 62419 "preproc.c" + break; + + case 3236: /* opt_bit_field: %empty */ +#line 17412 "preproc.y" + { (yyval.str) = EMPTY; } +#line 62425 "preproc.c" + break; + + case 3237: /* storage_declaration: storage_clause storage_modifier */ +#line 17416 "preproc.y" + {(yyval.str) = cat2_str ((yyvsp[-1].str), (yyvsp[0].str)); } +#line 62431 "preproc.c" + break; + + case 3238: /* storage_declaration: storage_clause */ +#line 17417 "preproc.y" + {(yyval.str) = (yyvsp[0].str); } +#line 62437 "preproc.c" + break; + + case 3239: /* storage_declaration: storage_modifier */ +#line 17418 "preproc.y" + {(yyval.str) = (yyvsp[0].str); } +#line 62443 "preproc.c" + break; + + case 3240: /* storage_clause: S_EXTERN */ +#line 17421 "preproc.y" + { (yyval.str) = mm_strdup("extern"); } +#line 62449 "preproc.c" + break; + + case 3241: /* storage_clause: S_STATIC */ +#line 17422 "preproc.y" + { (yyval.str) = mm_strdup("static"); } +#line 62455 "preproc.c" + break; + + case 3242: /* storage_clause: S_REGISTER */ +#line 17423 "preproc.y" + { (yyval.str) = mm_strdup("register"); } +#line 62461 "preproc.c" + break; + + case 3243: /* storage_clause: S_AUTO */ +#line 17424 "preproc.y" + { (yyval.str) = mm_strdup("auto"); } +#line 62467 "preproc.c" + break; + + case 3244: /* storage_modifier: S_CONST */ +#line 17427 "preproc.y" + { (yyval.str) = mm_strdup("const"); } +#line 62473 "preproc.c" + break; + + case 3245: /* storage_modifier: S_VOLATILE */ +#line 17428 "preproc.y" + { (yyval.str) = mm_strdup("volatile"); } +#line 62479 "preproc.c" + break; + + case 3246: /* var_type: simple_type */ +#line 17432 "preproc.y" + { + (yyval.type).type_enum = (yyvsp[0].type_enum); + (yyval.type).type_str = mm_strdup(ecpg_type_name((yyvsp[0].type_enum))); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } +#line 62491 "preproc.c" + break; + + case 3247: /* var_type: struct_union_type */ +#line 17440 "preproc.y" + { + (yyval.type).type_str = (yyvsp[0].str); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + + if (strncmp((yyvsp[0].str), "struct", sizeof("struct")-1) == 0) + { + (yyval.type).type_enum = ECPGt_struct; + (yyval.type).type_sizeof = ECPGstruct_sizeof; + } + else + { + (yyval.type).type_enum = ECPGt_union; + (yyval.type).type_sizeof = NULL; + } + } +#line 62512 "preproc.c" + break; + + case 3248: /* var_type: enum_type */ +#line 17457 "preproc.y" + { + (yyval.type).type_str = (yyvsp[0].str); + (yyval.type).type_enum = ECPGt_int; + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } +#line 62524 "preproc.c" + break; + + case 3249: /* var_type: ECPGColLabelCommon '(' precision opt_scale ')' */ +#line 17465 "preproc.y" + { + if (strcmp((yyvsp[-4].str), "numeric") == 0) + { + (yyval.type).type_enum = ECPGt_numeric; + (yyval.type).type_str = mm_strdup("numeric"); + } + else if (strcmp((yyvsp[-4].str), "decimal") == 0) + { + (yyval.type).type_enum = ECPGt_decimal; + (yyval.type).type_str = mm_strdup("decimal"); + } + else + { + mmerror(PARSE_ERROR, ET_ERROR, "only data types numeric and decimal have precision/scale argument"); + (yyval.type).type_enum = ECPGt_numeric; + (yyval.type).type_str = mm_strdup("numeric"); + } + + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } +#line 62551 "preproc.c" + break; + + case 3250: /* var_type: ECPGColLabelCommon ecpg_interval */ +#line 17488 "preproc.y" + { + if (strlen((yyvsp[0].str)) != 0 && strcmp ((yyvsp[-1].str), "datetime") != 0 && strcmp ((yyvsp[-1].str), "interval") != 0) + mmerror (PARSE_ERROR, ET_ERROR, "interval specification not allowed here"); + + /* + * Check for type names that the SQL grammar treats as + * unreserved keywords + */ + if (strcmp((yyvsp[-1].str), "varchar") == 0) + { + (yyval.type).type_enum = ECPGt_varchar; + (yyval.type).type_str = EMPTY; /*mm_strdup("varchar");*/ + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else if (strcmp((yyvsp[-1].str), "bytea") == 0) + { + (yyval.type).type_enum = ECPGt_bytea; + (yyval.type).type_str = EMPTY; + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else if (strcmp((yyvsp[-1].str), "float") == 0) + { + (yyval.type).type_enum = ECPGt_float; + (yyval.type).type_str = mm_strdup("float"); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else if (strcmp((yyvsp[-1].str), "double") == 0) + { + (yyval.type).type_enum = ECPGt_double; + (yyval.type).type_str = mm_strdup("double"); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else if (strcmp((yyvsp[-1].str), "numeric") == 0) + { + (yyval.type).type_enum = ECPGt_numeric; + (yyval.type).type_str = mm_strdup("numeric"); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else if (strcmp((yyvsp[-1].str), "decimal") == 0) + { + (yyval.type).type_enum = ECPGt_decimal; + (yyval.type).type_str = mm_strdup("decimal"); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else if (strcmp((yyvsp[-1].str), "date") == 0) + { + (yyval.type).type_enum = ECPGt_date; + (yyval.type).type_str = mm_strdup("date"); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else if (strcmp((yyvsp[-1].str), "timestamp") == 0) + { + (yyval.type).type_enum = ECPGt_timestamp; + (yyval.type).type_str = mm_strdup("timestamp"); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else if (strcmp((yyvsp[-1].str), "interval") == 0) + { + (yyval.type).type_enum = ECPGt_interval; + (yyval.type).type_str = mm_strdup("interval"); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else if (strcmp((yyvsp[-1].str), "datetime") == 0) + { + (yyval.type).type_enum = ECPGt_timestamp; + (yyval.type).type_str = mm_strdup("timestamp"); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else if ((strcmp((yyvsp[-1].str), "string") == 0) && INFORMIX_MODE) + { + (yyval.type).type_enum = ECPGt_string; + (yyval.type).type_str = mm_strdup("char"); + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = NULL; + } + else + { + /* this is for typedef'ed types */ + struct typedefs *this = get_typedef((yyvsp[-1].str)); + + (yyval.type).type_str = (this->type->type_enum == ECPGt_varchar || this->type->type_enum == ECPGt_bytea) ? EMPTY : mm_strdup(this->name); + (yyval.type).type_enum = this->type->type_enum; + (yyval.type).type_dimension = this->type->type_dimension; + (yyval.type).type_index = this->type->type_index; + if (this->type->type_sizeof && strlen(this->type->type_sizeof) != 0) + (yyval.type).type_sizeof = this->type->type_sizeof; + else + (yyval.type).type_sizeof = cat_str(3, mm_strdup("sizeof("), mm_strdup(this->name), mm_strdup(")")); + + struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list); + } + } +#line 62669 "preproc.c" + break; + + case 3251: /* var_type: s_struct_union_symbol */ +#line 17602 "preproc.y" + { + /* this is for named structs/unions */ + char *name; + struct typedefs *this; + bool forward = (forward_name != NULL && strcmp((yyvsp[0].struct_union).symbol, forward_name) == 0 && strcmp((yyvsp[0].struct_union).su, "struct") == 0); + + name = cat2_str((yyvsp[0].struct_union).su, (yyvsp[0].struct_union).symbol); + /* Do we have a forward definition? */ + if (!forward) + { + /* No */ + + this = get_typedef(name); + (yyval.type).type_str = mm_strdup(this->name); + (yyval.type).type_enum = this->type->type_enum; + (yyval.type).type_dimension = this->type->type_dimension; + (yyval.type).type_index = this->type->type_index; + (yyval.type).type_sizeof = this->type->type_sizeof; + struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list); + free(name); + } + else + { + (yyval.type).type_str = name; + (yyval.type).type_enum = ECPGt_long; + (yyval.type).type_dimension = mm_strdup("-1"); + (yyval.type).type_index = mm_strdup("-1"); + (yyval.type).type_sizeof = mm_strdup(""); + struct_member_list[struct_level] = NULL; + } + } +#line 62705 "preproc.c" + break; + + case 3252: /* enum_type: ENUM_P symbol enum_definition */ +#line 17636 "preproc.y" + { (yyval.str) = cat_str(3, mm_strdup("enum"), (yyvsp[-1].str), (yyvsp[0].str)); } +#line 62711 "preproc.c" + break; + + case 3253: /* enum_type: ENUM_P enum_definition */ +#line 17638 "preproc.y" + { (yyval.str) = cat2_str(mm_strdup("enum"), (yyvsp[0].str)); } +#line 62717 "preproc.c" + break; + + case 3254: /* enum_type: ENUM_P symbol */ +#line 17640 "preproc.y" + { (yyval.str) = cat2_str(mm_strdup("enum"), (yyvsp[0].str)); } +#line 62723 "preproc.c" + break; + + case 3255: /* enum_definition: '{' c_list '}' */ +#line 17644 "preproc.y" + { (yyval.str) = cat_str(3, mm_strdup("{"), (yyvsp[-1].str), mm_strdup("}")); } +#line 62729 "preproc.c" + break; + + case 3256: /* $@7: %empty */ +#line 17647 "preproc.y" + { + struct_member_list[struct_level++] = NULL; + if (struct_level >= STRUCT_DEPTH) + mmerror(PARSE_ERROR, ET_ERROR, "too many levels in nested structure/union definition"); + forward_name = mm_strdup((yyvsp[0].struct_union).symbol); + } +#line 62740 "preproc.c" + break; + + case 3257: /* struct_union_type_with_symbol: s_struct_union_symbol $@7 '{' variable_declarations '}' */ +#line 17654 "preproc.y" + { + struct typedefs *ptr, *this; + struct this_type su_type; + + ECPGfree_struct_member(struct_member_list[struct_level]); + struct_member_list[struct_level] = NULL; + struct_level--; + if (strncmp((yyvsp[-4].struct_union).su, "struct", sizeof("struct")-1) == 0) + su_type.type_enum = ECPGt_struct; + else + su_type.type_enum = ECPGt_union; + su_type.type_str = cat2_str((yyvsp[-4].struct_union).su, (yyvsp[-4].struct_union).symbol); + free(forward_name); + forward_name = NULL; + + /* This is essentially a typedef but needs the keyword struct/union as well. + * So we create the typedef for each struct definition with symbol */ + for (ptr = types; ptr != NULL; ptr = ptr->next) + { + if (strcmp(su_type.type_str, ptr->name) == 0) + /* re-definition is a bug */ + mmerror(PARSE_ERROR, ET_ERROR, "type \"%s\" is already defined", su_type.type_str); + } + + this = (struct typedefs *) mm_alloc(sizeof(struct typedefs)); + + /* initial definition */ + this->next = types; + this->name = mm_strdup(su_type.type_str); + this->brace_level = braces_open; + this->type = (struct this_type *) mm_alloc(sizeof(struct this_type)); + this->type->type_enum = su_type.type_enum; + this->type->type_str = mm_strdup(su_type.type_str); + this->type->type_dimension = mm_strdup("-1"); /* dimension of array */ + this->type->type_index = mm_strdup("-1"); /* length of string */ + this->type->type_sizeof = ECPGstruct_sizeof; + this->struct_member_list = struct_member_list[struct_level]; + + types = this; + (yyval.str) = cat_str(4, su_type.type_str, mm_strdup("{"), (yyvsp[-1].str), mm_strdup("}")); + } +#line 62786 "preproc.c" + break; + + case 3258: /* struct_union_type: struct_union_type_with_symbol */ +#line 17697 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62792 "preproc.c" + break; + + case 3259: /* $@8: %empty */ +#line 17699 "preproc.y" + { + struct_member_list[struct_level++] = NULL; + if (struct_level >= STRUCT_DEPTH) + mmerror(PARSE_ERROR, ET_ERROR, "too many levels in nested structure/union definition"); + } +#line 62802 "preproc.c" + break; + + case 3260: /* struct_union_type: s_struct_union $@8 '{' variable_declarations '}' */ +#line 17705 "preproc.y" + { + ECPGfree_struct_member(struct_member_list[struct_level]); + struct_member_list[struct_level] = NULL; + struct_level--; + (yyval.str) = cat_str(4, (yyvsp[-4].str), mm_strdup("{"), (yyvsp[-1].str), mm_strdup("}")); + } +#line 62813 "preproc.c" + break; + + case 3261: /* s_struct_union_symbol: SQL_STRUCT symbol */ +#line 17714 "preproc.y" + { + (yyval.struct_union).su = mm_strdup("struct"); + (yyval.struct_union).symbol = (yyvsp[0].str); + ECPGstruct_sizeof = cat_str(3, mm_strdup("sizeof("), cat2_str(mm_strdup((yyval.struct_union).su), mm_strdup((yyval.struct_union).symbol)), mm_strdup(")")); + } +#line 62823 "preproc.c" + break; + + case 3262: /* s_struct_union_symbol: UNION symbol */ +#line 17720 "preproc.y" + { + (yyval.struct_union).su = mm_strdup("union"); + (yyval.struct_union).symbol = (yyvsp[0].str); + } +#line 62832 "preproc.c" + break; + + case 3263: /* s_struct_union: SQL_STRUCT */ +#line 17727 "preproc.y" + { + ECPGstruct_sizeof = mm_strdup(""); /* This must not be NULL to distinguish from simple types. */ + (yyval.str) = mm_strdup("struct"); + } +#line 62841 "preproc.c" + break; + + case 3264: /* s_struct_union: UNION */ +#line 17732 "preproc.y" + { + (yyval.str) = mm_strdup("union"); + } +#line 62849 "preproc.c" + break; + + case 3265: /* simple_type: unsigned_type */ +#line 17737 "preproc.y" + { (yyval.type_enum)=(yyvsp[0].type_enum); } +#line 62855 "preproc.c" + break; + + case 3266: /* simple_type: opt_signed signed_type */ +#line 17738 "preproc.y" + { (yyval.type_enum)=(yyvsp[0].type_enum); } +#line 62861 "preproc.c" + break; + + case 3267: /* unsigned_type: SQL_UNSIGNED SQL_SHORT */ +#line 17741 "preproc.y" + { (yyval.type_enum) = ECPGt_unsigned_short; } +#line 62867 "preproc.c" + break; + + case 3268: /* unsigned_type: SQL_UNSIGNED SQL_SHORT INT_P */ +#line 17742 "preproc.y" + { (yyval.type_enum) = ECPGt_unsigned_short; } +#line 62873 "preproc.c" + break; + + case 3269: /* unsigned_type: SQL_UNSIGNED */ +#line 17743 "preproc.y" + { (yyval.type_enum) = ECPGt_unsigned_int; } +#line 62879 "preproc.c" + break; + + case 3270: /* unsigned_type: SQL_UNSIGNED INT_P */ +#line 17744 "preproc.y" + { (yyval.type_enum) = ECPGt_unsigned_int; } +#line 62885 "preproc.c" + break; + + case 3271: /* unsigned_type: SQL_UNSIGNED SQL_LONG */ +#line 17745 "preproc.y" + { (yyval.type_enum) = ECPGt_unsigned_long; } +#line 62891 "preproc.c" + break; + + case 3272: /* unsigned_type: SQL_UNSIGNED SQL_LONG INT_P */ +#line 17746 "preproc.y" + { (yyval.type_enum) = ECPGt_unsigned_long; } +#line 62897 "preproc.c" + break; + + case 3273: /* unsigned_type: SQL_UNSIGNED SQL_LONG SQL_LONG */ +#line 17747 "preproc.y" + { (yyval.type_enum) = ECPGt_unsigned_long_long; } +#line 62903 "preproc.c" + break; + + case 3274: /* unsigned_type: SQL_UNSIGNED SQL_LONG SQL_LONG INT_P */ +#line 17748 "preproc.y" + { (yyval.type_enum) = ECPGt_unsigned_long_long; } +#line 62909 "preproc.c" + break; + + case 3275: /* unsigned_type: SQL_UNSIGNED CHAR_P */ +#line 17749 "preproc.y" + { (yyval.type_enum) = ECPGt_unsigned_char; } +#line 62915 "preproc.c" + break; + + case 3276: /* signed_type: SQL_SHORT */ +#line 17752 "preproc.y" + { (yyval.type_enum) = ECPGt_short; } +#line 62921 "preproc.c" + break; + + case 3277: /* signed_type: SQL_SHORT INT_P */ +#line 17753 "preproc.y" + { (yyval.type_enum) = ECPGt_short; } +#line 62927 "preproc.c" + break; + + case 3278: /* signed_type: INT_P */ +#line 17754 "preproc.y" + { (yyval.type_enum) = ECPGt_int; } +#line 62933 "preproc.c" + break; + + case 3279: /* signed_type: SQL_LONG */ +#line 17755 "preproc.y" + { (yyval.type_enum) = ECPGt_long; } +#line 62939 "preproc.c" + break; + + case 3280: /* signed_type: SQL_LONG INT_P */ +#line 17756 "preproc.y" + { (yyval.type_enum) = ECPGt_long; } +#line 62945 "preproc.c" + break; + + case 3281: /* signed_type: SQL_LONG SQL_LONG */ +#line 17757 "preproc.y" + { (yyval.type_enum) = ECPGt_long_long; } +#line 62951 "preproc.c" + break; + + case 3282: /* signed_type: SQL_LONG SQL_LONG INT_P */ +#line 17758 "preproc.y" + { (yyval.type_enum) = ECPGt_long_long; } +#line 62957 "preproc.c" + break; + + case 3283: /* signed_type: SQL_BOOL */ +#line 17759 "preproc.y" + { (yyval.type_enum) = ECPGt_bool; } +#line 62963 "preproc.c" + break; + + case 3284: /* signed_type: CHAR_P */ +#line 17760 "preproc.y" + { (yyval.type_enum) = ECPGt_char; } +#line 62969 "preproc.c" + break; + + case 3285: /* signed_type: DOUBLE_P */ +#line 17761 "preproc.y" + { (yyval.type_enum) = ECPGt_double; } +#line 62975 "preproc.c" + break; + + case 3288: /* variable_list: variable */ +#line 17769 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 62981 "preproc.c" + break; + + case 3289: /* variable_list: variable_list ',' variable */ +#line 17771 "preproc.y" + { + if (actual_type[struct_level].type_enum == ECPGt_varchar || actual_type[struct_level].type_enum == ECPGt_bytea) + (yyval.str) = cat_str(3, (yyvsp[-2].str), mm_strdup(";"), (yyvsp[0].str)); + else + (yyval.str) = cat_str(3, (yyvsp[-2].str), mm_strdup(","), (yyvsp[0].str)); + } +#line 62992 "preproc.c" + break; + + case 3290: /* variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initializer */ +#line 17780 "preproc.y" + { + struct ECPGtype * type; + char *dimension = (yyvsp[-2].index).index1; /* dimension of array */ + char *length = (yyvsp[-2].index).index2; /* length of string */ + char *dim_str; + char *vcn; + int *varlen_type_counter; + char *struct_name; + + adjust_array(actual_type[struct_level].type_enum, &dimension, &length, actual_type[struct_level].type_dimension, actual_type[struct_level].type_index, strlen((yyvsp[-4].str)), false); + switch (actual_type[struct_level].type_enum) + { + case ECPGt_struct: + case ECPGt_union: + if (atoi(dimension) < 0) + type = ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, actual_type[struct_level].type_str, actual_type[struct_level].type_sizeof); + else + type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, actual_type[struct_level].type_str, actual_type[struct_level].type_sizeof), dimension); + + (yyval.str) = cat_str(5, (yyvsp[-4].str), mm_strdup((yyvsp[-3].str)), (yyvsp[-2].index).str, (yyvsp[-1].str), (yyvsp[0].str)); + break; + + case ECPGt_varchar: + case ECPGt_bytea: + if (actual_type[struct_level].type_enum == ECPGt_varchar) + { + varlen_type_counter = &varchar_counter; + struct_name = " struct varchar_"; + } + else + { + varlen_type_counter = &bytea_counter; + struct_name = " struct bytea_"; + } + if (atoi(dimension) < 0) + type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length, *varlen_type_counter); + else + type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, *varlen_type_counter), dimension); + + if (strcmp(dimension, "0") == 0 || abs(atoi(dimension)) == 1) + dim_str=mm_strdup(""); + else + dim_str=cat_str(3, mm_strdup("["), mm_strdup(dimension), mm_strdup("]")); + /* cannot check for atoi <= 0 because a defined constant will yield 0 here as well */ + if (atoi(length) < 0 || strcmp(length, "0") == 0) + mmerror(PARSE_ERROR, ET_ERROR, "pointers to varchar are not implemented"); + + /* make sure varchar struct name is unique by adding a unique counter to its definition */ + vcn = (char *) mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + sprintf(vcn, "%d", *varlen_type_counter); + if (strcmp(dimension, "0") == 0) + (yyval.str) = cat_str(7, make2_str(mm_strdup(struct_name), vcn), mm_strdup(" { int len; char arr["), mm_strdup(length), mm_strdup("]; } *"), mm_strdup((yyvsp[-3].str)), (yyvsp[-1].str), (yyvsp[0].str)); + else + (yyval.str) = cat_str(8, make2_str(mm_strdup(struct_name), vcn), mm_strdup(" { int len; char arr["), mm_strdup(length), mm_strdup("]; } "), mm_strdup((yyvsp[-3].str)), dim_str, (yyvsp[-1].str), (yyvsp[0].str)); + (*varlen_type_counter)++; + break; + + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + if (atoi(dimension) == -1) + { + int i = strlen((yyvsp[0].str)); + + if (atoi(length) == -1 && i > 0) /* char [] = "string" */ + { + /* if we have an initializer but no string size set, let's use the initializer's length */ + free(length); + length = mm_alloc(i+sizeof("sizeof()")); + sprintf(length, "sizeof(%s)", (yyvsp[0].str)+2); + } + type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length, 0); + } + else + type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, 0), dimension); + + (yyval.str) = cat_str(5, (yyvsp[-4].str), mm_strdup((yyvsp[-3].str)), (yyvsp[-2].index).str, (yyvsp[-1].str), (yyvsp[0].str)); + break; + + default: + if (atoi(dimension) < 0) + type = ECPGmake_simple_type(actual_type[struct_level].type_enum, mm_strdup("1"), 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, mm_strdup("1"), 0), dimension); + + (yyval.str) = cat_str(5, (yyvsp[-4].str), mm_strdup((yyvsp[-3].str)), (yyvsp[-2].index).str, (yyvsp[-1].str), (yyvsp[0].str)); + break; + } + + if (struct_level == 0) + new_variable((yyvsp[-3].str), type, braces_open); + else + ECPGmake_struct_member((yyvsp[-3].str), type, &(struct_member_list[struct_level - 1])); + + free((yyvsp[-3].str)); + } +#line 63093 "preproc.c" + break; + + case 3291: /* opt_initializer: %empty */ +#line 17879 "preproc.y" + { (yyval.str) = EMPTY; } +#line 63099 "preproc.c" + break; + + case 3292: /* opt_initializer: '=' c_term */ +#line 17881 "preproc.y" + { + initializer = 1; + (yyval.str) = cat2_str(mm_strdup("="), (yyvsp[0].str)); + } +#line 63108 "preproc.c" + break; + + case 3293: /* opt_pointer: %empty */ +#line 17887 "preproc.y" + { (yyval.str) = EMPTY; } +#line 63114 "preproc.c" + break; + + case 3294: /* opt_pointer: '*' */ +#line 17888 "preproc.y" + { (yyval.str) = mm_strdup("*"); } +#line 63120 "preproc.c" + break; + + case 3295: /* opt_pointer: '*' '*' */ +#line 17889 "preproc.y" + { (yyval.str) = mm_strdup("**"); } +#line 63126 "preproc.c" + break; + + case 3296: /* ECPGDeclare: DECLARE STATEMENT ecpg_ident */ +#line 17896 "preproc.y" + { + /* this is only supported for compatibility */ + (yyval.str) = cat_str(3, mm_strdup("/* declare statement"), (yyvsp[0].str), mm_strdup("*/")); + } +#line 63135 "preproc.c" + break; + + case 3297: /* ECPGDisconnect: SQL_DISCONNECT dis_name */ +#line 17904 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63141 "preproc.c" + break; + + case 3298: /* dis_name: connection_object */ +#line 17907 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63147 "preproc.c" + break; + + case 3299: /* dis_name: CURRENT_P */ +#line 17908 "preproc.y" + { (yyval.str) = mm_strdup("\"CURRENT\""); } +#line 63153 "preproc.c" + break; + + case 3300: /* dis_name: ALL */ +#line 17909 "preproc.y" + { (yyval.str) = mm_strdup("\"ALL\""); } +#line 63159 "preproc.c" + break; + + case 3301: /* dis_name: %empty */ +#line 17910 "preproc.y" + { (yyval.str) = mm_strdup("\"CURRENT\""); } +#line 63165 "preproc.c" + break; + + case 3302: /* connection_object: name */ +#line 17913 "preproc.y" + { (yyval.str) = make3_str(mm_strdup("\""), (yyvsp[0].str), mm_strdup("\"")); } +#line 63171 "preproc.c" + break; + + case 3303: /* connection_object: DEFAULT */ +#line 17914 "preproc.y" + { (yyval.str) = mm_strdup("\"DEFAULT\""); } +#line 63177 "preproc.c" + break; + + case 3304: /* connection_object: char_variable */ +#line 17915 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63183 "preproc.c" + break; + + case 3305: /* execstring: char_variable */ +#line 17919 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63189 "preproc.c" + break; + + case 3306: /* execstring: CSTRING */ +#line 17921 "preproc.y" + { (yyval.str) = make3_str(mm_strdup("\""), (yyvsp[0].str), mm_strdup("\"")); } +#line 63195 "preproc.c" + break; + + case 3307: /* ECPGFree: SQL_FREE cursor_name */ +#line 17928 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63201 "preproc.c" + break; + + case 3308: /* ECPGFree: SQL_FREE ALL */ +#line 17929 "preproc.y" + { (yyval.str) = mm_strdup("all"); } +#line 63207 "preproc.c" + break; + + case 3309: /* ECPGOpen: SQL_OPEN cursor_name opt_ecpg_using */ +#line 17936 "preproc.y" + { + if ((yyvsp[-1].str)[0] == ':') + remove_variable_from_list(&argsinsert, find_variable((yyvsp[-1].str) + 1)); + (yyval.str) = (yyvsp[-1].str); + } +#line 63217 "preproc.c" + break; + + case 3310: /* opt_ecpg_using: %empty */ +#line 17943 "preproc.y" + { (yyval.str) = EMPTY; } +#line 63223 "preproc.c" + break; + + case 3311: /* opt_ecpg_using: ecpg_using */ +#line 17944 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63229 "preproc.c" + break; + + case 3312: /* ecpg_using: USING using_list */ +#line 17947 "preproc.y" + { (yyval.str) = EMPTY; } +#line 63235 "preproc.c" + break; + + case 3313: /* ecpg_using: using_descriptor */ +#line 17948 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63241 "preproc.c" + break; + + case 3314: /* using_descriptor: USING SQL_P SQL_DESCRIPTOR quoted_ident_stringvar */ +#line 17952 "preproc.y" + { + add_variable_to_head(&argsinsert, descriptor_variable((yyvsp[0].str),0), &no_indicator); + (yyval.str) = EMPTY; + } +#line 63250 "preproc.c" + break; + + case 3315: /* using_descriptor: USING SQL_DESCRIPTOR name */ +#line 17957 "preproc.y" + { + add_variable_to_head(&argsinsert, sqlda_variable((yyvsp[0].str)), &no_indicator); + (yyval.str) = EMPTY; + } +#line 63259 "preproc.c" + break; + + case 3316: /* into_descriptor: INTO SQL_P SQL_DESCRIPTOR quoted_ident_stringvar */ +#line 17964 "preproc.y" + { + add_variable_to_head(&argsresult, descriptor_variable((yyvsp[0].str),1), &no_indicator); + (yyval.str) = EMPTY; + } +#line 63268 "preproc.c" + break; + + case 3317: /* into_descriptor: INTO SQL_DESCRIPTOR name */ +#line 17969 "preproc.y" + { + add_variable_to_head(&argsresult, sqlda_variable((yyvsp[0].str)), &no_indicator); + (yyval.str) = EMPTY; + } +#line 63277 "preproc.c" + break; + + case 3318: /* into_sqlda: INTO name */ +#line 17976 "preproc.y" + { + add_variable_to_head(&argsresult, sqlda_variable((yyvsp[0].str)), &no_indicator); + (yyval.str) = EMPTY; + } +#line 63286 "preproc.c" + break; + + case 3321: /* UsingValue: UsingConst */ +#line 17985 "preproc.y" + { + char *length = mm_alloc(32); + + sprintf(length, "%zu", strlen((yyvsp[0].str))); + add_variable_to_head(&argsinsert, new_variable((yyvsp[0].str), ECPGmake_simple_type(ECPGt_const, length, 0), 0), &no_indicator); + } +#line 63297 "preproc.c" + break; + + case 3322: /* UsingValue: civar */ +#line 17991 "preproc.y" + { (yyval.str) = EMPTY; } +#line 63303 "preproc.c" + break; + + case 3323: /* UsingValue: civarind */ +#line 17992 "preproc.y" + { (yyval.str) = EMPTY; } +#line 63309 "preproc.c" + break; + + case 3324: /* UsingConst: Iconst */ +#line 17995 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63315 "preproc.c" + break; + + case 3325: /* UsingConst: '+' Iconst */ +#line 17996 "preproc.y" + { (yyval.str) = cat_str(2, mm_strdup("+"), (yyvsp[0].str)); } +#line 63321 "preproc.c" + break; + + case 3326: /* UsingConst: '-' Iconst */ +#line 17997 "preproc.y" + { (yyval.str) = cat_str(2, mm_strdup("-"), (yyvsp[0].str)); } +#line 63327 "preproc.c" + break; + + case 3327: /* UsingConst: ecpg_fconst */ +#line 17998 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63333 "preproc.c" + break; + + case 3328: /* UsingConst: '+' ecpg_fconst */ +#line 17999 "preproc.y" + { (yyval.str) = cat_str(2, mm_strdup("+"), (yyvsp[0].str)); } +#line 63339 "preproc.c" + break; + + case 3329: /* UsingConst: '-' ecpg_fconst */ +#line 18000 "preproc.y" + { (yyval.str) = cat_str(2, mm_strdup("-"), (yyvsp[0].str)); } +#line 63345 "preproc.c" + break; + + case 3330: /* UsingConst: ecpg_sconst */ +#line 18001 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63351 "preproc.c" + break; + + case 3331: /* UsingConst: ecpg_bconst */ +#line 18002 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63357 "preproc.c" + break; + + case 3332: /* UsingConst: ecpg_xconst */ +#line 18003 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63363 "preproc.c" + break; + + case 3333: /* ECPGDescribe: SQL_DESCRIBE INPUT_P prepared_name using_descriptor */ +#line 18010 "preproc.y" + { + (yyval.describe).input = 1; + (yyval.describe).stmt_name = (yyvsp[-1].str); + } +#line 63372 "preproc.c" + break; + + case 3334: /* ECPGDescribe: SQL_DESCRIBE opt_output prepared_name using_descriptor */ +#line 18015 "preproc.y" + { + struct variable *var; + var = argsinsert->variable; + remove_variable_from_list(&argsinsert, var); + add_variable_to_head(&argsresult, var, &no_indicator); + + (yyval.describe).input = 0; + (yyval.describe).stmt_name = (yyvsp[-1].str); + } +#line 63386 "preproc.c" + break; + + case 3335: /* ECPGDescribe: SQL_DESCRIBE opt_output prepared_name into_descriptor */ +#line 18025 "preproc.y" + { + (yyval.describe).input = 0; + (yyval.describe).stmt_name = (yyvsp[-1].str); + } +#line 63395 "preproc.c" + break; + + case 3336: /* ECPGDescribe: SQL_DESCRIBE INPUT_P prepared_name into_sqlda */ +#line 18030 "preproc.y" + { + (yyval.describe).input = 1; + (yyval.describe).stmt_name = (yyvsp[-1].str); + } +#line 63404 "preproc.c" + break; + + case 3337: /* ECPGDescribe: SQL_DESCRIBE opt_output prepared_name into_sqlda */ +#line 18035 "preproc.y" + { + (yyval.describe).input = 0; + (yyval.describe).stmt_name = (yyvsp[-1].str); + } +#line 63413 "preproc.c" + break; + + case 3338: /* opt_output: SQL_OUTPUT */ +#line 18041 "preproc.y" + { (yyval.str) = mm_strdup("output"); } +#line 63419 "preproc.c" + break; + + case 3339: /* opt_output: %empty */ +#line 18042 "preproc.y" + { (yyval.str) = EMPTY; } +#line 63425 "preproc.c" + break; + + case 3340: /* ECPGAllocateDescr: SQL_ALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar */ +#line 18055 "preproc.y" + { + add_descriptor((yyvsp[0].str),connection); + (yyval.str) = (yyvsp[0].str); + } +#line 63434 "preproc.c" + break; + + case 3341: /* ECPGDeallocateDescr: DEALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar */ +#line 18066 "preproc.y" + { + drop_descriptor((yyvsp[0].str),connection); + (yyval.str) = (yyvsp[0].str); + } +#line 63443 "preproc.c" + break; + + case 3342: /* ECPGGetDescriptorHeader: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar ECPGGetDescHeaderItems */ +#line 18077 "preproc.y" + { (yyval.str) = (yyvsp[-1].str); } +#line 63449 "preproc.c" + break; + + case 3345: /* ECPGGetDescHeaderItem: cvariable '=' desc_header_item */ +#line 18085 "preproc.y" + { push_assignment((yyvsp[-2].str), (yyvsp[0].dtype_enum)); } +#line 63455 "preproc.c" + break; + + case 3346: /* ECPGSetDescriptorHeader: SET SQL_DESCRIPTOR quoted_ident_stringvar ECPGSetDescHeaderItems */ +#line 18090 "preproc.y" + { (yyval.str) = (yyvsp[-1].str); } +#line 63461 "preproc.c" + break; + + case 3349: /* ECPGSetDescHeaderItem: desc_header_item '=' IntConstVar */ +#line 18098 "preproc.y" + { + push_assignment((yyvsp[0].str), (yyvsp[-2].dtype_enum)); + } +#line 63469 "preproc.c" + break; + + case 3350: /* IntConstVar: Iconst */ +#line 18104 "preproc.y" + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + + sprintf(length, "%zu", strlen((yyvsp[0].str))); + new_variable((yyvsp[0].str), ECPGmake_simple_type(ECPGt_const, length, 0), 0); + (yyval.str) = (yyvsp[0].str); + } +#line 63481 "preproc.c" + break; + + case 3351: /* IntConstVar: cvariable */ +#line 18112 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); + } +#line 63489 "preproc.c" + break; + + case 3352: /* desc_header_item: SQL_COUNT */ +#line 18117 "preproc.y" + { (yyval.dtype_enum) = ECPGd_count; } +#line 63495 "preproc.c" + break; + + case 3353: /* ECPGGetDescriptor: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar VALUE_P IntConstVar ECPGGetDescItems */ +#line 18125 "preproc.y" + { (yyval.descriptor).str = (yyvsp[-1].str); (yyval.descriptor).name = (yyvsp[-3].str); } +#line 63501 "preproc.c" + break; + + case 3356: /* ECPGGetDescItem: cvariable '=' descriptor_item */ +#line 18132 "preproc.y" + { push_assignment((yyvsp[-2].str), (yyvsp[0].dtype_enum)); } +#line 63507 "preproc.c" + break; + + case 3357: /* ECPGSetDescriptor: SET SQL_DESCRIPTOR quoted_ident_stringvar VALUE_P IntConstVar ECPGSetDescItems */ +#line 18136 "preproc.y" + { (yyval.descriptor).str = (yyvsp[-1].str); (yyval.descriptor).name = (yyvsp[-3].str); } +#line 63513 "preproc.c" + break; + + case 3360: /* ECPGSetDescItem: descriptor_item '=' AllConstVar */ +#line 18144 "preproc.y" + { + push_assignment((yyvsp[0].str), (yyvsp[-2].dtype_enum)); + } +#line 63521 "preproc.c" + break; + + case 3361: /* AllConstVar: ecpg_fconst */ +#line 18150 "preproc.y" + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + + sprintf(length, "%zu", strlen((yyvsp[0].str))); + new_variable((yyvsp[0].str), ECPGmake_simple_type(ECPGt_const, length, 0), 0); + (yyval.str) = (yyvsp[0].str); + } +#line 63533 "preproc.c" + break; + + case 3362: /* AllConstVar: IntConstVar */ +#line 18159 "preproc.y" + { + (yyval.str) = (yyvsp[0].str); + } +#line 63541 "preproc.c" + break; + + case 3363: /* AllConstVar: '-' ecpg_fconst */ +#line 18164 "preproc.y" + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *var = cat2_str(mm_strdup("-"), (yyvsp[0].str)); + + sprintf(length, "%zu", strlen(var)); + new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + (yyval.str) = var; + } +#line 63554 "preproc.c" + break; + + case 3364: /* AllConstVar: '-' Iconst */ +#line 18174 "preproc.y" + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *var = cat2_str(mm_strdup("-"), (yyvsp[0].str)); + + sprintf(length, "%zu", strlen(var)); + new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + (yyval.str) = var; + } +#line 63567 "preproc.c" + break; + + case 3365: /* AllConstVar: ecpg_sconst */ +#line 18184 "preproc.y" + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *var = (yyvsp[0].str) + 1; + + var[strlen(var) - 1] = '\0'; + sprintf(length, "%zu", strlen(var)); + new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + (yyval.str) = var; + } +#line 63581 "preproc.c" + break; + + case 3366: /* descriptor_item: SQL_CARDINALITY */ +#line 18195 "preproc.y" + { (yyval.dtype_enum) = ECPGd_cardinality; } +#line 63587 "preproc.c" + break; + + case 3367: /* descriptor_item: DATA_P */ +#line 18196 "preproc.y" + { (yyval.dtype_enum) = ECPGd_data; } +#line 63593 "preproc.c" + break; + + case 3368: /* descriptor_item: SQL_DATETIME_INTERVAL_CODE */ +#line 18197 "preproc.y" + { (yyval.dtype_enum) = ECPGd_di_code; } +#line 63599 "preproc.c" + break; + + case 3369: /* descriptor_item: SQL_DATETIME_INTERVAL_PRECISION */ +#line 18198 "preproc.y" + { (yyval.dtype_enum) = ECPGd_di_precision; } +#line 63605 "preproc.c" + break; + + case 3370: /* descriptor_item: SQL_INDICATOR */ +#line 18199 "preproc.y" + { (yyval.dtype_enum) = ECPGd_indicator; } +#line 63611 "preproc.c" + break; + + case 3371: /* descriptor_item: SQL_KEY_MEMBER */ +#line 18200 "preproc.y" + { (yyval.dtype_enum) = ECPGd_key_member; } +#line 63617 "preproc.c" + break; + + case 3372: /* descriptor_item: SQL_LENGTH */ +#line 18201 "preproc.y" + { (yyval.dtype_enum) = ECPGd_length; } +#line 63623 "preproc.c" + break; + + case 3373: /* descriptor_item: NAME_P */ +#line 18202 "preproc.y" + { (yyval.dtype_enum) = ECPGd_name; } +#line 63629 "preproc.c" + break; + + case 3374: /* descriptor_item: SQL_NULLABLE */ +#line 18203 "preproc.y" + { (yyval.dtype_enum) = ECPGd_nullable; } +#line 63635 "preproc.c" + break; + + case 3375: /* descriptor_item: SQL_OCTET_LENGTH */ +#line 18204 "preproc.y" + { (yyval.dtype_enum) = ECPGd_octet; } +#line 63641 "preproc.c" + break; + + case 3376: /* descriptor_item: PRECISION */ +#line 18205 "preproc.y" + { (yyval.dtype_enum) = ECPGd_precision; } +#line 63647 "preproc.c" + break; + + case 3377: /* descriptor_item: SQL_RETURNED_LENGTH */ +#line 18206 "preproc.y" + { (yyval.dtype_enum) = ECPGd_length; } +#line 63653 "preproc.c" + break; + + case 3378: /* descriptor_item: SQL_RETURNED_OCTET_LENGTH */ +#line 18207 "preproc.y" + { (yyval.dtype_enum) = ECPGd_ret_octet; } +#line 63659 "preproc.c" + break; + + case 3379: /* descriptor_item: SQL_SCALE */ +#line 18208 "preproc.y" + { (yyval.dtype_enum) = ECPGd_scale; } +#line 63665 "preproc.c" + break; + + case 3380: /* descriptor_item: TYPE_P */ +#line 18209 "preproc.y" + { (yyval.dtype_enum) = ECPGd_type; } +#line 63671 "preproc.c" + break; + + case 3381: /* ECPGSetAutocommit: SET SQL_AUTOCOMMIT '=' on_off */ +#line 18216 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63677 "preproc.c" + break; + + case 3382: /* ECPGSetAutocommit: SET SQL_AUTOCOMMIT TO on_off */ +#line 18217 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63683 "preproc.c" + break; + + case 3383: /* on_off: ON */ +#line 18220 "preproc.y" + { (yyval.str) = mm_strdup("on"); } +#line 63689 "preproc.c" + break; + + case 3384: /* on_off: OFF */ +#line 18221 "preproc.y" + { (yyval.str) = mm_strdup("off"); } +#line 63695 "preproc.c" + break; + + case 3385: /* ECPGSetConnection: SET CONNECTION TO connection_object */ +#line 18228 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63701 "preproc.c" + break; + + case 3386: /* ECPGSetConnection: SET CONNECTION '=' connection_object */ +#line 18229 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63707 "preproc.c" + break; + + case 3387: /* ECPGSetConnection: SET CONNECTION connection_object */ +#line 18230 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63713 "preproc.c" + break; + + case 3388: /* $@9: %empty */ +#line 18237 "preproc.y" + { + /* reset this variable so we see if there was */ + /* an initializer specified */ + initializer = 0; + } +#line 63723 "preproc.c" + break; + + case 3389: /* ECPGTypedef: TYPE_P $@9 ECPGColLabelCommon IS var_type opt_array_bounds opt_reference */ +#line 18243 "preproc.y" + { + add_typedef((yyvsp[-4].str), (yyvsp[-1].index).index1, (yyvsp[-1].index).index2, (yyvsp[-2].type).type_enum, (yyvsp[-2].type).type_dimension, (yyvsp[-2].type).type_index, initializer, *(yyvsp[0].str) ? 1 : 0); + + if (auto_create_c == false) + (yyval.str) = cat_str(7, mm_strdup("/* exec sql type"), mm_strdup((yyvsp[-4].str)), mm_strdup("is"), mm_strdup((yyvsp[-2].type).type_str), mm_strdup((yyvsp[-1].index).str), (yyvsp[0].str), mm_strdup("*/")); + else + (yyval.str) = cat_str(6, mm_strdup("typedef "), mm_strdup((yyvsp[-2].type).type_str), *(yyvsp[0].str)?mm_strdup("*"):mm_strdup(""), mm_strdup((yyvsp[-4].str)), mm_strdup((yyvsp[-1].index).str), mm_strdup(";")); + } +#line 63736 "preproc.c" + break; + + case 3390: /* opt_reference: SQL_REFERENCE */ +#line 18253 "preproc.y" + { (yyval.str) = mm_strdup("reference"); } +#line 63742 "preproc.c" + break; + + case 3391: /* opt_reference: %empty */ +#line 18254 "preproc.y" + { (yyval.str) = EMPTY; } +#line 63748 "preproc.c" + break; + + case 3392: /* $@10: %empty */ +#line 18261 "preproc.y" + { + /* reset this variable so we see if there was */ + /* an initializer specified */ + initializer = 0; + } +#line 63758 "preproc.c" + break; + + case 3393: /* ECPGVar: SQL_VAR $@10 ColLabel IS var_type opt_array_bounds opt_reference */ +#line 18267 "preproc.y" + { + struct variable *p = find_variable((yyvsp[-4].str)); + char *dimension = (yyvsp[-1].index).index1; + char *length = (yyvsp[-1].index).index2; + struct ECPGtype * type; + + if (((yyvsp[-2].type).type_enum == ECPGt_struct || + (yyvsp[-2].type).type_enum == ECPGt_union) && + initializer == 1) + mmerror(PARSE_ERROR, ET_ERROR, "initializer not allowed in EXEC SQL VAR command"); + else + { + adjust_array((yyvsp[-2].type).type_enum, &dimension, &length, (yyvsp[-2].type).type_dimension, (yyvsp[-2].type).type_index, *(yyvsp[0].str)?1:0, false); + + switch ((yyvsp[-2].type).type_enum) + { + case ECPGt_struct: + case ECPGt_union: + if (atoi(dimension) < 0) + type = ECPGmake_struct_type(struct_member_list[struct_level], (yyvsp[-2].type).type_enum, (yyvsp[-2].type).type_str, (yyvsp[-2].type).type_sizeof); + else + type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], (yyvsp[-2].type).type_enum, (yyvsp[-2].type).type_str, (yyvsp[-2].type).type_sizeof), dimension); + break; + + case ECPGt_varchar: + case ECPGt_bytea: + if (atoi(dimension) == -1) + type = ECPGmake_simple_type((yyvsp[-2].type).type_enum, length, 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type((yyvsp[-2].type).type_enum, length, 0), dimension); + break; + + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + if (atoi(dimension) == -1) + type = ECPGmake_simple_type((yyvsp[-2].type).type_enum, length, 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type((yyvsp[-2].type).type_enum, length, 0), dimension); + break; + + default: + if (atoi(length) >= 0) + mmerror(PARSE_ERROR, ET_ERROR, "multidimensional arrays for simple data types are not supported"); + + if (atoi(dimension) < 0) + type = ECPGmake_simple_type((yyvsp[-2].type).type_enum, mm_strdup("1"), 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type((yyvsp[-2].type).type_enum, mm_strdup("1"), 0), dimension); + break; + } + + ECPGfree_type(p->type); + p->type = type; + } + + (yyval.str) = cat_str(7, mm_strdup("/* exec sql var"), mm_strdup((yyvsp[-4].str)), mm_strdup("is"), mm_strdup((yyvsp[-2].type).type_str), mm_strdup((yyvsp[-1].index).str), (yyvsp[0].str), mm_strdup("*/")); + } +#line 63821 "preproc.c" + break; + + case 3394: /* ECPGWhenever: SQL_WHENEVER SQL_SQLERROR action */ +#line 18332 "preproc.y" + { + when_error.code = (yyvsp[0].action).code; + when_error.command = (yyvsp[0].action).command; + (yyval.str) = cat_str(3, mm_strdup("/* exec sql whenever sqlerror "), (yyvsp[0].action).str, mm_strdup("; */")); + } +#line 63831 "preproc.c" + break; + + case 3395: /* ECPGWhenever: SQL_WHENEVER NOT SQL_FOUND action */ +#line 18338 "preproc.y" + { + when_nf.code = (yyvsp[0].action).code; + when_nf.command = (yyvsp[0].action).command; + (yyval.str) = cat_str(3, mm_strdup("/* exec sql whenever not found "), (yyvsp[0].action).str, mm_strdup("; */")); + } +#line 63841 "preproc.c" + break; + + case 3396: /* ECPGWhenever: SQL_WHENEVER SQL_SQLWARNING action */ +#line 18344 "preproc.y" + { + when_warn.code = (yyvsp[0].action).code; + when_warn.command = (yyvsp[0].action).command; + (yyval.str) = cat_str(3, mm_strdup("/* exec sql whenever sql_warning "), (yyvsp[0].action).str, mm_strdup("; */")); + } +#line 63851 "preproc.c" + break; + + case 3397: /* action: CONTINUE_P */ +#line 18352 "preproc.y" + { + (yyval.action).code = W_NOTHING; + (yyval.action).command = NULL; + (yyval.action).str = mm_strdup("continue"); + } +#line 63861 "preproc.c" + break; + + case 3398: /* action: SQL_SQLPRINT */ +#line 18358 "preproc.y" + { + (yyval.action).code = W_SQLPRINT; + (yyval.action).command = NULL; + (yyval.action).str = mm_strdup("sqlprint"); + } +#line 63871 "preproc.c" + break; + + case 3399: /* action: SQL_STOP */ +#line 18364 "preproc.y" + { + (yyval.action).code = W_STOP; + (yyval.action).command = NULL; + (yyval.action).str = mm_strdup("stop"); + } +#line 63881 "preproc.c" + break; + + case 3400: /* action: SQL_GOTO name */ +#line 18370 "preproc.y" + { + (yyval.action).code = W_GOTO; + (yyval.action).command = mm_strdup((yyvsp[0].str)); + (yyval.action).str = cat2_str(mm_strdup("goto "), (yyvsp[0].str)); + } +#line 63891 "preproc.c" + break; + + case 3401: /* action: SQL_GO TO name */ +#line 18376 "preproc.y" + { + (yyval.action).code = W_GOTO; + (yyval.action).command = mm_strdup((yyvsp[0].str)); + (yyval.action).str = cat2_str(mm_strdup("goto "), (yyvsp[0].str)); + } +#line 63901 "preproc.c" + break; + + case 3402: /* action: DO name '(' c_args ')' */ +#line 18382 "preproc.y" + { + (yyval.action).code = W_DO; + (yyval.action).command = cat_str(4, (yyvsp[-3].str), mm_strdup("("), (yyvsp[-1].str), mm_strdup(")")); + (yyval.action).str = cat2_str(mm_strdup("do"), mm_strdup((yyval.action).command)); + } +#line 63911 "preproc.c" + break; + + case 3403: /* action: DO SQL_BREAK */ +#line 18388 "preproc.y" + { + (yyval.action).code = W_BREAK; + (yyval.action).command = NULL; + (yyval.action).str = mm_strdup("break"); + } +#line 63921 "preproc.c" + break; + + case 3404: /* action: DO CONTINUE_P */ +#line 18394 "preproc.y" + { + (yyval.action).code = W_CONTINUE; + (yyval.action).command = NULL; + (yyval.action).str = mm_strdup("continue"); + } +#line 63931 "preproc.c" + break; + + case 3405: /* action: CALL name '(' c_args ')' */ +#line 18400 "preproc.y" + { + (yyval.action).code = W_DO; + (yyval.action).command = cat_str(4, (yyvsp[-3].str), mm_strdup("("), (yyvsp[-1].str), mm_strdup(")")); + (yyval.action).str = cat2_str(mm_strdup("call"), mm_strdup((yyval.action).command)); + } +#line 63941 "preproc.c" + break; + + case 3406: /* action: CALL name */ +#line 18406 "preproc.y" + { + (yyval.action).code = W_DO; + (yyval.action).command = cat2_str((yyvsp[0].str), mm_strdup("()")); + (yyval.action).str = cat2_str(mm_strdup("call"), mm_strdup((yyval.action).command)); + } +#line 63951 "preproc.c" + break; + + case 3407: /* ECPGKeywords: ECPGKeywords_vanames */ +#line 18416 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63957 "preproc.c" + break; + + case 3408: /* ECPGKeywords: ECPGKeywords_rest */ +#line 18417 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 63963 "preproc.c" + break; + + case 3409: /* ECPGKeywords_vanames: SQL_BREAK */ +#line 18420 "preproc.y" + { (yyval.str) = mm_strdup("break"); } +#line 63969 "preproc.c" + break; + + case 3410: /* ECPGKeywords_vanames: SQL_CARDINALITY */ +#line 18421 "preproc.y" + { (yyval.str) = mm_strdup("cardinality"); } +#line 63975 "preproc.c" + break; + + case 3411: /* ECPGKeywords_vanames: SQL_COUNT */ +#line 18422 "preproc.y" + { (yyval.str) = mm_strdup("count"); } +#line 63981 "preproc.c" + break; + + case 3412: /* ECPGKeywords_vanames: SQL_DATETIME_INTERVAL_CODE */ +#line 18423 "preproc.y" + { (yyval.str) = mm_strdup("datetime_interval_code"); } +#line 63987 "preproc.c" + break; + + case 3413: /* ECPGKeywords_vanames: SQL_DATETIME_INTERVAL_PRECISION */ +#line 18424 "preproc.y" + { (yyval.str) = mm_strdup("datetime_interval_precision"); } +#line 63993 "preproc.c" + break; + + case 3414: /* ECPGKeywords_vanames: SQL_FOUND */ +#line 18425 "preproc.y" + { (yyval.str) = mm_strdup("found"); } +#line 63999 "preproc.c" + break; + + case 3415: /* ECPGKeywords_vanames: SQL_GO */ +#line 18426 "preproc.y" + { (yyval.str) = mm_strdup("go"); } +#line 64005 "preproc.c" + break; + + case 3416: /* ECPGKeywords_vanames: SQL_GOTO */ +#line 18427 "preproc.y" + { (yyval.str) = mm_strdup("goto"); } +#line 64011 "preproc.c" + break; + + case 3417: /* ECPGKeywords_vanames: SQL_IDENTIFIED */ +#line 18428 "preproc.y" + { (yyval.str) = mm_strdup("identified"); } +#line 64017 "preproc.c" + break; + + case 3418: /* ECPGKeywords_vanames: SQL_INDICATOR */ +#line 18429 "preproc.y" + { (yyval.str) = mm_strdup("indicator"); } +#line 64023 "preproc.c" + break; + + case 3419: /* ECPGKeywords_vanames: SQL_KEY_MEMBER */ +#line 18430 "preproc.y" + { (yyval.str) = mm_strdup("key_member"); } +#line 64029 "preproc.c" + break; + + case 3420: /* ECPGKeywords_vanames: SQL_LENGTH */ +#line 18431 "preproc.y" + { (yyval.str) = mm_strdup("length"); } +#line 64035 "preproc.c" + break; + + case 3421: /* ECPGKeywords_vanames: SQL_NULLABLE */ +#line 18432 "preproc.y" + { (yyval.str) = mm_strdup("nullable"); } +#line 64041 "preproc.c" + break; + + case 3422: /* ECPGKeywords_vanames: SQL_OCTET_LENGTH */ +#line 18433 "preproc.y" + { (yyval.str) = mm_strdup("octet_length"); } +#line 64047 "preproc.c" + break; + + case 3423: /* ECPGKeywords_vanames: SQL_RETURNED_LENGTH */ +#line 18434 "preproc.y" + { (yyval.str) = mm_strdup("returned_length"); } +#line 64053 "preproc.c" + break; + + case 3424: /* ECPGKeywords_vanames: SQL_RETURNED_OCTET_LENGTH */ +#line 18435 "preproc.y" + { (yyval.str) = mm_strdup("returned_octet_length"); } +#line 64059 "preproc.c" + break; + + case 3425: /* ECPGKeywords_vanames: SQL_SCALE */ +#line 18436 "preproc.y" + { (yyval.str) = mm_strdup("scale"); } +#line 64065 "preproc.c" + break; + + case 3426: /* ECPGKeywords_vanames: SQL_SECTION */ +#line 18437 "preproc.y" + { (yyval.str) = mm_strdup("section"); } +#line 64071 "preproc.c" + break; + + case 3427: /* ECPGKeywords_vanames: SQL_SQLERROR */ +#line 18438 "preproc.y" + { (yyval.str) = mm_strdup("sqlerror"); } +#line 64077 "preproc.c" + break; + + case 3428: /* ECPGKeywords_vanames: SQL_SQLPRINT */ +#line 18439 "preproc.y" + { (yyval.str) = mm_strdup("sqlprint"); } +#line 64083 "preproc.c" + break; + + case 3429: /* ECPGKeywords_vanames: SQL_SQLWARNING */ +#line 18440 "preproc.y" + { (yyval.str) = mm_strdup("sqlwarning"); } +#line 64089 "preproc.c" + break; + + case 3430: /* ECPGKeywords_vanames: SQL_STOP */ +#line 18441 "preproc.y" + { (yyval.str) = mm_strdup("stop"); } +#line 64095 "preproc.c" + break; + + case 3431: /* ECPGKeywords_rest: SQL_CONNECT */ +#line 18444 "preproc.y" + { (yyval.str) = mm_strdup("connect"); } +#line 64101 "preproc.c" + break; + + case 3432: /* ECPGKeywords_rest: SQL_DESCRIBE */ +#line 18445 "preproc.y" + { (yyval.str) = mm_strdup("describe"); } +#line 64107 "preproc.c" + break; + + case 3433: /* ECPGKeywords_rest: SQL_DISCONNECT */ +#line 18446 "preproc.y" + { (yyval.str) = mm_strdup("disconnect"); } +#line 64113 "preproc.c" + break; + + case 3434: /* ECPGKeywords_rest: SQL_OPEN */ +#line 18447 "preproc.y" + { (yyval.str) = mm_strdup("open"); } +#line 64119 "preproc.c" + break; + + case 3435: /* ECPGKeywords_rest: SQL_VAR */ +#line 18448 "preproc.y" + { (yyval.str) = mm_strdup("var"); } +#line 64125 "preproc.c" + break; + + case 3436: /* ECPGKeywords_rest: SQL_WHENEVER */ +#line 18449 "preproc.y" + { (yyval.str) = mm_strdup("whenever"); } +#line 64131 "preproc.c" + break; + + case 3437: /* ECPGTypeName: SQL_BOOL */ +#line 18453 "preproc.y" + { (yyval.str) = mm_strdup("bool"); } +#line 64137 "preproc.c" + break; + + case 3438: /* ECPGTypeName: SQL_LONG */ +#line 18454 "preproc.y" + { (yyval.str) = mm_strdup("long"); } +#line 64143 "preproc.c" + break; + + case 3439: /* ECPGTypeName: SQL_OUTPUT */ +#line 18455 "preproc.y" + { (yyval.str) = mm_strdup("output"); } +#line 64149 "preproc.c" + break; + + case 3440: /* ECPGTypeName: SQL_SHORT */ +#line 18456 "preproc.y" + { (yyval.str) = mm_strdup("short"); } +#line 64155 "preproc.c" + break; + + case 3441: /* ECPGTypeName: SQL_STRUCT */ +#line 18457 "preproc.y" + { (yyval.str) = mm_strdup("struct"); } +#line 64161 "preproc.c" + break; + + case 3442: /* ECPGTypeName: SQL_SIGNED */ +#line 18458 "preproc.y" + { (yyval.str) = mm_strdup("signed"); } +#line 64167 "preproc.c" + break; + + case 3443: /* ECPGTypeName: SQL_UNSIGNED */ +#line 18459 "preproc.y" + { (yyval.str) = mm_strdup("unsigned"); } +#line 64173 "preproc.c" + break; + + case 3444: /* symbol: ColLabel */ +#line 18462 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64179 "preproc.c" + break; + + case 3445: /* ECPGColId: ecpg_ident */ +#line 18465 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64185 "preproc.c" + break; + + case 3446: /* ECPGColId: unreserved_keyword */ +#line 18466 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64191 "preproc.c" + break; + + case 3447: /* ECPGColId: col_name_keyword */ +#line 18467 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64197 "preproc.c" + break; + + case 3448: /* ECPGColId: ECPGunreserved_interval */ +#line 18468 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64203 "preproc.c" + break; + + case 3449: /* ECPGColId: ECPGKeywords */ +#line 18469 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64209 "preproc.c" + break; + + case 3450: /* ECPGColId: ECPGCKeywords */ +#line 18470 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64215 "preproc.c" + break; + + case 3451: /* ECPGColId: CHAR_P */ +#line 18471 "preproc.y" + { (yyval.str) = mm_strdup("char"); } +#line 64221 "preproc.c" + break; + + case 3452: /* ECPGColId: VALUES */ +#line 18472 "preproc.y" + { (yyval.str) = mm_strdup("values"); } +#line 64227 "preproc.c" + break; + + case 3453: /* ColId: ecpg_ident */ +#line 18485 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64233 "preproc.c" + break; + + case 3454: /* ColId: all_unreserved_keyword */ +#line 18486 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64239 "preproc.c" + break; + + case 3455: /* ColId: col_name_keyword */ +#line 18487 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64245 "preproc.c" + break; + + case 3456: /* ColId: ECPGKeywords */ +#line 18488 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64251 "preproc.c" + break; + + case 3457: /* ColId: ECPGCKeywords */ +#line 18489 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64257 "preproc.c" + break; + + case 3458: /* ColId: CHAR_P */ +#line 18490 "preproc.y" + { (yyval.str) = mm_strdup("char"); } +#line 64263 "preproc.c" + break; + + case 3459: /* ColId: VALUES */ +#line 18491 "preproc.y" + { (yyval.str) = mm_strdup("values"); } +#line 64269 "preproc.c" + break; + + case 3460: /* type_function_name: ecpg_ident */ +#line 18496 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64275 "preproc.c" + break; + + case 3461: /* type_function_name: all_unreserved_keyword */ +#line 18497 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64281 "preproc.c" + break; + + case 3462: /* type_function_name: type_func_name_keyword */ +#line 18498 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64287 "preproc.c" + break; + + case 3463: /* type_function_name: ECPGKeywords */ +#line 18499 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64293 "preproc.c" + break; + + case 3464: /* type_function_name: ECPGCKeywords */ +#line 18500 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64299 "preproc.c" + break; + + case 3465: /* type_function_name: ECPGTypeName */ +#line 18501 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64305 "preproc.c" + break; + + case 3466: /* ColLabel: ECPGColLabel */ +#line 18507 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64311 "preproc.c" + break; + + case 3467: /* ColLabel: ECPGTypeName */ +#line 18508 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64317 "preproc.c" + break; + + case 3468: /* ColLabel: CHAR_P */ +#line 18509 "preproc.y" + { (yyval.str) = mm_strdup("char"); } +#line 64323 "preproc.c" + break; + + case 3469: /* ColLabel: CURRENT_P */ +#line 18510 "preproc.y" + { (yyval.str) = mm_strdup("current"); } +#line 64329 "preproc.c" + break; + + case 3470: /* ColLabel: INPUT_P */ +#line 18511 "preproc.y" + { (yyval.str) = mm_strdup("input"); } +#line 64335 "preproc.c" + break; + + case 3471: /* ColLabel: INT_P */ +#line 18512 "preproc.y" + { (yyval.str) = mm_strdup("int"); } +#line 64341 "preproc.c" + break; + + case 3472: /* ColLabel: TO */ +#line 18513 "preproc.y" + { (yyval.str) = mm_strdup("to"); } +#line 64347 "preproc.c" + break; + + case 3473: /* ColLabel: UNION */ +#line 18514 "preproc.y" + { (yyval.str) = mm_strdup("union"); } +#line 64353 "preproc.c" + break; + + case 3474: /* ColLabel: VALUES */ +#line 18515 "preproc.y" + { (yyval.str) = mm_strdup("values"); } +#line 64359 "preproc.c" + break; + + case 3475: /* ColLabel: ECPGCKeywords */ +#line 18516 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64365 "preproc.c" + break; + + case 3476: /* ColLabel: ECPGunreserved_interval */ +#line 18517 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64371 "preproc.c" + break; + + case 3477: /* ECPGColLabel: ECPGColLabelCommon */ +#line 18520 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64377 "preproc.c" + break; + + case 3478: /* ECPGColLabel: unreserved_keyword */ +#line 18521 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64383 "preproc.c" + break; + + case 3479: /* ECPGColLabel: reserved_keyword */ +#line 18522 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64389 "preproc.c" + break; + + case 3480: /* ECPGColLabel: ECPGKeywords_rest */ +#line 18523 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64395 "preproc.c" + break; + + case 3481: /* ECPGColLabel: CONNECTION */ +#line 18524 "preproc.y" + { (yyval.str) = mm_strdup("connection"); } +#line 64401 "preproc.c" + break; + + case 3482: /* ECPGColLabelCommon: ecpg_ident */ +#line 18527 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64407 "preproc.c" + break; + + case 3483: /* ECPGColLabelCommon: col_name_keyword */ +#line 18528 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64413 "preproc.c" + break; + + case 3484: /* ECPGColLabelCommon: type_func_name_keyword */ +#line 18529 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64419 "preproc.c" + break; + + case 3485: /* ECPGColLabelCommon: ECPGKeywords_vanames */ +#line 18530 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64425 "preproc.c" + break; + + case 3486: /* ECPGCKeywords: S_AUTO */ +#line 18533 "preproc.y" + { (yyval.str) = mm_strdup("auto"); } +#line 64431 "preproc.c" + break; + + case 3487: /* ECPGCKeywords: S_CONST */ +#line 18534 "preproc.y" + { (yyval.str) = mm_strdup("const"); } +#line 64437 "preproc.c" + break; + + case 3488: /* ECPGCKeywords: S_EXTERN */ +#line 18535 "preproc.y" + { (yyval.str) = mm_strdup("extern"); } +#line 64443 "preproc.c" + break; + + case 3489: /* ECPGCKeywords: S_REGISTER */ +#line 18536 "preproc.y" + { (yyval.str) = mm_strdup("register"); } +#line 64449 "preproc.c" + break; + + case 3490: /* ECPGCKeywords: S_STATIC */ +#line 18537 "preproc.y" + { (yyval.str) = mm_strdup("static"); } +#line 64455 "preproc.c" + break; + + case 3491: /* ECPGCKeywords: S_TYPEDEF */ +#line 18538 "preproc.y" + { (yyval.str) = mm_strdup("typedef"); } +#line 64461 "preproc.c" + break; + + case 3492: /* ECPGCKeywords: S_VOLATILE */ +#line 18539 "preproc.y" + { (yyval.str) = mm_strdup("volatile"); } +#line 64467 "preproc.c" + break; + + case 3493: /* all_unreserved_keyword: unreserved_keyword */ +#line 18556 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64473 "preproc.c" + break; + + case 3494: /* all_unreserved_keyword: ECPGunreserved_interval */ +#line 18557 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64479 "preproc.c" + break; + + case 3495: /* all_unreserved_keyword: CONNECTION */ +#line 18558 "preproc.y" + { (yyval.str) = mm_strdup("connection"); } +#line 64485 "preproc.c" + break; + + case 3496: /* ECPGunreserved_interval: DAY_P */ +#line 18561 "preproc.y" + { (yyval.str) = mm_strdup("day"); } +#line 64491 "preproc.c" + break; + + case 3497: /* ECPGunreserved_interval: HOUR_P */ +#line 18562 "preproc.y" + { (yyval.str) = mm_strdup("hour"); } +#line 64497 "preproc.c" + break; + + case 3498: /* ECPGunreserved_interval: MINUTE_P */ +#line 18563 "preproc.y" + { (yyval.str) = mm_strdup("minute"); } +#line 64503 "preproc.c" + break; + + case 3499: /* ECPGunreserved_interval: MONTH_P */ +#line 18564 "preproc.y" + { (yyval.str) = mm_strdup("month"); } +#line 64509 "preproc.c" + break; + + case 3500: /* ECPGunreserved_interval: SECOND_P */ +#line 18565 "preproc.y" + { (yyval.str) = mm_strdup("second"); } +#line 64515 "preproc.c" + break; + + case 3501: /* ECPGunreserved_interval: YEAR_P */ +#line 18566 "preproc.y" + { (yyval.str) = mm_strdup("year"); } +#line 64521 "preproc.c" + break; + + case 3504: /* ecpgstart: SQL_START */ +#line 18573 "preproc.y" + { + reset_variables(); + pacounter = 1; + } +#line 64530 "preproc.c" + break; + + case 3505: /* c_args: %empty */ +#line 18579 "preproc.y" + { (yyval.str) = EMPTY; } +#line 64536 "preproc.c" + break; + + case 3506: /* c_args: c_list */ +#line 18580 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64542 "preproc.c" + break; + + case 3507: /* coutputvariable: cvariable indicator */ +#line 18584 "preproc.y" + { add_variable_to_head(&argsresult, find_variable((yyvsp[-1].str)), find_variable((yyvsp[0].str))); } +#line 64548 "preproc.c" + break; + + case 3508: /* coutputvariable: cvariable */ +#line 18586 "preproc.y" + { add_variable_to_head(&argsresult, find_variable((yyvsp[0].str)), &no_indicator); } +#line 64554 "preproc.c" + break; + + case 3509: /* civarind: cvariable indicator */ +#line 18591 "preproc.y" + { + if (find_variable((yyvsp[0].str))->type->type == ECPGt_array) + mmerror(PARSE_ERROR, ET_ERROR, "arrays of indicators are not allowed on input"); + + add_variable_to_head(&argsinsert, find_variable((yyvsp[-1].str)), find_variable((yyvsp[0].str))); + (yyval.str) = create_questionmarks((yyvsp[-1].str), false); + } +#line 64566 "preproc.c" + break; + + case 3510: /* char_civar: char_variable */ +#line 18601 "preproc.y" + { + char *ptr = strstr((yyvsp[0].str), ".arr"); + + if (ptr) /* varchar, we need the struct name here, not the struct element */ + *ptr = '\0'; + add_variable_to_head(&argsinsert, find_variable((yyvsp[0].str)), &no_indicator); + (yyval.str) = (yyvsp[0].str); + } +#line 64579 "preproc.c" + break; + + case 3511: /* civar: cvariable */ +#line 18612 "preproc.y" + { + add_variable_to_head(&argsinsert, find_variable((yyvsp[0].str)), &no_indicator); + (yyval.str) = create_questionmarks((yyvsp[0].str), false); + } +#line 64588 "preproc.c" + break; + + case 3512: /* indicator: cvariable */ +#line 18618 "preproc.y" + { check_indicator((find_variable((yyvsp[0].str)))->type); (yyval.str) = (yyvsp[0].str); } +#line 64594 "preproc.c" + break; + + case 3513: /* indicator: SQL_INDICATOR cvariable */ +#line 18619 "preproc.y" + { check_indicator((find_variable((yyvsp[0].str)))->type); (yyval.str) = (yyvsp[0].str); } +#line 64600 "preproc.c" + break; + + case 3514: /* indicator: SQL_INDICATOR name */ +#line 18620 "preproc.y" + { check_indicator((find_variable((yyvsp[0].str)))->type); (yyval.str) = (yyvsp[0].str); } +#line 64606 "preproc.c" + break; + + case 3515: /* cvariable: CVARIABLE */ +#line 18624 "preproc.y" + { + /* As long as multidimensional arrays are not implemented we have to check for those here */ + char *ptr = (yyvsp[0].str); + int brace_open=0, brace = false; + + for (; *ptr; ptr++) + { + switch (*ptr) + { + case '[': + if (brace) + mmfatal(PARSE_ERROR, "multidimensional arrays for simple data types are not supported"); + brace_open++; + break; + case ']': + brace_open--; + if (brace_open == 0) + brace = true; + break; + case '\t': + case ' ': + break; + default: + if (brace_open == 0) + brace = false; + break; + } + } + (yyval.str) = (yyvsp[0].str); + } +#line 64641 "preproc.c" + break; + + case 3516: /* ecpg_param: PARAM */ +#line 18656 "preproc.y" + { (yyval.str) = make_name(); } +#line 64647 "preproc.c" + break; + + case 3517: /* ecpg_bconst: BCONST */ +#line 18658 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64653 "preproc.c" + break; + + case 3518: /* ecpg_fconst: FCONST */ +#line 18660 "preproc.y" + { (yyval.str) = make_name(); } +#line 64659 "preproc.c" + break; + + case 3519: /* ecpg_sconst: SCONST */ +#line 18662 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64665 "preproc.c" + break; + + case 3520: /* ecpg_xconst: XCONST */ +#line 18664 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64671 "preproc.c" + break; + + case 3521: /* ecpg_ident: IDENT */ +#line 18666 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64677 "preproc.c" + break; + + case 3522: /* ecpg_ident: CSTRING */ +#line 18667 "preproc.y" + { (yyval.str) = make3_str(mm_strdup("\""), (yyvsp[0].str), mm_strdup("\"")); } +#line 64683 "preproc.c" + break; + + case 3523: /* quoted_ident_stringvar: name */ +#line 18671 "preproc.y" + { (yyval.str) = make3_str(mm_strdup("\""), (yyvsp[0].str), mm_strdup("\"")); } +#line 64689 "preproc.c" + break; + + case 3524: /* quoted_ident_stringvar: char_variable */ +#line 18673 "preproc.y" + { (yyval.str) = make3_str(mm_strdup("("), (yyvsp[0].str), mm_strdup(")")); } +#line 64695 "preproc.c" + break; + + case 3525: /* c_stuff_item: c_anything */ +#line 18680 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64701 "preproc.c" + break; + + case 3526: /* c_stuff_item: '(' ')' */ +#line 18681 "preproc.y" + { (yyval.str) = mm_strdup("()"); } +#line 64707 "preproc.c" + break; + + case 3527: /* c_stuff_item: '(' c_stuff ')' */ +#line 18683 "preproc.y" + { (yyval.str) = cat_str(3, mm_strdup("("), (yyvsp[-1].str), mm_strdup(")")); } +#line 64713 "preproc.c" + break; + + case 3528: /* c_stuff: c_stuff_item */ +#line 18686 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64719 "preproc.c" + break; + + case 3529: /* c_stuff: c_stuff c_stuff_item */ +#line 18688 "preproc.y" + { (yyval.str) = cat2_str((yyvsp[-1].str), (yyvsp[0].str)); } +#line 64725 "preproc.c" + break; + + case 3530: /* c_list: c_term */ +#line 18691 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64731 "preproc.c" + break; + + case 3531: /* c_list: c_list ',' c_term */ +#line 18692 "preproc.y" + { (yyval.str) = cat_str(3, (yyvsp[-2].str), mm_strdup(","), (yyvsp[0].str)); } +#line 64737 "preproc.c" + break; + + case 3532: /* c_term: c_stuff */ +#line 18695 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64743 "preproc.c" + break; + + case 3533: /* c_term: '{' c_list '}' */ +#line 18696 "preproc.y" + { (yyval.str) = cat_str(3, mm_strdup("{"), (yyvsp[-1].str), mm_strdup("}")); } +#line 64749 "preproc.c" + break; + + case 3534: /* c_thing: c_anything */ +#line 18699 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64755 "preproc.c" + break; + + case 3535: /* c_thing: '(' */ +#line 18700 "preproc.y" + { (yyval.str) = mm_strdup("("); } +#line 64761 "preproc.c" + break; + + case 3536: /* c_thing: ')' */ +#line 18701 "preproc.y" + { (yyval.str) = mm_strdup(")"); } +#line 64767 "preproc.c" + break; + + case 3537: /* c_thing: ',' */ +#line 18702 "preproc.y" + { (yyval.str) = mm_strdup(","); } +#line 64773 "preproc.c" + break; + + case 3538: /* c_thing: ';' */ +#line 18703 "preproc.y" + { (yyval.str) = mm_strdup(";"); } +#line 64779 "preproc.c" + break; + + case 3539: /* c_anything: ecpg_ident */ +#line 18706 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64785 "preproc.c" + break; + + case 3540: /* c_anything: Iconst */ +#line 18707 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64791 "preproc.c" + break; + + case 3541: /* c_anything: ecpg_fconst */ +#line 18708 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64797 "preproc.c" + break; + + case 3542: /* c_anything: ecpg_sconst */ +#line 18709 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 64803 "preproc.c" + break; + + case 3543: /* c_anything: '*' */ +#line 18710 "preproc.y" + { (yyval.str) = mm_strdup("*"); } +#line 64809 "preproc.c" + break; + + case 3544: /* c_anything: '+' */ +#line 18711 "preproc.y" + { (yyval.str) = mm_strdup("+"); } +#line 64815 "preproc.c" + break; + + case 3545: /* c_anything: '-' */ +#line 18712 "preproc.y" + { (yyval.str) = mm_strdup("-"); } +#line 64821 "preproc.c" + break; + + case 3546: /* c_anything: '/' */ +#line 18713 "preproc.y" + { (yyval.str) = mm_strdup("/"); } +#line 64827 "preproc.c" + break; + + case 3547: /* c_anything: '%' */ +#line 18714 "preproc.y" + { (yyval.str) = mm_strdup("%"); } +#line 64833 "preproc.c" + break; + + case 3548: /* c_anything: NULL_P */ +#line 18715 "preproc.y" + { (yyval.str) = mm_strdup("NULL"); } +#line 64839 "preproc.c" + break; + + case 3549: /* c_anything: S_ADD */ +#line 18716 "preproc.y" + { (yyval.str) = mm_strdup("+="); } +#line 64845 "preproc.c" + break; + + case 3550: /* c_anything: S_AND */ +#line 18717 "preproc.y" + { (yyval.str) = mm_strdup("&&"); } +#line 64851 "preproc.c" + break; + + case 3551: /* c_anything: S_ANYTHING */ +#line 18718 "preproc.y" + { (yyval.str) = make_name(); } +#line 64857 "preproc.c" + break; + + case 3552: /* c_anything: S_AUTO */ +#line 18719 "preproc.y" + { (yyval.str) = mm_strdup("auto"); } +#line 64863 "preproc.c" + break; + + case 3553: /* c_anything: S_CONST */ +#line 18720 "preproc.y" + { (yyval.str) = mm_strdup("const"); } +#line 64869 "preproc.c" + break; + + case 3554: /* c_anything: S_DEC */ +#line 18721 "preproc.y" + { (yyval.str) = mm_strdup("--"); } +#line 64875 "preproc.c" + break; + + case 3555: /* c_anything: S_DIV */ +#line 18722 "preproc.y" + { (yyval.str) = mm_strdup("/="); } +#line 64881 "preproc.c" + break; + + case 3556: /* c_anything: S_DOTPOINT */ +#line 18723 "preproc.y" + { (yyval.str) = mm_strdup(".*"); } +#line 64887 "preproc.c" + break; + + case 3557: /* c_anything: S_EQUAL */ +#line 18724 "preproc.y" + { (yyval.str) = mm_strdup("=="); } +#line 64893 "preproc.c" + break; + + case 3558: /* c_anything: S_EXTERN */ +#line 18725 "preproc.y" + { (yyval.str) = mm_strdup("extern"); } +#line 64899 "preproc.c" + break; + + case 3559: /* c_anything: S_INC */ +#line 18726 "preproc.y" + { (yyval.str) = mm_strdup("++"); } +#line 64905 "preproc.c" + break; + + case 3560: /* c_anything: S_LSHIFT */ +#line 18727 "preproc.y" + { (yyval.str) = mm_strdup("<<"); } +#line 64911 "preproc.c" + break; + + case 3561: /* c_anything: S_MEMBER */ +#line 18728 "preproc.y" + { (yyval.str) = mm_strdup("->"); } +#line 64917 "preproc.c" + break; + + case 3562: /* c_anything: S_MEMPOINT */ +#line 18729 "preproc.y" + { (yyval.str) = mm_strdup("->*"); } +#line 64923 "preproc.c" + break; + + case 3563: /* c_anything: S_MOD */ +#line 18730 "preproc.y" + { (yyval.str) = mm_strdup("%="); } +#line 64929 "preproc.c" + break; + + case 3564: /* c_anything: S_MUL */ +#line 18731 "preproc.y" + { (yyval.str) = mm_strdup("*="); } +#line 64935 "preproc.c" + break; + + case 3565: /* c_anything: S_NEQUAL */ +#line 18732 "preproc.y" + { (yyval.str) = mm_strdup("!="); } +#line 64941 "preproc.c" + break; + + case 3566: /* c_anything: S_OR */ +#line 18733 "preproc.y" + { (yyval.str) = mm_strdup("||"); } +#line 64947 "preproc.c" + break; + + case 3567: /* c_anything: S_REGISTER */ +#line 18734 "preproc.y" + { (yyval.str) = mm_strdup("register"); } +#line 64953 "preproc.c" + break; + + case 3568: /* c_anything: S_RSHIFT */ +#line 18735 "preproc.y" + { (yyval.str) = mm_strdup(">>"); } +#line 64959 "preproc.c" + break; + + case 3569: /* c_anything: S_STATIC */ +#line 18736 "preproc.y" + { (yyval.str) = mm_strdup("static"); } +#line 64965 "preproc.c" + break; + + case 3570: /* c_anything: S_SUB */ +#line 18737 "preproc.y" + { (yyval.str) = mm_strdup("-="); } +#line 64971 "preproc.c" + break; + + case 3571: /* c_anything: S_TYPEDEF */ +#line 18738 "preproc.y" + { (yyval.str) = mm_strdup("typedef"); } +#line 64977 "preproc.c" + break; + + case 3572: /* c_anything: S_VOLATILE */ +#line 18739 "preproc.y" + { (yyval.str) = mm_strdup("volatile"); } +#line 64983 "preproc.c" + break; + + case 3573: /* c_anything: SQL_BOOL */ +#line 18740 "preproc.y" + { (yyval.str) = mm_strdup("bool"); } +#line 64989 "preproc.c" + break; + + case 3574: /* c_anything: ENUM_P */ +#line 18741 "preproc.y" + { (yyval.str) = mm_strdup("enum"); } +#line 64995 "preproc.c" + break; + + case 3575: /* c_anything: HOUR_P */ +#line 18742 "preproc.y" + { (yyval.str) = mm_strdup("hour"); } +#line 65001 "preproc.c" + break; + + case 3576: /* c_anything: INT_P */ +#line 18743 "preproc.y" + { (yyval.str) = mm_strdup("int"); } +#line 65007 "preproc.c" + break; + + case 3577: /* c_anything: SQL_LONG */ +#line 18744 "preproc.y" + { (yyval.str) = mm_strdup("long"); } +#line 65013 "preproc.c" + break; + + case 3578: /* c_anything: MINUTE_P */ +#line 18745 "preproc.y" + { (yyval.str) = mm_strdup("minute"); } +#line 65019 "preproc.c" + break; + + case 3579: /* c_anything: MONTH_P */ +#line 18746 "preproc.y" + { (yyval.str) = mm_strdup("month"); } +#line 65025 "preproc.c" + break; + + case 3580: /* c_anything: SECOND_P */ +#line 18747 "preproc.y" + { (yyval.str) = mm_strdup("second"); } +#line 65031 "preproc.c" + break; + + case 3581: /* c_anything: SQL_SHORT */ +#line 18748 "preproc.y" + { (yyval.str) = mm_strdup("short"); } +#line 65037 "preproc.c" + break; + + case 3582: /* c_anything: SQL_SIGNED */ +#line 18749 "preproc.y" + { (yyval.str) = mm_strdup("signed"); } +#line 65043 "preproc.c" + break; + + case 3583: /* c_anything: SQL_STRUCT */ +#line 18750 "preproc.y" + { (yyval.str) = mm_strdup("struct"); } +#line 65049 "preproc.c" + break; + + case 3584: /* c_anything: SQL_UNSIGNED */ +#line 18751 "preproc.y" + { (yyval.str) = mm_strdup("unsigned"); } +#line 65055 "preproc.c" + break; + + case 3585: /* c_anything: YEAR_P */ +#line 18752 "preproc.y" + { (yyval.str) = mm_strdup("year"); } +#line 65061 "preproc.c" + break; + + case 3586: /* c_anything: CHAR_P */ +#line 18753 "preproc.y" + { (yyval.str) = mm_strdup("char"); } +#line 65067 "preproc.c" + break; + + case 3587: /* c_anything: FLOAT_P */ +#line 18754 "preproc.y" + { (yyval.str) = mm_strdup("float"); } +#line 65073 "preproc.c" + break; + + case 3588: /* c_anything: TO */ +#line 18755 "preproc.y" + { (yyval.str) = mm_strdup("to"); } +#line 65079 "preproc.c" + break; + + case 3589: /* c_anything: UNION */ +#line 18756 "preproc.y" + { (yyval.str) = mm_strdup("union"); } +#line 65085 "preproc.c" + break; + + case 3590: /* c_anything: VARCHAR */ +#line 18757 "preproc.y" + { (yyval.str) = mm_strdup("varchar"); } +#line 65091 "preproc.c" + break; + + case 3591: /* c_anything: '[' */ +#line 18758 "preproc.y" + { (yyval.str) = mm_strdup("["); } +#line 65097 "preproc.c" + break; + + case 3592: /* c_anything: ']' */ +#line 18759 "preproc.y" + { (yyval.str) = mm_strdup("]"); } +#line 65103 "preproc.c" + break; + + case 3593: /* c_anything: '=' */ +#line 18760 "preproc.y" + { (yyval.str) = mm_strdup("="); } +#line 65109 "preproc.c" + break; + + case 3594: /* c_anything: ':' */ +#line 18761 "preproc.y" + { (yyval.str) = mm_strdup(":"); } +#line 65115 "preproc.c" + break; + + case 3595: /* DeallocateStmt: DEALLOCATE prepared_name */ +#line 18764 "preproc.y" + { check_declared_list((yyvsp[0].str)); (yyval.str) = (yyvsp[0].str); } +#line 65121 "preproc.c" + break; + + case 3596: /* DeallocateStmt: DEALLOCATE PREPARE prepared_name */ +#line 18765 "preproc.y" + { check_declared_list((yyvsp[0].str)); (yyval.str) = (yyvsp[0].str); } +#line 65127 "preproc.c" + break; + + case 3597: /* DeallocateStmt: DEALLOCATE ALL */ +#line 18766 "preproc.y" + { (yyval.str) = mm_strdup("all"); } +#line 65133 "preproc.c" + break; + + case 3598: /* DeallocateStmt: DEALLOCATE PREPARE ALL */ +#line 18767 "preproc.y" + { (yyval.str) = mm_strdup("all"); } +#line 65139 "preproc.c" + break; + + case 3599: /* Iresult: Iconst */ +#line 18770 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 65145 "preproc.c" + break; + + case 3600: /* Iresult: '(' Iresult ')' */ +#line 18771 "preproc.y" + { (yyval.str) = cat_str(3, mm_strdup("("), (yyvsp[-1].str), mm_strdup(")")); } +#line 65151 "preproc.c" + break; + + case 3601: /* Iresult: Iresult '+' Iresult */ +#line 18772 "preproc.y" + { (yyval.str) = cat_str(3, (yyvsp[-2].str), mm_strdup("+"), (yyvsp[0].str)); } +#line 65157 "preproc.c" + break; + + case 3602: /* Iresult: Iresult '-' Iresult */ +#line 18773 "preproc.y" + { (yyval.str) = cat_str(3, (yyvsp[-2].str), mm_strdup("-"), (yyvsp[0].str)); } +#line 65163 "preproc.c" + break; + + case 3603: /* Iresult: Iresult '*' Iresult */ +#line 18774 "preproc.y" + { (yyval.str) = cat_str(3, (yyvsp[-2].str), mm_strdup("*"), (yyvsp[0].str)); } +#line 65169 "preproc.c" + break; + + case 3604: /* Iresult: Iresult '/' Iresult */ +#line 18775 "preproc.y" + { (yyval.str) = cat_str(3, (yyvsp[-2].str), mm_strdup("/"), (yyvsp[0].str)); } +#line 65175 "preproc.c" + break; + + case 3605: /* Iresult: Iresult '%' Iresult */ +#line 18776 "preproc.y" + { (yyval.str) = cat_str(3, (yyvsp[-2].str), mm_strdup("%"), (yyvsp[0].str)); } +#line 65181 "preproc.c" + break; + + case 3606: /* Iresult: ecpg_sconst */ +#line 18777 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 65187 "preproc.c" + break; + + case 3607: /* Iresult: ColId */ +#line 18778 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 65193 "preproc.c" + break; + + case 3608: /* Iresult: ColId '(' var_type ')' */ +#line 18779 "preproc.y" + { if (pg_strcasecmp((yyvsp[-3].str), "sizeof") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "operator not allowed in variable definition"); + else + (yyval.str) = cat_str(4, (yyvsp[-3].str), mm_strdup("("), (yyvsp[-1].type).type_str, mm_strdup(")")); + } +#line 65203 "preproc.c" + break; + + case 3609: /* execute_rest: %empty */ +#line 18786 "preproc.y" + { (yyval.str) = EMPTY; } +#line 65209 "preproc.c" + break; + + case 3610: /* execute_rest: ecpg_using opt_ecpg_into */ +#line 18787 "preproc.y" + { (yyval.str) = EMPTY; } +#line 65215 "preproc.c" + break; + + case 3611: /* execute_rest: ecpg_into ecpg_using */ +#line 18788 "preproc.y" + { (yyval.str) = EMPTY; } +#line 65221 "preproc.c" + break; + + case 3612: /* execute_rest: ecpg_into */ +#line 18789 "preproc.y" + { (yyval.str) = EMPTY; } +#line 65227 "preproc.c" + break; + + case 3613: /* ecpg_into: INTO into_list */ +#line 18792 "preproc.y" + { (yyval.str) = EMPTY; } +#line 65233 "preproc.c" + break; + + case 3614: /* ecpg_into: into_descriptor */ +#line 18793 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 65239 "preproc.c" + break; + + case 3615: /* opt_ecpg_into: %empty */ +#line 18796 "preproc.y" + { (yyval.str) = EMPTY; } +#line 65245 "preproc.c" + break; + + case 3616: /* opt_ecpg_into: ecpg_into */ +#line 18797 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 65251 "preproc.c" + break; + + case 3617: /* ecpg_fetch_into: ecpg_into */ +#line 18800 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 65257 "preproc.c" + break; + + case 3618: /* ecpg_fetch_into: using_descriptor */ +#line 18802 "preproc.y" + { + struct variable *var; + + var = argsinsert->variable; + remove_variable_from_list(&argsinsert, var); + add_variable_to_head(&argsresult, var, &no_indicator); + (yyval.str) = (yyvsp[0].str); + } +#line 65270 "preproc.c" + break; + + case 3619: /* opt_ecpg_fetch_into: %empty */ +#line 18812 "preproc.y" + { (yyval.str) = EMPTY; } +#line 65276 "preproc.c" + break; + + case 3620: /* opt_ecpg_fetch_into: ecpg_fetch_into */ +#line 18813 "preproc.y" + { (yyval.str) = (yyvsp[0].str); } +#line 65282 "preproc.c" + break; + + +#line 65286 "preproc.c" + + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + + *++yyvsp = yyval; + *++yylsp = yyloc; + + /* Now 'shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } + + goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; + yyerror (YY_("syntax error")); + } + + yyerror_range[1] = yylloc; + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, &yylloc); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + /* Pop stack until we find a state that shifts the error token. */ + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYSYMBOL_YYerror; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + yyerror_range[1] = *yylsp; + yydestruct ("Error: popping", + YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + yyerror_range[2] = yylloc; + ++yylsp; + YYLLOC_DEFAULT (*yylsp, yyerror_range, 2); + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + + +#if !defined yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + goto yyreturn; +#endif + + +/*-------------------------------------------------------. +| yyreturn -- parsing is finished, clean up and return. | +`-------------------------------------------------------*/ +yyreturn: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, &yylloc); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + + return yyresult; +} + +#line 18816 "preproc.y" + + +void base_yyerror(const char *error) +{ + /* translator: %s is typically the translation of "syntax error" */ + mmerror(PARSE_ERROR, ET_ERROR, "%s at or near \"%s\"", + _(error), token_start ? token_start : base_yytext); +} + +void parser_init(void) +{ + /* This function is empty. It only exists for compatibility with the backend parser right now. */ +} diff --git a/src/interfaces/ecpg/preproc/preproc.h b/src/interfaces/ecpg/preproc/preproc.h new file mode 100644 index 0000000..db737ec --- /dev/null +++ b/src/interfaces/ecpg/preproc/preproc.h @@ -0,0 +1,662 @@ +/* A Bison parser, made by GNU Bison 3.7.5. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +#ifndef YY_BASE_YY_PREPROC_H_INCLUDED +# define YY_BASE_YY_PREPROC_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int base_yydebug; +#endif + +/* Token kinds. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + SQL_ALLOCATE = 258, /* SQL_ALLOCATE */ + SQL_AUTOCOMMIT = 259, /* SQL_AUTOCOMMIT */ + SQL_BOOL = 260, /* SQL_BOOL */ + SQL_BREAK = 261, /* SQL_BREAK */ + SQL_CARDINALITY = 262, /* SQL_CARDINALITY */ + SQL_CONNECT = 263, /* SQL_CONNECT */ + SQL_COUNT = 264, /* SQL_COUNT */ + SQL_DATETIME_INTERVAL_CODE = 265, /* SQL_DATETIME_INTERVAL_CODE */ + SQL_DATETIME_INTERVAL_PRECISION = 266, /* SQL_DATETIME_INTERVAL_PRECISION */ + SQL_DESCRIBE = 267, /* SQL_DESCRIBE */ + SQL_DESCRIPTOR = 268, /* SQL_DESCRIPTOR */ + SQL_DISCONNECT = 269, /* SQL_DISCONNECT */ + SQL_FOUND = 270, /* SQL_FOUND */ + SQL_FREE = 271, /* SQL_FREE */ + SQL_GET = 272, /* SQL_GET */ + SQL_GO = 273, /* SQL_GO */ + SQL_GOTO = 274, /* SQL_GOTO */ + SQL_IDENTIFIED = 275, /* SQL_IDENTIFIED */ + SQL_INDICATOR = 276, /* SQL_INDICATOR */ + SQL_KEY_MEMBER = 277, /* SQL_KEY_MEMBER */ + SQL_LENGTH = 278, /* SQL_LENGTH */ + SQL_LONG = 279, /* SQL_LONG */ + SQL_NULLABLE = 280, /* SQL_NULLABLE */ + SQL_OCTET_LENGTH = 281, /* SQL_OCTET_LENGTH */ + SQL_OPEN = 282, /* SQL_OPEN */ + SQL_OUTPUT = 283, /* SQL_OUTPUT */ + SQL_REFERENCE = 284, /* SQL_REFERENCE */ + SQL_RETURNED_LENGTH = 285, /* SQL_RETURNED_LENGTH */ + SQL_RETURNED_OCTET_LENGTH = 286, /* SQL_RETURNED_OCTET_LENGTH */ + SQL_SCALE = 287, /* SQL_SCALE */ + SQL_SECTION = 288, /* SQL_SECTION */ + SQL_SHORT = 289, /* SQL_SHORT */ + SQL_SIGNED = 290, /* SQL_SIGNED */ + SQL_SQLERROR = 291, /* SQL_SQLERROR */ + SQL_SQLPRINT = 292, /* SQL_SQLPRINT */ + SQL_SQLWARNING = 293, /* SQL_SQLWARNING */ + SQL_START = 294, /* SQL_START */ + SQL_STOP = 295, /* SQL_STOP */ + SQL_STRUCT = 296, /* SQL_STRUCT */ + SQL_UNSIGNED = 297, /* SQL_UNSIGNED */ + SQL_VAR = 298, /* SQL_VAR */ + SQL_WHENEVER = 299, /* SQL_WHENEVER */ + S_ADD = 300, /* S_ADD */ + S_AND = 301, /* S_AND */ + S_ANYTHING = 302, /* S_ANYTHING */ + S_AUTO = 303, /* S_AUTO */ + S_CONST = 304, /* S_CONST */ + S_DEC = 305, /* S_DEC */ + S_DIV = 306, /* S_DIV */ + S_DOTPOINT = 307, /* S_DOTPOINT */ + S_EQUAL = 308, /* S_EQUAL */ + S_EXTERN = 309, /* S_EXTERN */ + S_INC = 310, /* S_INC */ + S_LSHIFT = 311, /* S_LSHIFT */ + S_MEMPOINT = 312, /* S_MEMPOINT */ + S_MEMBER = 313, /* S_MEMBER */ + S_MOD = 314, /* S_MOD */ + S_MUL = 315, /* S_MUL */ + S_NEQUAL = 316, /* S_NEQUAL */ + S_OR = 317, /* S_OR */ + S_REGISTER = 318, /* S_REGISTER */ + S_RSHIFT = 319, /* S_RSHIFT */ + S_STATIC = 320, /* S_STATIC */ + S_SUB = 321, /* S_SUB */ + S_VOLATILE = 322, /* S_VOLATILE */ + S_TYPEDEF = 323, /* S_TYPEDEF */ + CSTRING = 324, /* CSTRING */ + CVARIABLE = 325, /* CVARIABLE */ + CPP_LINE = 326, /* CPP_LINE */ + IP = 327, /* IP */ + IDENT = 328, /* IDENT */ + UIDENT = 329, /* UIDENT */ + FCONST = 330, /* FCONST */ + SCONST = 331, /* SCONST */ + USCONST = 332, /* USCONST */ + BCONST = 333, /* BCONST */ + XCONST = 334, /* XCONST */ + Op = 335, /* Op */ + ICONST = 336, /* ICONST */ + PARAM = 337, /* PARAM */ + TYPECAST = 338, /* TYPECAST */ + DOT_DOT = 339, /* DOT_DOT */ + COLON_EQUALS = 340, /* COLON_EQUALS */ + EQUALS_GREATER = 341, /* EQUALS_GREATER */ + LESS_EQUALS = 342, /* LESS_EQUALS */ + GREATER_EQUALS = 343, /* GREATER_EQUALS */ + NOT_EQUALS = 344, /* NOT_EQUALS */ + ABORT_P = 345, /* ABORT_P */ + ABSOLUTE_P = 346, /* ABSOLUTE_P */ + ACCESS = 347, /* ACCESS */ + ACTION = 348, /* ACTION */ + ADD_P = 349, /* ADD_P */ + ADMIN = 350, /* ADMIN */ + AFTER = 351, /* AFTER */ + AGGREGATE = 352, /* AGGREGATE */ + ALL = 353, /* ALL */ + ALSO = 354, /* ALSO */ + ALTER = 355, /* ALTER */ + ALWAYS = 356, /* ALWAYS */ + ANALYSE = 357, /* ANALYSE */ + ANALYZE = 358, /* ANALYZE */ + AND = 359, /* AND */ + ANY = 360, /* ANY */ + ARRAY = 361, /* ARRAY */ + AS = 362, /* AS */ + ASC = 363, /* ASC */ + ASENSITIVE = 364, /* ASENSITIVE */ + ASSERTION = 365, /* ASSERTION */ + ASSIGNMENT = 366, /* ASSIGNMENT */ + ASYMMETRIC = 367, /* ASYMMETRIC */ + ATOMIC = 368, /* ATOMIC */ + AT = 369, /* AT */ + ATTACH = 370, /* ATTACH */ + ATTRIBUTE = 371, /* ATTRIBUTE */ + AUTHORIZATION = 372, /* AUTHORIZATION */ + BACKWARD = 373, /* BACKWARD */ + BEFORE = 374, /* BEFORE */ + BEGIN_P = 375, /* BEGIN_P */ + BETWEEN = 376, /* BETWEEN */ + BIGINT = 377, /* BIGINT */ + BINARY = 378, /* BINARY */ + BIT = 379, /* BIT */ + BOOLEAN_P = 380, /* BOOLEAN_P */ + BOTH = 381, /* BOTH */ + BREADTH = 382, /* BREADTH */ + BY = 383, /* BY */ + CACHE = 384, /* CACHE */ + CALL = 385, /* CALL */ + CALLED = 386, /* CALLED */ + CASCADE = 387, /* CASCADE */ + CASCADED = 388, /* CASCADED */ + CASE = 389, /* CASE */ + CAST = 390, /* CAST */ + CATALOG_P = 391, /* CATALOG_P */ + CHAIN = 392, /* CHAIN */ + CHAR_P = 393, /* CHAR_P */ + CHARACTER = 394, /* CHARACTER */ + CHARACTERISTICS = 395, /* CHARACTERISTICS */ + CHECK = 396, /* CHECK */ + CHECKPOINT = 397, /* CHECKPOINT */ + CLASS = 398, /* CLASS */ + CLOSE = 399, /* CLOSE */ + CLUSTER = 400, /* CLUSTER */ + COALESCE = 401, /* COALESCE */ + COLLATE = 402, /* COLLATE */ + COLLATION = 403, /* COLLATION */ + COLUMN = 404, /* COLUMN */ + COLUMNS = 405, /* COLUMNS */ + COMMENT = 406, /* COMMENT */ + COMMENTS = 407, /* COMMENTS */ + COMMIT = 408, /* COMMIT */ + COMMITTED = 409, /* COMMITTED */ + COMPRESSION = 410, /* COMPRESSION */ + CONCURRENTLY = 411, /* CONCURRENTLY */ + CONFIGURATION = 412, /* CONFIGURATION */ + CONFLICT = 413, /* CONFLICT */ + CONNECTION = 414, /* CONNECTION */ + CONSTRAINT = 415, /* CONSTRAINT */ + CONSTRAINTS = 416, /* CONSTRAINTS */ + CONTENT_P = 417, /* CONTENT_P */ + CONTINUE_P = 418, /* CONTINUE_P */ + CONVERSION_P = 419, /* CONVERSION_P */ + COPY = 420, /* COPY */ + COST = 421, /* COST */ + CREATE = 422, /* CREATE */ + CROSS = 423, /* CROSS */ + CSV = 424, /* CSV */ + CUBE = 425, /* CUBE */ + CURRENT_P = 426, /* CURRENT_P */ + CURRENT_CATALOG = 427, /* CURRENT_CATALOG */ + CURRENT_DATE = 428, /* CURRENT_DATE */ + CURRENT_ROLE = 429, /* CURRENT_ROLE */ + CURRENT_SCHEMA = 430, /* CURRENT_SCHEMA */ + CURRENT_TIME = 431, /* CURRENT_TIME */ + CURRENT_TIMESTAMP = 432, /* CURRENT_TIMESTAMP */ + CURRENT_USER = 433, /* CURRENT_USER */ + CURSOR = 434, /* CURSOR */ + CYCLE = 435, /* CYCLE */ + DATA_P = 436, /* DATA_P */ + DATABASE = 437, /* DATABASE */ + DAY_P = 438, /* DAY_P */ + DEALLOCATE = 439, /* DEALLOCATE */ + DEC = 440, /* DEC */ + DECIMAL_P = 441, /* DECIMAL_P */ + DECLARE = 442, /* DECLARE */ + DEFAULT = 443, /* DEFAULT */ + DEFAULTS = 444, /* DEFAULTS */ + DEFERRABLE = 445, /* DEFERRABLE */ + DEFERRED = 446, /* DEFERRED */ + DEFINER = 447, /* DEFINER */ + DELETE_P = 448, /* DELETE_P */ + DELIMITER = 449, /* DELIMITER */ + DELIMITERS = 450, /* DELIMITERS */ + DEPENDS = 451, /* DEPENDS */ + DEPTH = 452, /* DEPTH */ + DESC = 453, /* DESC */ + DETACH = 454, /* DETACH */ + DICTIONARY = 455, /* DICTIONARY */ + DISABLE_P = 456, /* DISABLE_P */ + DISCARD = 457, /* DISCARD */ + DISTINCT = 458, /* DISTINCT */ + DO = 459, /* DO */ + DOCUMENT_P = 460, /* DOCUMENT_P */ + DOMAIN_P = 461, /* DOMAIN_P */ + DOUBLE_P = 462, /* DOUBLE_P */ + DROP = 463, /* DROP */ + EACH = 464, /* EACH */ + ELSE = 465, /* ELSE */ + ENABLE_P = 466, /* ENABLE_P */ + ENCODING = 467, /* ENCODING */ + ENCRYPTED = 468, /* ENCRYPTED */ + END_P = 469, /* END_P */ + ENUM_P = 470, /* ENUM_P */ + ESCAPE = 471, /* ESCAPE */ + EVENT = 472, /* EVENT */ + EXCEPT = 473, /* EXCEPT */ + EXCLUDE = 474, /* EXCLUDE */ + EXCLUDING = 475, /* EXCLUDING */ + EXCLUSIVE = 476, /* EXCLUSIVE */ + EXECUTE = 477, /* EXECUTE */ + EXISTS = 478, /* EXISTS */ + EXPLAIN = 479, /* EXPLAIN */ + EXPRESSION = 480, /* EXPRESSION */ + EXTENSION = 481, /* EXTENSION */ + EXTERNAL = 482, /* EXTERNAL */ + EXTRACT = 483, /* EXTRACT */ + FALSE_P = 484, /* FALSE_P */ + FAMILY = 485, /* FAMILY */ + FETCH = 486, /* FETCH */ + FILTER = 487, /* FILTER */ + FINALIZE = 488, /* FINALIZE */ + FIRST_P = 489, /* FIRST_P */ + FLOAT_P = 490, /* FLOAT_P */ + FOLLOWING = 491, /* FOLLOWING */ + FOR = 492, /* FOR */ + FORCE = 493, /* FORCE */ + FOREIGN = 494, /* FOREIGN */ + FORWARD = 495, /* FORWARD */ + FREEZE = 496, /* FREEZE */ + FROM = 497, /* FROM */ + FULL = 498, /* FULL */ + FUNCTION = 499, /* FUNCTION */ + FUNCTIONS = 500, /* FUNCTIONS */ + GENERATED = 501, /* GENERATED */ + GLOBAL = 502, /* GLOBAL */ + GRANT = 503, /* GRANT */ + GRANTED = 504, /* GRANTED */ + GREATEST = 505, /* GREATEST */ + GROUP_P = 506, /* GROUP_P */ + GROUPING = 507, /* GROUPING */ + GROUPS = 508, /* GROUPS */ + HANDLER = 509, /* HANDLER */ + HAVING = 510, /* HAVING */ + HEADER_P = 511, /* HEADER_P */ + HOLD = 512, /* HOLD */ + HOUR_P = 513, /* HOUR_P */ + IDENTITY_P = 514, /* IDENTITY_P */ + IF_P = 515, /* IF_P */ + ILIKE = 516, /* ILIKE */ + IMMEDIATE = 517, /* IMMEDIATE */ + IMMUTABLE = 518, /* IMMUTABLE */ + IMPLICIT_P = 519, /* IMPLICIT_P */ + IMPORT_P = 520, /* IMPORT_P */ + IN_P = 521, /* IN_P */ + INCLUDE = 522, /* INCLUDE */ + INCLUDING = 523, /* INCLUDING */ + INCREMENT = 524, /* INCREMENT */ + INDEX = 525, /* INDEX */ + INDEXES = 526, /* INDEXES */ + INHERIT = 527, /* INHERIT */ + INHERITS = 528, /* INHERITS */ + INITIALLY = 529, /* INITIALLY */ + INLINE_P = 530, /* INLINE_P */ + INNER_P = 531, /* INNER_P */ + INOUT = 532, /* INOUT */ + INPUT_P = 533, /* INPUT_P */ + INSENSITIVE = 534, /* INSENSITIVE */ + INSERT = 535, /* INSERT */ + INSTEAD = 536, /* INSTEAD */ + INT_P = 537, /* INT_P */ + INTEGER = 538, /* INTEGER */ + INTERSECT = 539, /* INTERSECT */ + INTERVAL = 540, /* INTERVAL */ + INTO = 541, /* INTO */ + INVOKER = 542, /* INVOKER */ + IS = 543, /* IS */ + ISNULL = 544, /* ISNULL */ + ISOLATION = 545, /* ISOLATION */ + JOIN = 546, /* JOIN */ + KEY = 547, /* KEY */ + LABEL = 548, /* LABEL */ + LANGUAGE = 549, /* LANGUAGE */ + LARGE_P = 550, /* LARGE_P */ + LAST_P = 551, /* LAST_P */ + LATERAL_P = 552, /* LATERAL_P */ + LEADING = 553, /* LEADING */ + LEAKPROOF = 554, /* LEAKPROOF */ + LEAST = 555, /* LEAST */ + LEFT = 556, /* LEFT */ + LEVEL = 557, /* LEVEL */ + LIKE = 558, /* LIKE */ + LIMIT = 559, /* LIMIT */ + LISTEN = 560, /* LISTEN */ + LOAD = 561, /* LOAD */ + LOCAL = 562, /* LOCAL */ + LOCALTIME = 563, /* LOCALTIME */ + LOCALTIMESTAMP = 564, /* LOCALTIMESTAMP */ + LOCATION = 565, /* LOCATION */ + LOCK_P = 566, /* LOCK_P */ + LOCKED = 567, /* LOCKED */ + LOGGED = 568, /* LOGGED */ + MAPPING = 569, /* MAPPING */ + MATCH = 570, /* MATCH */ + MATERIALIZED = 571, /* MATERIALIZED */ + MAXVALUE = 572, /* MAXVALUE */ + METHOD = 573, /* METHOD */ + MINUTE_P = 574, /* MINUTE_P */ + MINVALUE = 575, /* MINVALUE */ + MODE = 576, /* MODE */ + MONTH_P = 577, /* MONTH_P */ + MOVE = 578, /* MOVE */ + NAME_P = 579, /* NAME_P */ + NAMES = 580, /* NAMES */ + NATIONAL = 581, /* NATIONAL */ + NATURAL = 582, /* NATURAL */ + NCHAR = 583, /* NCHAR */ + NEW = 584, /* NEW */ + NEXT = 585, /* NEXT */ + NFC = 586, /* NFC */ + NFD = 587, /* NFD */ + NFKC = 588, /* NFKC */ + NFKD = 589, /* NFKD */ + NO = 590, /* NO */ + NONE = 591, /* NONE */ + NORMALIZE = 592, /* NORMALIZE */ + NORMALIZED = 593, /* NORMALIZED */ + NOT = 594, /* NOT */ + NOTHING = 595, /* NOTHING */ + NOTIFY = 596, /* NOTIFY */ + NOTNULL = 597, /* NOTNULL */ + NOWAIT = 598, /* NOWAIT */ + NULL_P = 599, /* NULL_P */ + NULLIF = 600, /* NULLIF */ + NULLS_P = 601, /* NULLS_P */ + NUMERIC = 602, /* NUMERIC */ + OBJECT_P = 603, /* OBJECT_P */ + OF = 604, /* OF */ + OFF = 605, /* OFF */ + OFFSET = 606, /* OFFSET */ + OIDS = 607, /* OIDS */ + OLD = 608, /* OLD */ + ON = 609, /* ON */ + ONLY = 610, /* ONLY */ + OPERATOR = 611, /* OPERATOR */ + OPTION = 612, /* OPTION */ + OPTIONS = 613, /* OPTIONS */ + OR = 614, /* OR */ + ORDER = 615, /* ORDER */ + ORDINALITY = 616, /* ORDINALITY */ + OTHERS = 617, /* OTHERS */ + OUT_P = 618, /* OUT_P */ + OUTER_P = 619, /* OUTER_P */ + OVER = 620, /* OVER */ + OVERLAPS = 621, /* OVERLAPS */ + OVERLAY = 622, /* OVERLAY */ + OVERRIDING = 623, /* OVERRIDING */ + OWNED = 624, /* OWNED */ + OWNER = 625, /* OWNER */ + PARALLEL = 626, /* PARALLEL */ + PARSER = 627, /* PARSER */ + PARTIAL = 628, /* PARTIAL */ + PARTITION = 629, /* PARTITION */ + PASSING = 630, /* PASSING */ + PASSWORD = 631, /* PASSWORD */ + PLACING = 632, /* PLACING */ + PLANS = 633, /* PLANS */ + POLICY = 634, /* POLICY */ + POSITION = 635, /* POSITION */ + PRECEDING = 636, /* PRECEDING */ + PRECISION = 637, /* PRECISION */ + PRESERVE = 638, /* PRESERVE */ + PREPARE = 639, /* PREPARE */ + PREPARED = 640, /* PREPARED */ + PRIMARY = 641, /* PRIMARY */ + PRIOR = 642, /* PRIOR */ + PRIVILEGES = 643, /* PRIVILEGES */ + PROCEDURAL = 644, /* PROCEDURAL */ + PROCEDURE = 645, /* PROCEDURE */ + PROCEDURES = 646, /* PROCEDURES */ + PROGRAM = 647, /* PROGRAM */ + PUBLICATION = 648, /* PUBLICATION */ + QUOTE = 649, /* QUOTE */ + RANGE = 650, /* RANGE */ + READ = 651, /* READ */ + REAL = 652, /* REAL */ + REASSIGN = 653, /* REASSIGN */ + RECHECK = 654, /* RECHECK */ + RECURSIVE = 655, /* RECURSIVE */ + REF = 656, /* REF */ + REFERENCES = 657, /* REFERENCES */ + REFERENCING = 658, /* REFERENCING */ + REFRESH = 659, /* REFRESH */ + REINDEX = 660, /* REINDEX */ + RELATIVE_P = 661, /* RELATIVE_P */ + RELEASE = 662, /* RELEASE */ + RENAME = 663, /* RENAME */ + REPEATABLE = 664, /* REPEATABLE */ + REPLACE = 665, /* REPLACE */ + REPLICA = 666, /* REPLICA */ + RESET = 667, /* RESET */ + RESTART = 668, /* RESTART */ + RESTRICT = 669, /* RESTRICT */ + RETURN = 670, /* RETURN */ + RETURNING = 671, /* RETURNING */ + RETURNS = 672, /* RETURNS */ + REVOKE = 673, /* REVOKE */ + RIGHT = 674, /* RIGHT */ + ROLE = 675, /* ROLE */ + ROLLBACK = 676, /* ROLLBACK */ + ROLLUP = 677, /* ROLLUP */ + ROUTINE = 678, /* ROUTINE */ + ROUTINES = 679, /* ROUTINES */ + ROW = 680, /* ROW */ + ROWS = 681, /* ROWS */ + RULE = 682, /* RULE */ + SAVEPOINT = 683, /* SAVEPOINT */ + SCHEMA = 684, /* SCHEMA */ + SCHEMAS = 685, /* SCHEMAS */ + SCROLL = 686, /* SCROLL */ + SEARCH = 687, /* SEARCH */ + SECOND_P = 688, /* SECOND_P */ + SECURITY = 689, /* SECURITY */ + SELECT = 690, /* SELECT */ + SEQUENCE = 691, /* SEQUENCE */ + SEQUENCES = 692, /* SEQUENCES */ + SERIALIZABLE = 693, /* SERIALIZABLE */ + SERVER = 694, /* SERVER */ + SESSION = 695, /* SESSION */ + SESSION_USER = 696, /* SESSION_USER */ + SET = 697, /* SET */ + SETS = 698, /* SETS */ + SETOF = 699, /* SETOF */ + SHARE = 700, /* SHARE */ + SHOW = 701, /* SHOW */ + SIMILAR = 702, /* SIMILAR */ + SIMPLE = 703, /* SIMPLE */ + SKIP = 704, /* SKIP */ + SMALLINT = 705, /* SMALLINT */ + SNAPSHOT = 706, /* SNAPSHOT */ + SOME = 707, /* SOME */ + SQL_P = 708, /* SQL_P */ + STABLE = 709, /* STABLE */ + STANDALONE_P = 710, /* STANDALONE_P */ + START = 711, /* START */ + STATEMENT = 712, /* STATEMENT */ + STATISTICS = 713, /* STATISTICS */ + STDIN = 714, /* STDIN */ + STDOUT = 715, /* STDOUT */ + STORAGE = 716, /* STORAGE */ + STORED = 717, /* STORED */ + STRICT_P = 718, /* STRICT_P */ + STRIP_P = 719, /* STRIP_P */ + SUBSCRIPTION = 720, /* SUBSCRIPTION */ + SUBSTRING = 721, /* SUBSTRING */ + SUPPORT = 722, /* SUPPORT */ + SYMMETRIC = 723, /* SYMMETRIC */ + SYSID = 724, /* SYSID */ + SYSTEM_P = 725, /* SYSTEM_P */ + TABLE = 726, /* TABLE */ + TABLES = 727, /* TABLES */ + TABLESAMPLE = 728, /* TABLESAMPLE */ + TABLESPACE = 729, /* TABLESPACE */ + TEMP = 730, /* TEMP */ + TEMPLATE = 731, /* TEMPLATE */ + TEMPORARY = 732, /* TEMPORARY */ + TEXT_P = 733, /* TEXT_P */ + THEN = 734, /* THEN */ + TIES = 735, /* TIES */ + TIME = 736, /* TIME */ + TIMESTAMP = 737, /* TIMESTAMP */ + TO = 738, /* TO */ + TRAILING = 739, /* TRAILING */ + TRANSACTION = 740, /* TRANSACTION */ + TRANSFORM = 741, /* TRANSFORM */ + TREAT = 742, /* TREAT */ + TRIGGER = 743, /* TRIGGER */ + TRIM = 744, /* TRIM */ + TRUE_P = 745, /* TRUE_P */ + TRUNCATE = 746, /* TRUNCATE */ + TRUSTED = 747, /* TRUSTED */ + TYPE_P = 748, /* TYPE_P */ + TYPES_P = 749, /* TYPES_P */ + UESCAPE = 750, /* UESCAPE */ + UNBOUNDED = 751, /* UNBOUNDED */ + UNCOMMITTED = 752, /* UNCOMMITTED */ + UNENCRYPTED = 753, /* UNENCRYPTED */ + UNION = 754, /* UNION */ + UNIQUE = 755, /* UNIQUE */ + UNKNOWN = 756, /* UNKNOWN */ + UNLISTEN = 757, /* UNLISTEN */ + UNLOGGED = 758, /* UNLOGGED */ + UNTIL = 759, /* UNTIL */ + UPDATE = 760, /* UPDATE */ + USER = 761, /* USER */ + USING = 762, /* USING */ + VACUUM = 763, /* VACUUM */ + VALID = 764, /* VALID */ + VALIDATE = 765, /* VALIDATE */ + VALIDATOR = 766, /* VALIDATOR */ + VALUE_P = 767, /* VALUE_P */ + VALUES = 768, /* VALUES */ + VARCHAR = 769, /* VARCHAR */ + VARIADIC = 770, /* VARIADIC */ + VARYING = 771, /* VARYING */ + VERBOSE = 772, /* VERBOSE */ + VERSION_P = 773, /* VERSION_P */ + VIEW = 774, /* VIEW */ + VIEWS = 775, /* VIEWS */ + VOLATILE = 776, /* VOLATILE */ + WHEN = 777, /* WHEN */ + WHERE = 778, /* WHERE */ + WHITESPACE_P = 779, /* WHITESPACE_P */ + WINDOW = 780, /* WINDOW */ + WITH = 781, /* WITH */ + WITHIN = 782, /* WITHIN */ + WITHOUT = 783, /* WITHOUT */ + WORK = 784, /* WORK */ + WRAPPER = 785, /* WRAPPER */ + WRITE = 786, /* WRITE */ + XML_P = 787, /* XML_P */ + XMLATTRIBUTES = 788, /* XMLATTRIBUTES */ + XMLCONCAT = 789, /* XMLCONCAT */ + XMLELEMENT = 790, /* XMLELEMENT */ + XMLEXISTS = 791, /* XMLEXISTS */ + XMLFOREST = 792, /* XMLFOREST */ + XMLNAMESPACES = 793, /* XMLNAMESPACES */ + XMLPARSE = 794, /* XMLPARSE */ + XMLPI = 795, /* XMLPI */ + XMLROOT = 796, /* XMLROOT */ + XMLSERIALIZE = 797, /* XMLSERIALIZE */ + XMLTABLE = 798, /* XMLTABLE */ + YEAR_P = 799, /* YEAR_P */ + YES_P = 800, /* YES_P */ + ZONE = 801, /* ZONE */ + NOT_LA = 802, /* NOT_LA */ + NULLS_LA = 803, /* NULLS_LA */ + WITH_LA = 804, /* WITH_LA */ + MODE_TYPE_NAME = 805, /* MODE_TYPE_NAME */ + MODE_PLPGSQL_EXPR = 806, /* MODE_PLPGSQL_EXPR */ + MODE_PLPGSQL_ASSIGN1 = 807, /* MODE_PLPGSQL_ASSIGN1 */ + MODE_PLPGSQL_ASSIGN2 = 808, /* MODE_PLPGSQL_ASSIGN2 */ + MODE_PLPGSQL_ASSIGN3 = 809, /* MODE_PLPGSQL_ASSIGN3 */ + UMINUS = 810 /* UMINUS */ + }; + typedef enum yytokentype yytoken_kind_t; +#endif + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +union YYSTYPE +{ +#line 612 "preproc.y" + + double dval; + char *str; + int ival; + struct when action; + struct index index; + int tagname; + struct this_type type; + enum ECPGttype type_enum; + enum ECPGdtype dtype_enum; + struct fetch_desc descriptor; + struct su_symbol struct_union; + struct prep prep; + struct exec exec; + struct describe describe; + +#line 636 "preproc.h" + +}; +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* Location type. */ +#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED +typedef struct YYLTYPE YYLTYPE; +struct YYLTYPE +{ + int first_line; + int first_column; + int last_line; + int last_column; +}; +# define YYLTYPE_IS_DECLARED 1 +# define YYLTYPE_IS_TRIVIAL 1 +#endif + + +extern YYSTYPE base_yylval; +extern YYLTYPE base_yylloc; +int base_yyparse (void); + +#endif /* !YY_BASE_YY_PREPROC_H_INCLUDED */ diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y new file mode 100644 index 0000000..458ae68 --- /dev/null +++ b/src/interfaces/ecpg/preproc/preproc.y @@ -0,0 +1,18828 @@ +/* header */ +/* src/interfaces/ecpg/preproc/ecpg.header */ + +/* Copyright comment */ +%{ +#include "postgres_fe.h" + +#include "preproc_extern.h" +#include "ecpg_config.h" +#include + +/* Location tracking support --- simpler than bison's default */ +#define YYLLOC_DEFAULT(Current, Rhs, N) \ + do { \ + if (N) \ + (Current) = (Rhs)[1]; \ + else \ + (Current) = (Rhs)[0]; \ + } while (0) + +/* + * The %name-prefix option below will make bison call base_yylex, but we + * really want it to call filtered_base_yylex (see parser.c). + */ +#define base_yylex filtered_base_yylex + +/* + * This is only here so the string gets into the POT. Bison uses it + * internally. + */ +#define bison_gettext_dummy gettext_noop("syntax error") + +/* + * Variables containing simple states. + */ +int struct_level = 0; +int braces_open; /* brace level counter */ +char *current_function; +int ecpg_internal_var = 0; +char *connection = NULL; +char *input_filename = NULL; + +static int FoundInto = 0; +static int initializer = 0; +static int pacounter = 1; +static char pacounter_buffer[sizeof(int) * CHAR_BIT * 10 / 3]; /* a rough guess at the size we need */ +static struct this_type actual_type[STRUCT_DEPTH]; +static char *actual_startline[STRUCT_DEPTH]; +static int varchar_counter = 1; +static int bytea_counter = 1; + +/* temporarily store struct members while creating the data structure */ +struct ECPGstruct_member *struct_member_list[STRUCT_DEPTH] = { NULL }; + +/* also store struct type so we can do a sizeof() later */ +static char *ECPGstruct_sizeof = NULL; + +/* for forward declarations we have to store some data as well */ +static char *forward_name = NULL; + +struct ECPGtype ecpg_no_indicator = {ECPGt_NO_INDICATOR, NULL, NULL, NULL, {NULL}, 0}; +struct variable no_indicator = {"no_indicator", &ecpg_no_indicator, 0, NULL}; + +static struct ECPGtype ecpg_query = {ECPGt_char_variable, NULL, NULL, NULL, {NULL}, 0}; + +static void vmmerror(int error_code, enum errortype type, const char *error, va_list ap) pg_attribute_printf(3, 0); + +static bool check_declared_list(const char*); + +/* + * Handle parsing errors and warnings + */ +static void +vmmerror(int error_code, enum errortype type, const char *error, va_list ap) +{ + /* localize the error message string */ + error = _(error); + + fprintf(stderr, "%s:%d: ", input_filename, base_yylineno); + + switch(type) + { + case ET_WARNING: + fprintf(stderr, _("WARNING: ")); + break; + case ET_ERROR: + fprintf(stderr, _("ERROR: ")); + break; + } + + vfprintf(stderr, error, ap); + + fprintf(stderr, "\n"); + + switch(type) + { + case ET_WARNING: + break; + case ET_ERROR: + ret_value = error_code; + break; + } +} + +void +mmerror(int error_code, enum errortype type, const char *error, ...) +{ + va_list ap; + + va_start(ap, error); + vmmerror(error_code, type, error, ap); + va_end(ap); +} + +void +mmfatal(int error_code, const char *error, ...) +{ + va_list ap; + + va_start(ap, error); + vmmerror(error_code, ET_ERROR, error, ap); + va_end(ap); + + if (base_yyin) + fclose(base_yyin); + if (base_yyout) + fclose(base_yyout); + + if (strcmp(output_filename, "-") != 0 && unlink(output_filename) != 0) + fprintf(stderr, _("could not remove output file \"%s\"\n"), output_filename); + exit(error_code); +} + +/* + * string concatenation + */ + +static char * +cat2_str(char *str1, char *str2) +{ + char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) + 2); + + strcpy(res_str, str1); + if (strlen(str1) != 0 && strlen(str2) != 0) + strcat(res_str, " "); + strcat(res_str, str2); + free(str1); + free(str2); + return res_str; +} + +static char * +cat_str(int count, ...) +{ + va_list args; + int i; + char *res_str; + + va_start(args, count); + + res_str = va_arg(args, char *); + + /* now add all other strings */ + for (i = 1; i < count; i++) + res_str = cat2_str(res_str, va_arg(args, char *)); + + va_end(args); + + return res_str; +} + +static char * +make2_str(char *str1, char *str2) +{ + char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) + 1); + + strcpy(res_str, str1); + strcat(res_str, str2); + free(str1); + free(str2); + return res_str; +} + +static char * +make3_str(char *str1, char *str2, char *str3) +{ + char * res_str = (char *)mm_alloc(strlen(str1) + strlen(str2) +strlen(str3) + 1); + + strcpy(res_str, str1); + strcat(res_str, str2); + strcat(res_str, str3); + free(str1); + free(str2); + free(str3); + return res_str; +} + +/* and the rest */ +static char * +make_name(void) +{ + return mm_strdup(base_yytext); +} + +static char * +create_questionmarks(char *name, bool array) +{ + struct variable *p = find_variable(name); + int count; + char *result = EMPTY; + + /* In case we have a struct, we have to print as many "?" as there are attributes in the struct + * An array is only allowed together with an element argument + * This is essentially only used for inserts, but using a struct as input parameter is an error anywhere else + * so we don't have to worry here. */ + + if (p->type->type == ECPGt_struct || (array && p->type->type == ECPGt_array && p->type->u.element->type == ECPGt_struct)) + { + struct ECPGstruct_member *m; + + if (p->type->type == ECPGt_struct) + m = p->type->u.members; + else + m = p->type->u.element->u.members; + + for (count = 0; m != NULL; m=m->next, count++); + } + else + count = 1; + + for (; count > 0; count --) + { + sprintf(pacounter_buffer, "$%d", pacounter++); + result = cat_str(3, result, mm_strdup(pacounter_buffer), mm_strdup(" , ")); + } + + /* removed the trailing " ," */ + + result[strlen(result)-3] = '\0'; + return result; +} + +static char * +adjust_outofscope_cursor_vars(struct cursor *cur) +{ + /* Informix accepts DECLARE with variables that are out of scope when OPEN is called. + * For instance you can DECLARE a cursor in one function, and OPEN/FETCH/CLOSE + * it in another functions. This is very useful for e.g. event-driver programming, + * but may also lead to dangerous programming. The limitation when this is allowed + * and doesn't cause problems have to be documented, like the allocated variables + * must not be realloc()'ed. + * + * We have to change the variables to our own struct and just store the pointer + * instead of the variable. Do it only for local variables, not for globals. + */ + + char *result = EMPTY; + int insert; + + for (insert = 1; insert >= 0; insert--) + { + struct arguments *list; + struct arguments *ptr; + struct arguments *newlist = NULL; + struct variable *newvar, *newind; + + list = (insert ? cur->argsinsert : cur->argsresult); + + for (ptr = list; ptr != NULL; ptr = ptr->next) + { + char var_text[20]; + char *original_var; + bool skip_set_var = false; + bool var_ptr = false; + + /* change variable name to "ECPGget_var()" */ + original_var = ptr->variable->name; + sprintf(var_text, "%d))", ecpg_internal_var); + + /* Don't emit ECPGset_var() calls for global variables */ + if (ptr->variable->brace_level == 0) + { + newvar = ptr->variable; + skip_set_var = true; + } + else if ((ptr->variable->type->type == ECPGt_char_variable) + && (strncmp(ptr->variable->name, "ECPGprepared_statement", strlen("ECPGprepared_statement")) == 0)) + { + newvar = ptr->variable; + skip_set_var = true; + } + else if ((ptr->variable->type->type != ECPGt_varchar + && ptr->variable->type->type != ECPGt_char + && ptr->variable->type->type != ECPGt_unsigned_char + && ptr->variable->type->type != ECPGt_string + && ptr->variable->type->type != ECPGt_bytea) + && atoi(ptr->variable->type->size) > 1) + { + newvar = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, + mm_strdup("1"), + ptr->variable->type->u.element->counter), + ptr->variable->type->size), + 0); + } + else if ((ptr->variable->type->type == ECPGt_varchar + || ptr->variable->type->type == ECPGt_char + || ptr->variable->type->type == ECPGt_unsigned_char + || ptr->variable->type->type == ECPGt_string + || ptr->variable->type->type == ECPGt_bytea) + && atoi(ptr->variable->type->size) > 1) + { + newvar = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->variable->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->variable->type->type, + ptr->variable->type->size, + ptr->variable->type->counter), + 0); + if (ptr->variable->type->type == ECPGt_varchar || + ptr->variable->type->type == ECPGt_bytea) + var_ptr = true; + } + else if (ptr->variable->type->type == ECPGt_struct + || ptr->variable->type->type == ECPGt_union) + { + newvar = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->variable->type->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->variable->type->u.members, + ptr->variable->type->type, + ptr->variable->type->type_name, + ptr->variable->type->struct_sizeof), + 0); + var_ptr = true; + } + else if (ptr->variable->type->type == ECPGt_array) + { + if (ptr->variable->type->u.element->type == ECPGt_struct + || ptr->variable->type->u.element->type == ECPGt_union) + { + newvar = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->variable->type->u.element->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->variable->type->u.element->u.members, + ptr->variable->type->u.element->type, + ptr->variable->type->u.element->type_name, + ptr->variable->type->u.element->struct_sizeof), + 0); + } + else + { + newvar = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, + ptr->variable->type->u.element->size, + ptr->variable->type->u.element->counter), + ptr->variable->type->size), + 0); + var_ptr = true; + } + } + else + { + newvar = new_variable(cat_str(4, mm_strdup("*("), + mm_strdup(ecpg_type_name(ptr->variable->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->variable->type->type, + ptr->variable->type->size, + ptr->variable->type->counter), + 0); + var_ptr = true; + } + + /* create call to "ECPGset_var(, , . )" */ + if (!skip_set_var) + { + sprintf(var_text, "%d, %s", ecpg_internal_var++, var_ptr ? "&(" : "("); + result = cat_str(5, result, mm_strdup("ECPGset_var("), + mm_strdup(var_text), mm_strdup(original_var), + mm_strdup("), __LINE__);\n")); + } + + /* now the indicator if there is one and it's not a global variable */ + if ((ptr->indicator->type->type == ECPGt_NO_INDICATOR) || (ptr->indicator->brace_level == 0)) + { + newind = ptr->indicator; + } + else + { + /* change variable name to "ECPGget_var()" */ + original_var = ptr->indicator->name; + sprintf(var_text, "%d))", ecpg_internal_var); + var_ptr = false; + + if (ptr->indicator->type->type == ECPGt_struct + || ptr->indicator->type->type == ECPGt_union) + { + newind = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->indicator->type->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->indicator->type->u.members, + ptr->indicator->type->type, + ptr->indicator->type->type_name, + ptr->indicator->type->struct_sizeof), + 0); + var_ptr = true; + } + else if (ptr->indicator->type->type == ECPGt_array) + { + if (ptr->indicator->type->u.element->type == ECPGt_struct + || ptr->indicator->type->u.element->type == ECPGt_union) + { + newind = new_variable(cat_str(5, mm_strdup("(*("), + mm_strdup(ptr->indicator->type->u.element->type_name), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text), + mm_strdup(")")), + ECPGmake_struct_type(ptr->indicator->type->u.element->u.members, + ptr->indicator->type->u.element->type, + ptr->indicator->type->u.element->type_name, + ptr->indicator->type->u.element->struct_sizeof), + 0); + } + else + { + newind = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->indicator->type->u.element->type)), + mm_strdup(" *)(ECPGget_var("), mm_strdup(var_text)), + ECPGmake_array_type(ECPGmake_simple_type(ptr->indicator->type->u.element->type, + ptr->indicator->type->u.element->size, + ptr->indicator->type->u.element->counter), + ptr->indicator->type->size), + 0); + var_ptr = true; + } + } + else if (atoi(ptr->indicator->type->size) > 1) + { + newind = new_variable(cat_str(4, mm_strdup("("), + mm_strdup(ecpg_type_name(ptr->indicator->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->indicator->type->type, + ptr->indicator->type->size, + ptr->variable->type->counter), + 0); + } + else + { + newind = new_variable(cat_str(4, mm_strdup("*("), + mm_strdup(ecpg_type_name(ptr->indicator->type->type)), + mm_strdup(" *)(ECPGget_var("), + mm_strdup(var_text)), + ECPGmake_simple_type(ptr->indicator->type->type, + ptr->indicator->type->size, + ptr->variable->type->counter), + 0); + var_ptr = true; + } + + /* create call to "ECPGset_var(, . )" */ + sprintf(var_text, "%d, %s", ecpg_internal_var++, var_ptr ? "&(" : "("); + result = cat_str(5, result, mm_strdup("ECPGset_var("), + mm_strdup(var_text), mm_strdup(original_var), + mm_strdup("), __LINE__);\n")); + } + + add_variable_to_tail(&newlist, newvar, newind); + } + + if (insert) + cur->argsinsert_oos = newlist; + else + cur->argsresult_oos = newlist; + } + + return result; +} + +/* This tests whether the cursor was declared and opened in the same function. */ +#define SAMEFUNC(cur) \ + ((cur->function == NULL) || \ + (cur->function != NULL && strcmp(cur->function, current_function) == 0)) + +static struct cursor * +add_additional_variables(char *name, bool insert) +{ + struct cursor *ptr; + struct arguments *p; + int (* strcmp_fn)(const char *, const char *) = ((name[0] == ':' || name[0] == '"') ? strcmp : pg_strcasecmp); + + for (ptr = cur; ptr != NULL; ptr=ptr->next) + { + if (strcmp_fn(ptr->name, name) == 0) + break; + } + + if (ptr == NULL) + { + mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" does not exist", name); + return NULL; + } + + if (insert) + { + /* add all those input variables that were given earlier + * note that we have to append here but have to keep the existing order */ + for (p = (SAMEFUNC(ptr) ? ptr->argsinsert : ptr->argsinsert_oos); p; p = p->next) + add_variable_to_tail(&argsinsert, p->variable, p->indicator); + } + + /* add all those output variables that were given earlier */ + for (p = (SAMEFUNC(ptr) ? ptr->argsresult : ptr->argsresult_oos); p; p = p->next) + add_variable_to_tail(&argsresult, p->variable, p->indicator); + + return ptr; +} + +static void +add_typedef(char *name, char *dimension, char *length, enum ECPGttype type_enum, + char *type_dimension, char *type_index, int initializer, int array) +{ + /* add entry to list */ + struct typedefs *ptr, *this; + + if ((type_enum == ECPGt_struct || + type_enum == ECPGt_union) && + initializer == 1) + mmerror(PARSE_ERROR, ET_ERROR, "initializer not allowed in type definition"); + else if (INFORMIX_MODE && strcmp(name, "string") == 0) + mmerror(PARSE_ERROR, ET_ERROR, "type name \"string\" is reserved in Informix mode"); + else + { + for (ptr = types; ptr != NULL; ptr = ptr->next) + { + if (strcmp(name, ptr->name) == 0) + /* re-definition is a bug */ + mmerror(PARSE_ERROR, ET_ERROR, "type \"%s\" is already defined", name); + } + adjust_array(type_enum, &dimension, &length, type_dimension, type_index, array, true); + + this = (struct typedefs *) mm_alloc(sizeof(struct typedefs)); + + /* initial definition */ + this->next = types; + this->name = name; + this->brace_level = braces_open; + this->type = (struct this_type *) mm_alloc(sizeof(struct this_type)); + this->type->type_enum = type_enum; + this->type->type_str = mm_strdup(name); + this->type->type_dimension = dimension; /* dimension of array */ + this->type->type_index = length; /* length of string */ + this->type->type_sizeof = ECPGstruct_sizeof; + this->struct_member_list = (type_enum == ECPGt_struct || type_enum == ECPGt_union) ? + ECPGstruct_member_dup(struct_member_list[struct_level]) : NULL; + + if (type_enum != ECPGt_varchar && + type_enum != ECPGt_bytea && + type_enum != ECPGt_char && + type_enum != ECPGt_unsigned_char && + type_enum != ECPGt_string && + atoi(this->type->type_index) >= 0) + mmerror(PARSE_ERROR, ET_ERROR, "multidimensional arrays for simple data types are not supported"); + + types = this; + } +} + +/* + * check an SQL identifier is declared or not. + * If it is already declared, the global variable + * connection will be changed to the related connection. + */ +static bool +check_declared_list(const char *name) +{ + struct declared_list *ptr = NULL; + for (ptr = g_declared_list; ptr != NULL; ptr = ptr -> next) + { + if (!ptr->connection) + continue; + if (strcmp(name, ptr -> name) == 0) + { + if (connection && strcmp(ptr->connection, connection) != 0) + mmerror(PARSE_ERROR, ET_WARNING, "connection %s is overwritten with %s by DECLARE statement %s", connection, ptr->connection, name); + connection = mm_strdup(ptr -> connection); + return true; + } + } + return false; +} +%} + +%expect 0 +%name-prefix="base_yy" +%locations + +%union { + double dval; + char *str; + int ival; + struct when action; + struct index index; + int tagname; + struct this_type type; + enum ECPGttype type_enum; + enum ECPGdtype dtype_enum; + struct fetch_desc descriptor; + struct su_symbol struct_union; + struct prep prep; + struct exec exec; + struct describe describe; +} +/* tokens */ +/* src/interfaces/ecpg/preproc/ecpg.tokens */ + +/* special embedded SQL tokens */ +%token SQL_ALLOCATE SQL_AUTOCOMMIT SQL_BOOL SQL_BREAK + SQL_CARDINALITY SQL_CONNECT + SQL_COUNT + SQL_DATETIME_INTERVAL_CODE + SQL_DATETIME_INTERVAL_PRECISION SQL_DESCRIBE + SQL_DESCRIPTOR SQL_DISCONNECT SQL_FOUND + SQL_FREE SQL_GET SQL_GO SQL_GOTO SQL_IDENTIFIED + SQL_INDICATOR SQL_KEY_MEMBER SQL_LENGTH + SQL_LONG SQL_NULLABLE SQL_OCTET_LENGTH + SQL_OPEN SQL_OUTPUT SQL_REFERENCE + SQL_RETURNED_LENGTH SQL_RETURNED_OCTET_LENGTH SQL_SCALE + SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQLERROR + SQL_SQLPRINT SQL_SQLWARNING SQL_START SQL_STOP + SQL_STRUCT SQL_UNSIGNED SQL_VAR SQL_WHENEVER + +/* C tokens */ +%token S_ADD S_AND S_ANYTHING S_AUTO S_CONST S_DEC S_DIV + S_DOTPOINT S_EQUAL S_EXTERN S_INC S_LSHIFT S_MEMPOINT + S_MEMBER S_MOD S_MUL S_NEQUAL S_OR S_REGISTER S_RSHIFT + S_STATIC S_SUB S_VOLATILE + S_TYPEDEF + +%token CSTRING CVARIABLE CPP_LINE IP +/* types */ +%type toplevel_stmt +%type stmt +%type CallStmt +%type CreateRoleStmt +%type opt_with +%type OptRoleList +%type AlterOptRoleList +%type AlterOptRoleElem +%type CreateOptRoleElem +%type CreateUserStmt +%type AlterRoleStmt +%type opt_in_database +%type AlterRoleSetStmt +%type DropRoleStmt +%type CreateGroupStmt +%type AlterGroupStmt +%type add_drop +%type CreateSchemaStmt +%type OptSchemaName +%type OptSchemaEltList +%type schema_stmt +%type VariableSetStmt +%type set_rest +%type generic_set +%type set_rest_more +%type var_name +%type var_list +%type var_value +%type iso_level +%type opt_boolean_or_string +%type zone_value +%type opt_encoding +%type NonReservedWord_or_Sconst +%type VariableResetStmt +%type reset_rest +%type generic_reset +%type SetResetClause +%type FunctionSetResetClause +%type VariableShowStmt +%type ConstraintsSetStmt +%type constraints_set_list +%type constraints_set_mode +%type CheckPointStmt +%type DiscardStmt +%type AlterTableStmt +%type alter_table_cmds +%type partition_cmd +%type index_partition_cmd +%type alter_table_cmd +%type alter_column_default +%type opt_drop_behavior +%type opt_collate_clause +%type alter_using +%type replica_identity +%type reloptions +%type opt_reloptions +%type reloption_list +%type reloption_elem +%type alter_identity_column_option_list +%type alter_identity_column_option +%type PartitionBoundSpec +%type hash_partbound_elem +%type hash_partbound +%type AlterCompositeTypeStmt +%type alter_type_cmds +%type alter_type_cmd +%type ClosePortalStmt +%type CopyStmt +%type copy_from +%type opt_program +%type copy_file_name +%type copy_options +%type copy_opt_list +%type copy_opt_item +%type opt_binary +%type copy_delimiter +%type opt_using +%type copy_generic_opt_list +%type copy_generic_opt_elem +%type copy_generic_opt_arg +%type copy_generic_opt_arg_list +%type copy_generic_opt_arg_list_item +%type CreateStmt +%type OptTemp +%type OptTableElementList +%type OptTypedTableElementList +%type TableElementList +%type TypedTableElementList +%type TableElement +%type TypedTableElement +%type columnDef +%type columnOptions +%type column_compression +%type opt_column_compression +%type ColQualList +%type ColConstraint +%type ColConstraintElem +%type generated_when +%type ConstraintAttr +%type TableLikeClause +%type TableLikeOptionList +%type TableLikeOption +%type TableConstraint +%type ConstraintElem +%type opt_no_inherit +%type opt_column_list +%type columnList +%type columnElem +%type opt_c_include +%type key_match +%type ExclusionConstraintList +%type ExclusionConstraintElem +%type OptWhereClause +%type key_actions +%type key_update +%type key_delete +%type key_action +%type OptInherit +%type OptPartitionSpec +%type PartitionSpec +%type part_params +%type part_elem +%type table_access_method_clause +%type OptWith +%type OnCommitOption +%type OptTableSpace +%type OptConsTableSpace +%type ExistingIndex +%type CreateStatsStmt +%type stats_params +%type stats_param +%type AlterStatsStmt +%type create_as_target +%type opt_with_data +%type CreateMatViewStmt +%type create_mv_target +%type OptNoLog +%type RefreshMatViewStmt +%type CreateSeqStmt +%type AlterSeqStmt +%type OptSeqOptList +%type OptParenthesizedSeqOptList +%type SeqOptList +%type SeqOptElem +%type opt_by +%type NumericOnly +%type NumericOnly_list +%type CreatePLangStmt +%type opt_trusted +%type handler_name +%type opt_inline_handler +%type validator_clause +%type opt_validator +%type opt_procedural +%type CreateTableSpaceStmt +%type OptTableSpaceOwner +%type DropTableSpaceStmt +%type CreateExtensionStmt +%type create_extension_opt_list +%type create_extension_opt_item +%type AlterExtensionStmt +%type alter_extension_opt_list +%type alter_extension_opt_item +%type AlterExtensionContentsStmt +%type CreateFdwStmt +%type fdw_option +%type fdw_options +%type opt_fdw_options +%type AlterFdwStmt +%type create_generic_options +%type generic_option_list +%type alter_generic_options +%type alter_generic_option_list +%type alter_generic_option_elem +%type generic_option_elem +%type generic_option_name +%type generic_option_arg +%type CreateForeignServerStmt +%type opt_type +%type foreign_server_version +%type opt_foreign_server_version +%type AlterForeignServerStmt +%type CreateForeignTableStmt +%type ImportForeignSchemaStmt +%type import_qualification_type +%type import_qualification +%type CreateUserMappingStmt +%type auth_ident +%type DropUserMappingStmt +%type AlterUserMappingStmt +%type CreatePolicyStmt +%type AlterPolicyStmt +%type RowSecurityOptionalExpr +%type RowSecurityOptionalWithCheck +%type RowSecurityDefaultToRole +%type RowSecurityOptionalToRole +%type RowSecurityDefaultPermissive +%type RowSecurityDefaultForCmd +%type row_security_cmd +%type CreateAmStmt +%type am_type +%type CreateTrigStmt +%type TriggerActionTime +%type TriggerEvents +%type TriggerOneEvent +%type TriggerReferencing +%type TriggerTransitions +%type TriggerTransition +%type TransitionOldOrNew +%type TransitionRowOrTable +%type TransitionRelName +%type TriggerForSpec +%type TriggerForOptEach +%type TriggerForType +%type TriggerWhen +%type FUNCTION_or_PROCEDURE +%type TriggerFuncArgs +%type TriggerFuncArg +%type OptConstrFromTable +%type ConstraintAttributeSpec +%type ConstraintAttributeElem +%type CreateEventTrigStmt +%type event_trigger_when_list +%type event_trigger_when_item +%type event_trigger_value_list +%type AlterEventTrigStmt +%type enable_trigger +%type CreateAssertionStmt +%type DefineStmt +%type definition +%type def_list +%type def_elem +%type def_arg +%type old_aggr_definition +%type old_aggr_list +%type old_aggr_elem +%type opt_enum_val_list +%type enum_val_list +%type AlterEnumStmt +%type opt_if_not_exists +%type CreateOpClassStmt +%type opclass_item_list +%type opclass_item +%type opt_default +%type opt_opfamily +%type opclass_purpose +%type opt_recheck +%type CreateOpFamilyStmt +%type AlterOpFamilyStmt +%type opclass_drop_list +%type opclass_drop +%type DropOpClassStmt +%type DropOpFamilyStmt +%type DropOwnedStmt +%type ReassignOwnedStmt +%type DropStmt +%type object_type_any_name +%type object_type_name +%type drop_type_name +%type object_type_name_on_any_name +%type any_name_list +%type any_name +%type attrs +%type type_name_list +%type TruncateStmt +%type opt_restart_seqs +%type CommentStmt +%type comment_text +%type SecLabelStmt +%type opt_provider +%type security_label +%type FetchStmt +%type fetch_args +%type from_in +%type opt_from_in +%type GrantStmt +%type RevokeStmt +%type privileges +%type privilege_list +%type privilege +%type privilege_target +%type grantee_list +%type grantee +%type opt_grant_grant_option +%type GrantRoleStmt +%type RevokeRoleStmt +%type opt_grant_admin_option +%type opt_granted_by +%type AlterDefaultPrivilegesStmt +%type DefACLOptionList +%type DefACLOption +%type DefACLAction +%type defacl_privilege_target +%type IndexStmt +%type opt_unique +%type opt_concurrently +%type opt_index_name +%type access_method_clause +%type index_params +%type index_elem_options +%type index_elem +%type opt_include +%type index_including_params +%type opt_collate +%type opt_class +%type opt_asc_desc +%type opt_nulls_order +%type CreateFunctionStmt +%type opt_or_replace +%type func_args +%type func_args_list +%type function_with_argtypes_list +%type function_with_argtypes +%type func_args_with_defaults +%type func_args_with_defaults_list +%type func_arg +%type arg_class +%type param_name +%type func_return +%type func_type +%type func_arg_with_default +%type aggr_arg +%type aggr_args +%type aggr_args_list +%type aggregate_with_argtypes +%type aggregate_with_argtypes_list +%type opt_createfunc_opt_list +%type createfunc_opt_list +%type common_func_opt_item +%type createfunc_opt_item +%type func_as +%type ReturnStmt +%type opt_routine_body +%type routine_body_stmt_list +%type routine_body_stmt +%type transform_type_list +%type opt_definition +%type table_func_column +%type table_func_column_list +%type AlterFunctionStmt +%type alterfunc_opt_list +%type opt_restrict +%type RemoveFuncStmt +%type RemoveAggrStmt +%type RemoveOperStmt +%type oper_argtypes +%type any_operator +%type operator_with_argtypes_list +%type operator_with_argtypes +%type DoStmt +%type dostmt_opt_list +%type dostmt_opt_item +%type CreateCastStmt +%type cast_context +%type DropCastStmt +%type opt_if_exists +%type CreateTransformStmt +%type transform_element_list +%type DropTransformStmt +%type ReindexStmt +%type reindex_target_type +%type reindex_target_multitable +%type AlterTblSpcStmt +%type RenameStmt +%type opt_column +%type opt_set_data +%type AlterObjectDependsStmt +%type opt_no +%type AlterObjectSchemaStmt +%type AlterOperatorStmt +%type operator_def_list +%type operator_def_elem +%type operator_def_arg +%type AlterTypeStmt +%type AlterOwnerStmt +%type CreatePublicationStmt +%type opt_publication_for_tables +%type publication_for_tables +%type AlterPublicationStmt +%type CreateSubscriptionStmt +%type AlterSubscriptionStmt +%type DropSubscriptionStmt +%type RuleStmt +%type RuleActionList +%type RuleActionMulti +%type RuleActionStmt +%type RuleActionStmtOrEmpty +%type event +%type opt_instead +%type NotifyStmt +%type notify_payload +%type ListenStmt +%type UnlistenStmt +%type TransactionStmt +%type TransactionStmtLegacy +%type opt_transaction +%type transaction_mode_item +%type transaction_mode_list +%type transaction_mode_list_or_empty +%type opt_transaction_chain +%type ViewStmt +%type opt_check_option +%type LoadStmt +%type CreatedbStmt +%type createdb_opt_list +%type createdb_opt_items +%type createdb_opt_item +%type createdb_opt_name +%type opt_equal +%type AlterDatabaseStmt +%type AlterDatabaseSetStmt +%type DropdbStmt +%type drop_option_list +%type drop_option +%type AlterCollationStmt +%type AlterSystemStmt +%type CreateDomainStmt +%type AlterDomainStmt +%type opt_as +%type AlterTSDictionaryStmt +%type AlterTSConfigurationStmt +%type any_with +%type CreateConversionStmt +%type ClusterStmt +%type cluster_index_specification +%type VacuumStmt +%type AnalyzeStmt +%type utility_option_list +%type analyze_keyword +%type utility_option_elem +%type utility_option_name +%type utility_option_arg +%type opt_analyze +%type opt_verbose +%type opt_full +%type opt_freeze +%type opt_name_list +%type vacuum_relation +%type vacuum_relation_list +%type opt_vacuum_relation_list +%type ExplainStmt +%type ExplainableStmt +%type PrepareStmt +%type prep_type_clause +%type PreparableStmt +%type ExecuteStmt +%type execute_param_clause +%type InsertStmt +%type insert_target +%type insert_rest +%type override_kind +%type insert_column_list +%type insert_column_item +%type opt_on_conflict +%type opt_conf_expr +%type returning_clause +%type DeleteStmt +%type using_clause +%type LockStmt +%type opt_lock +%type lock_type +%type opt_nowait +%type opt_nowait_or_skip +%type UpdateStmt +%type set_clause_list +%type set_clause +%type set_target +%type set_target_list +%type DeclareCursorStmt +%type cursor_name +%type cursor_options +%type opt_hold +%type SelectStmt +%type select_with_parens +%type select_no_parens +%type select_clause +%type simple_select +%type with_clause +%type cte_list +%type common_table_expr +%type opt_materialized +%type opt_search_clause +%type opt_cycle_clause +%type opt_with_clause +%type into_clause +%type OptTempTableName +%type opt_table +%type set_quantifier +%type distinct_clause +%type opt_all_clause +%type opt_sort_clause +%type sort_clause +%type sortby_list +%type sortby +%type select_limit +%type opt_select_limit +%type limit_clause +%type offset_clause +%type select_limit_value +%type select_offset_value +%type select_fetch_first_value +%type I_or_F_const +%type row_or_rows +%type first_or_next +%type group_clause +%type group_by_list +%type group_by_item +%type empty_grouping_set +%type rollup_clause +%type cube_clause +%type grouping_sets_clause +%type having_clause +%type for_locking_clause +%type opt_for_locking_clause +%type for_locking_items +%type for_locking_item +%type for_locking_strength +%type locked_rels_list +%type values_clause +%type from_clause +%type from_list +%type table_ref +%type joined_table +%type alias_clause +%type opt_alias_clause +%type opt_alias_clause_for_join_using +%type func_alias_clause +%type join_type +%type opt_outer +%type join_qual +%type relation_expr +%type relation_expr_list +%type relation_expr_opt_alias +%type tablesample_clause +%type opt_repeatable_clause +%type func_table +%type rowsfrom_item +%type rowsfrom_list +%type opt_col_def_list +%type opt_ordinality +%type where_clause +%type where_or_current_clause +%type OptTableFuncElementList +%type TableFuncElementList +%type TableFuncElement +%type xmltable +%type xmltable_column_list +%type xmltable_column_el +%type xmltable_column_option_list +%type xmltable_column_option_el +%type xml_namespace_list +%type xml_namespace_el +%type Typename +%type opt_array_bounds +%type SimpleTypename +%type ConstTypename +%type GenericType +%type opt_type_modifiers +%type Numeric +%type opt_float +%type Bit +%type ConstBit +%type BitWithLength +%type BitWithoutLength +%type Character +%type ConstCharacter +%type CharacterWithLength +%type CharacterWithoutLength +%type character +%type opt_varying +%type ConstDatetime +%type ConstInterval +%type opt_timezone +%type opt_interval +%type interval_second +%type a_expr +%type b_expr +%type c_expr +%type func_application +%type func_expr +%type func_expr_windowless +%type func_expr_common_subexpr +%type xml_root_version +%type opt_xml_root_standalone +%type xml_attributes +%type xml_attribute_list +%type xml_attribute_el +%type document_or_content +%type xml_whitespace_option +%type xmlexists_argument +%type xml_passing_mech +%type within_group_clause +%type filter_clause +%type window_clause +%type window_definition_list +%type window_definition +%type over_clause +%type window_specification +%type opt_existing_window_name +%type opt_partition_clause +%type opt_frame_clause +%type frame_extent +%type frame_bound +%type opt_window_exclusion_clause +%type row +%type explicit_row +%type implicit_row +%type sub_type +%type all_Op +%type MathOp +%type qual_Op +%type qual_all_Op +%type subquery_Op +%type expr_list +%type func_arg_list +%type func_arg_expr +%type func_arg_list_opt +%type type_list +%type array_expr +%type array_expr_list +%type extract_list +%type extract_arg +%type unicode_normal_form +%type overlay_list +%type position_list +%type substr_list +%type trim_list +%type in_expr +%type case_expr +%type when_clause_list +%type when_clause +%type case_default +%type case_arg +%type columnref +%type indirection_el +%type opt_slice_bound +%type indirection +%type opt_indirection +%type opt_asymmetric +%type opt_target_list +%type target_list +%type target_el +%type qualified_name_list +%type qualified_name +%type name_list +%type name +%type attr_name +%type file_name +%type func_name +%type AexprConst +%type Iconst +%type SignedIconst +%type RoleId +%type RoleSpec +%type role_list +%type NonReservedWord +%type BareColLabel +%type unreserved_keyword +%type col_name_keyword +%type type_func_name_keyword +%type reserved_keyword +%type bare_label_keyword +/* ecpgtype */ +/* src/interfaces/ecpg/preproc/ecpg.type */ +%type ECPGAllocateDescr +%type ECPGCKeywords +%type ECPGColId +%type ECPGColLabel +%type ECPGColLabelCommon +%type ECPGConnect +%type ECPGCursorStmt +%type ECPGDeallocateDescr +%type ECPGDeclaration +%type ECPGDeclare +%type ECPGDeclareStmt +%type ECPGDisconnect +%type ECPGExecuteImmediateStmt +%type ECPGFree +%type ECPGGetDescHeaderItem +%type ECPGGetDescItem +%type ECPGGetDescriptorHeader +%type ECPGKeywords +%type ECPGKeywords_rest +%type ECPGKeywords_vanames +%type ECPGOpen +%type ECPGSetAutocommit +%type ECPGSetConnection +%type ECPGSetDescHeaderItem +%type ECPGSetDescItem +%type ECPGSetDescriptorHeader +%type ECPGTypeName +%type ECPGTypedef +%type ECPGVar +%type ECPGVarDeclaration +%type ECPGWhenever +%type ECPGunreserved_interval +%type UsingConst +%type UsingValue +%type all_unreserved_keyword +%type c_anything +%type c_args +%type c_list +%type c_stuff +%type c_stuff_item +%type c_term +%type c_thing +%type char_variable +%type char_civar +%type civar +%type civarind +%type ColId +%type ColLabel +%type connect_options +%type connection_object +%type connection_target +%type coutputvariable +%type cvariable +%type db_prefix +%type CreateAsStmt +%type DeallocateStmt +%type dis_name +%type ecpg_bconst +%type ecpg_fconst +%type ecpg_ident +%type ecpg_interval +%type ecpg_into +%type ecpg_fetch_into +%type ecpg_param +%type ecpg_sconst +%type ecpg_using +%type ecpg_xconst +%type enum_definition +%type enum_type +%type execstring +%type execute_rest +%type indicator +%type into_descriptor +%type into_sqlda +%type Iresult +%type on_off +%type opt_bit_field +%type opt_connection_name +%type opt_database_name +%type opt_ecpg_into +%type opt_ecpg_fetch_into +%type opt_ecpg_using +%type opt_initializer +%type opt_options +%type opt_output +%type opt_pointer +%type opt_port +%type opt_reference +%type opt_scale +%type opt_server +%type opt_user +%type opt_opt_value +%type ora_user +%type precision +%type prepared_name +%type quoted_ident_stringvar +%type s_struct_union +%type server +%type server_name +%type single_vt_declaration +%type storage_clause +%type storage_declaration +%type storage_modifier +%type struct_union_type +%type struct_union_type_with_symbol +%type symbol +%type type_declaration +%type type_function_name +%type user_name +%type using_descriptor +%type var_declaration +%type var_type_declarations +%type variable +%type variable_declarations +%type variable_list +%type vt_declarations + +%type Op +%type IntConstVar +%type AllConstVar +%type CSTRING +%type CPP_LINE +%type CVARIABLE +%type BCONST +%type SCONST +%type XCONST +%type IDENT + +%type s_struct_union_symbol + +%type ECPGGetDescriptor +%type ECPGSetDescriptor + +%type simple_type +%type signed_type +%type unsigned_type + +%type descriptor_item +%type desc_header_item + +%type var_type + +%type action + +%type ECPGDescribe +/* orig_tokens */ + %token IDENT UIDENT FCONST SCONST USCONST BCONST XCONST Op + %token ICONST PARAM + %token TYPECAST DOT_DOT COLON_EQUALS EQUALS_GREATER + %token LESS_EQUALS GREATER_EQUALS NOT_EQUALS + + + + + + + + + + %token ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER + AGGREGATE ALL ALSO ALTER ALWAYS ANALYSE ANALYZE AND ANY ARRAY AS ASC + ASENSITIVE ASSERTION ASSIGNMENT ASYMMETRIC ATOMIC AT ATTACH ATTRIBUTE AUTHORIZATION + + BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT + BOOLEAN_P BOTH BREADTH BY + + CACHE CALL CALLED CASCADE CASCADED CASE CAST CATALOG_P CHAIN CHAR_P + CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE + CLUSTER COALESCE COLLATE COLLATION COLUMN COLUMNS COMMENT COMMENTS COMMIT + COMMITTED COMPRESSION CONCURRENTLY CONFIGURATION CONFLICT + CONNECTION CONSTRAINT CONSTRAINTS CONTENT_P CONTINUE_P CONVERSION_P COPY + COST CREATE CROSS CSV CUBE CURRENT_P + CURRENT_CATALOG CURRENT_DATE CURRENT_ROLE CURRENT_SCHEMA + CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE + + DATA_P DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS + DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DEPENDS DEPTH DESC + DETACH DICTIONARY DISABLE_P DISCARD DISTINCT DO DOCUMENT_P DOMAIN_P + DOUBLE_P DROP + + EACH ELSE ENABLE_P ENCODING ENCRYPTED END_P ENUM_P ESCAPE EVENT EXCEPT + EXCLUDE EXCLUDING EXCLUSIVE EXECUTE EXISTS EXPLAIN EXPRESSION + EXTENSION EXTERNAL EXTRACT + + FALSE_P FAMILY FETCH FILTER FINALIZE FIRST_P FLOAT_P FOLLOWING FOR + FORCE FOREIGN FORWARD FREEZE FROM FULL FUNCTION FUNCTIONS + + GENERATED GLOBAL GRANT GRANTED GREATEST GROUP_P GROUPING GROUPS + + HANDLER HAVING HEADER_P HOLD HOUR_P + + IDENTITY_P IF_P ILIKE IMMEDIATE IMMUTABLE IMPLICIT_P IMPORT_P IN_P INCLUDE + INCLUDING INCREMENT INDEX INDEXES INHERIT INHERITS INITIALLY INLINE_P + INNER_P INOUT INPUT_P INSENSITIVE INSERT INSTEAD INT_P INTEGER + INTERSECT INTERVAL INTO INVOKER IS ISNULL ISOLATION + + JOIN + + KEY + + LABEL LANGUAGE LARGE_P LAST_P LATERAL_P + LEADING LEAKPROOF LEAST LEFT LEVEL LIKE LIMIT LISTEN LOAD LOCAL + LOCALTIME LOCALTIMESTAMP LOCATION LOCK_P LOCKED LOGGED + + MAPPING MATCH MATERIALIZED MAXVALUE METHOD MINUTE_P MINVALUE MODE MONTH_P MOVE + + NAME_P NAMES NATIONAL NATURAL NCHAR NEW NEXT NFC NFD NFKC NFKD NO NONE + NORMALIZE NORMALIZED + NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF + NULLS_P NUMERIC + + OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OPTIONS OR + ORDER ORDINALITY OTHERS OUT_P OUTER_P + OVER OVERLAPS OVERLAY OVERRIDING OWNED OWNER + + PARALLEL PARSER PARTIAL PARTITION PASSING PASSWORD PLACING PLANS POLICY + POSITION PRECEDING PRECISION PRESERVE PREPARE PREPARED PRIMARY + PRIOR PRIVILEGES PROCEDURAL PROCEDURE PROCEDURES PROGRAM PUBLICATION + + QUOTE + + RANGE READ REAL REASSIGN RECHECK RECURSIVE REF REFERENCES REFERENCING + REFRESH REINDEX RELATIVE_P RELEASE RENAME REPEATABLE REPLACE REPLICA + RESET RESTART RESTRICT RETURN RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP + ROUTINE ROUTINES ROW ROWS RULE + + SAVEPOINT SCHEMA SCHEMAS SCROLL SEARCH SECOND_P SECURITY SELECT SEQUENCE SEQUENCES + SERIALIZABLE SERVER SESSION SESSION_USER SET SETS SETOF SHARE SHOW + SIMILAR SIMPLE SKIP SMALLINT SNAPSHOT SOME SQL_P STABLE STANDALONE_P + START STATEMENT STATISTICS STDIN STDOUT STORAGE STORED STRICT_P STRIP_P + SUBSCRIPTION SUBSTRING SUPPORT SYMMETRIC SYSID SYSTEM_P + + TABLE TABLES TABLESAMPLE TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN + TIES TIME TIMESTAMP TO TRAILING TRANSACTION TRANSFORM + TREAT TRIGGER TRIM TRUE_P + TRUNCATE TRUSTED TYPE_P TYPES_P + + UESCAPE UNBOUNDED UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN + UNLISTEN UNLOGGED UNTIL UPDATE USER USING + + VACUUM VALID VALIDATE VALIDATOR VALUE_P VALUES VARCHAR VARIADIC VARYING + VERBOSE VERSION_P VIEW VIEWS VOLATILE + + WHEN WHERE WHITESPACE_P WINDOW WITH WITHIN WITHOUT WORK WRAPPER WRITE + + XML_P XMLATTRIBUTES XMLCONCAT XMLELEMENT XMLEXISTS XMLFOREST XMLNAMESPACES + XMLPARSE XMLPI XMLROOT XMLSERIALIZE XMLTABLE + + YEAR_P YES_P + + ZONE + + + + + + + + + + + + %token NOT_LA NULLS_LA WITH_LA + + + + + + + + + %token MODE_TYPE_NAME + %token MODE_PLPGSQL_EXPR + %token MODE_PLPGSQL_ASSIGN1 + %token MODE_PLPGSQL_ASSIGN2 + %token MODE_PLPGSQL_ASSIGN3 + + + + %nonassoc SET + %left UNION EXCEPT + %left INTERSECT + %left OR + %left AND + %right NOT + %nonassoc IS ISNULL NOTNULL + %nonassoc '<' '>' '=' LESS_EQUALS GREATER_EQUALS NOT_EQUALS + %nonassoc BETWEEN IN_P LIKE ILIKE SIMILAR NOT_LA + %nonassoc ESCAPE + + + + + + + + + + + + + + + + + + + + + + + + + + %nonassoc UNBOUNDED + %nonassoc IDENT +%nonassoc CSTRING PARTITION RANGE ROWS GROUPS PRECEDING FOLLOWING CUBE ROLLUP + %left Op OPERATOR + %left '+' '-' + %left '*' '/' '%' + %left '^' + + %left AT + %left COLLATE + %right UMINUS + %left '[' ']' + %left '(' ')' + %left TYPECAST + %left '.' + + + + + + + + %left JOIN CROSS LEFT FULL RIGHT INNER_P NATURAL + +%% +prog: statements; +/* rules */ + toplevel_stmt: + stmt + { + $$ = $1; +} +| TransactionStmtLegacy + { + fprintf(base_yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1); + whenever_action(2); + free($1); + } +; + + + stmt: + AlterEventTrigStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterCollationStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterDatabaseStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterDatabaseSetStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterDefaultPrivilegesStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterDomainStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterEnumStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterExtensionStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterExtensionContentsStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterFdwStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterForeignServerStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterFunctionStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterGroupStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterObjectDependsStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterObjectSchemaStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterOwnerStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterOperatorStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterTypeStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterPolicyStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterSeqStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterSystemStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterTableStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterTblSpcStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterCompositeTypeStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterPublicationStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterRoleSetStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterRoleStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterSubscriptionStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterStatsStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterTSConfigurationStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterTSDictionaryStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterUserMappingStmt + { output_statement($1, 0, ECPGst_normal); } +| AnalyzeStmt + { output_statement($1, 0, ECPGst_normal); } +| CallStmt + { output_statement($1, 0, ECPGst_normal); } +| CheckPointStmt + { output_statement($1, 0, ECPGst_normal); } +| ClosePortalStmt + { + if (INFORMIX_MODE) + { + if (pg_strcasecmp($1+strlen("close "), "database") == 0) + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in CLOSE DATABASE statement"); + + fprintf(base_yyout, "{ ECPGdisconnect(__LINE__, \"CURRENT\");"); + whenever_action(2); + free($1); + break; + } + } + + output_statement($1, 0, ECPGst_normal); + } +| ClusterStmt + { output_statement($1, 0, ECPGst_normal); } +| CommentStmt + { output_statement($1, 0, ECPGst_normal); } +| ConstraintsSetStmt + { output_statement($1, 0, ECPGst_normal); } +| CopyStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateAmStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateAsStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateAssertionStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateCastStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateConversionStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateDomainStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateExtensionStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateFdwStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateForeignServerStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateForeignTableStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateFunctionStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateGroupStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateMatViewStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateOpClassStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateOpFamilyStmt + { output_statement($1, 0, ECPGst_normal); } +| CreatePublicationStmt + { output_statement($1, 0, ECPGst_normal); } +| AlterOpFamilyStmt + { output_statement($1, 0, ECPGst_normal); } +| CreatePolicyStmt + { output_statement($1, 0, ECPGst_normal); } +| CreatePLangStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateSchemaStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateSeqStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateSubscriptionStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateStatsStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateTableSpaceStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateTransformStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateTrigStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateEventTrigStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateRoleStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateUserStmt + { output_statement($1, 0, ECPGst_normal); } +| CreateUserMappingStmt + { output_statement($1, 0, ECPGst_normal); } +| CreatedbStmt + { output_statement($1, 0, ECPGst_normal); } +| DeallocateStmt + { + output_deallocate_prepare_statement($1); + } +| DeclareCursorStmt + { output_simple_statement($1, (strncmp($1, "ECPGset_var", strlen("ECPGset_var")) == 0) ? 4 : 0); } +| DefineStmt + { output_statement($1, 0, ECPGst_normal); } +| DeleteStmt + { output_statement($1, 1, ECPGst_prepnormal); } +| DiscardStmt + { output_statement($1, 1, ECPGst_normal); } +| DoStmt + { output_statement($1, 0, ECPGst_normal); } +| DropCastStmt + { output_statement($1, 0, ECPGst_normal); } +| DropOpClassStmt + { output_statement($1, 0, ECPGst_normal); } +| DropOpFamilyStmt + { output_statement($1, 0, ECPGst_normal); } +| DropOwnedStmt + { output_statement($1, 0, ECPGst_normal); } +| DropStmt + { output_statement($1, 0, ECPGst_normal); } +| DropSubscriptionStmt + { output_statement($1, 0, ECPGst_normal); } +| DropTableSpaceStmt + { output_statement($1, 0, ECPGst_normal); } +| DropTransformStmt + { output_statement($1, 0, ECPGst_normal); } +| DropRoleStmt + { output_statement($1, 0, ECPGst_normal); } +| DropUserMappingStmt + { output_statement($1, 0, ECPGst_normal); } +| DropdbStmt + { output_statement($1, 0, ECPGst_normal); } +| ExecuteStmt + { + check_declared_list($1.name); + if ($1.type == NULL || strlen($1.type) == 0) + output_statement($1.name, 1, ECPGst_execute); + else + { + if ($1.name[0] != '"') + /* case of char_variable */ + add_variable_to_tail(&argsinsert, find_variable($1.name), &no_indicator); + else + { + /* case of ecpg_ident or CSTRING */ + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *str = mm_strdup($1.name + 1); + + /* It must be cut off double quotation because new_variable() double-quotes. */ + str[strlen(str) - 1] = '\0'; + sprintf(length, "%zu", strlen(str)); + add_variable_to_tail(&argsinsert, new_variable(str, ECPGmake_simple_type(ECPGt_const, length, 0), 0), &no_indicator); + } + output_statement(cat_str(3, mm_strdup("execute"), mm_strdup("$0"), $1.type), 0, ECPGst_exec_with_exprlist); + } + } +| ExplainStmt + { output_statement($1, 0, ECPGst_normal); } +| FetchStmt + { output_statement($1, 1, ECPGst_normal); } +| GrantStmt + { output_statement($1, 0, ECPGst_normal); } +| GrantRoleStmt + { output_statement($1, 0, ECPGst_normal); } +| ImportForeignSchemaStmt + { output_statement($1, 0, ECPGst_normal); } +| IndexStmt + { output_statement($1, 0, ECPGst_normal); } +| InsertStmt + { output_statement($1, 1, ECPGst_prepnormal); } +| ListenStmt + { output_statement($1, 0, ECPGst_normal); } +| RefreshMatViewStmt + { output_statement($1, 0, ECPGst_normal); } +| LoadStmt + { output_statement($1, 0, ECPGst_normal); } +| LockStmt + { output_statement($1, 0, ECPGst_normal); } +| NotifyStmt + { output_statement($1, 0, ECPGst_normal); } +| PrepareStmt + { + check_declared_list($1.name); + if ($1.type == NULL) + output_prepare_statement($1.name, $1.stmt); + else if (strlen($1.type) == 0) + { + char *stmt = cat_str(3, mm_strdup("\""), $1.stmt, mm_strdup("\"")); + output_prepare_statement($1.name, stmt); + } + else + { + if ($1.name[0] != '"') + /* case of char_variable */ + add_variable_to_tail(&argsinsert, find_variable($1.name), &no_indicator); + else + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *str = mm_strdup($1.name + 1); + + /* It must be cut off double quotation because new_variable() double-quotes. */ + str[strlen(str) - 1] = '\0'; + sprintf(length, "%zu", strlen(str)); + add_variable_to_tail(&argsinsert, new_variable(str, ECPGmake_simple_type(ECPGt_const, length, 0), 0), &no_indicator); + } + output_statement(cat_str(5, mm_strdup("prepare"), mm_strdup("$0"), $1.type, mm_strdup("as"), $1.stmt), 0, ECPGst_prepare); + } + } +| ReassignOwnedStmt + { output_statement($1, 0, ECPGst_normal); } +| ReindexStmt + { output_statement($1, 0, ECPGst_normal); } +| RemoveAggrStmt + { output_statement($1, 0, ECPGst_normal); } +| RemoveFuncStmt + { output_statement($1, 0, ECPGst_normal); } +| RemoveOperStmt + { output_statement($1, 0, ECPGst_normal); } +| RenameStmt + { output_statement($1, 0, ECPGst_normal); } +| RevokeStmt + { output_statement($1, 0, ECPGst_normal); } +| RevokeRoleStmt + { output_statement($1, 0, ECPGst_normal); } +| RuleStmt + { output_statement($1, 0, ECPGst_normal); } +| SecLabelStmt + { output_statement($1, 0, ECPGst_normal); } +| SelectStmt + { output_statement($1, 1, ECPGst_prepnormal); } +| TransactionStmt + { + fprintf(base_yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1); + whenever_action(2); + free($1); + } +| TruncateStmt + { output_statement($1, 0, ECPGst_normal); } +| UnlistenStmt + { output_statement($1, 0, ECPGst_normal); } +| UpdateStmt + { output_statement($1, 1, ECPGst_prepnormal); } +| VacuumStmt + { output_statement($1, 0, ECPGst_normal); } +| VariableResetStmt + { output_statement($1, 0, ECPGst_normal); } +| VariableSetStmt + { output_statement($1, 0, ECPGst_normal); } +| VariableShowStmt + { output_statement($1, 0, ECPGst_normal); } +| ViewStmt + { output_statement($1, 0, ECPGst_normal); } + | ECPGAllocateDescr + { + fprintf(base_yyout,"ECPGallocate_desc(__LINE__, %s);",$1); + whenever_action(0); + free($1); + } + | ECPGConnect + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in CONNECT statement"); + + fprintf(base_yyout, "{ ECPGconnect(__LINE__, %d, %s, %d); ", compat, $1, autocommit); + reset_variables(); + whenever_action(2); + free($1); + } + | ECPGDeclareStmt + { + output_simple_statement($1, 0); + } + | ECPGCursorStmt + { + output_simple_statement($1, (strncmp($1, "ECPGset_var", strlen("ECPGset_var")) == 0) ? 4 : 0); + } + | ECPGDeallocateDescr + { + fprintf(base_yyout,"ECPGdeallocate_desc(__LINE__, %s);",$1); + whenever_action(0); + free($1); + } + | ECPGDeclare + { + output_simple_statement($1, 0); + } + | ECPGDescribe + { + check_declared_list($1.stmt_name); + + fprintf(base_yyout, "{ ECPGdescribe(__LINE__, %d, %d, %s, %s,", compat, $1.input, connection ? connection : "NULL", $1.stmt_name); + dump_variables(argsresult, 1); + fputs("ECPGt_EORT);", base_yyout); + fprintf(base_yyout, "}"); + output_line_number(); + + free($1.stmt_name); + } + | ECPGDisconnect + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in DISCONNECT statement"); + + fprintf(base_yyout, "{ ECPGdisconnect(__LINE__, %s);", + $1 ? $1 : "\"CURRENT\""); + whenever_action(2); + free($1); + } + | ECPGExecuteImmediateStmt { output_statement($1, 0, ECPGst_exec_immediate); } + | ECPGFree + { + const char *con = connection ? connection : "NULL"; + + if (strcmp($1, "all") == 0) + fprintf(base_yyout, "{ ECPGdeallocate_all(__LINE__, %d, %s);", compat, con); + else if ($1[0] == ':') + fprintf(base_yyout, "{ ECPGdeallocate(__LINE__, %d, %s, %s);", compat, con, $1+1); + else + fprintf(base_yyout, "{ ECPGdeallocate(__LINE__, %d, %s, \"%s\");", compat, con, $1); + + whenever_action(2); + free($1); + } + | ECPGGetDescriptor + { + lookup_descriptor($1.name, connection); + output_get_descr($1.name, $1.str); + free($1.name); + free($1.str); + } + | ECPGGetDescriptorHeader + { + lookup_descriptor($1, connection); + output_get_descr_header($1); + free($1); + } + | ECPGOpen + { + struct cursor *ptr; + + if ((ptr = add_additional_variables($1, true)) != NULL) + { + connection = ptr->connection ? mm_strdup(ptr->connection) : NULL; + output_statement(mm_strdup(ptr->command), 0, ECPGst_normal); + ptr->opened = true; + } + } + | ECPGSetAutocommit + { + fprintf(base_yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", $1, connection ? connection : "NULL"); + whenever_action(2); + free($1); + } + | ECPGSetConnection + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in SET CONNECTION statement"); + + fprintf(base_yyout, "{ ECPGsetconn(__LINE__, %s);", $1); + whenever_action(2); + free($1); + } + | ECPGSetDescriptor + { + lookup_descriptor($1.name, connection); + output_set_descr($1.name, $1.str); + free($1.name); + free($1.str); + } + | ECPGSetDescriptorHeader + { + lookup_descriptor($1, connection); + output_set_descr_header($1); + free($1); + } + | ECPGTypedef + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in TYPE statement"); + + fprintf(base_yyout, "%s", $1); + free($1); + output_line_number(); + } + | ECPGVar + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in VAR statement"); + + output_simple_statement($1, 0); + } + | ECPGWhenever + { + if (connection) + mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in WHENEVER statement"); + + output_simple_statement($1, 0); + } +| + { $$ = NULL; } +; + + + CallStmt: + CALL func_application + { + $$ = cat_str(2,mm_strdup("call"),$2); +} +; + + + CreateRoleStmt: + CREATE ROLE RoleId opt_with OptRoleList + { + $$ = cat_str(4,mm_strdup("create role"),$3,$4,$5); +} +; + + + opt_with: + WITH + { + $$ = mm_strdup("with"); +} +| WITH_LA + { + $$ = mm_strdup("with"); +} +| + { + $$=EMPTY; } +; + + + OptRoleList: + OptRoleList CreateOptRoleElem + { + $$ = cat_str(2,$1,$2); +} +| + { + $$=EMPTY; } +; + + + AlterOptRoleList: + AlterOptRoleList AlterOptRoleElem + { + $$ = cat_str(2,$1,$2); +} +| + { + $$=EMPTY; } +; + + + AlterOptRoleElem: + PASSWORD ecpg_sconst + { + $$ = cat_str(2,mm_strdup("password"),$2); +} +| PASSWORD NULL_P + { + $$ = mm_strdup("password null"); +} +| ENCRYPTED PASSWORD ecpg_sconst + { + $$ = cat_str(2,mm_strdup("encrypted password"),$3); +} +| UNENCRYPTED PASSWORD ecpg_sconst + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = cat_str(2,mm_strdup("unencrypted password"),$3); +} +| INHERIT + { + $$ = mm_strdup("inherit"); +} +| CONNECTION LIMIT SignedIconst + { + $$ = cat_str(2,mm_strdup("connection limit"),$3); +} +| VALID UNTIL ecpg_sconst + { + $$ = cat_str(2,mm_strdup("valid until"),$3); +} +| USER role_list + { + $$ = cat_str(2,mm_strdup("user"),$2); +} +| ecpg_ident + { + $$ = $1; +} +; + + + CreateOptRoleElem: + AlterOptRoleElem + { + $$ = $1; +} +| SYSID Iconst + { + $$ = cat_str(2,mm_strdup("sysid"),$2); +} +| ADMIN role_list + { + $$ = cat_str(2,mm_strdup("admin"),$2); +} +| ROLE role_list + { + $$ = cat_str(2,mm_strdup("role"),$2); +} +| IN_P ROLE role_list + { + $$ = cat_str(2,mm_strdup("in role"),$3); +} +| IN_P GROUP_P role_list + { + $$ = cat_str(2,mm_strdup("in group"),$3); +} +; + + + CreateUserStmt: + CREATE USER RoleId opt_with OptRoleList + { + $$ = cat_str(4,mm_strdup("create user"),$3,$4,$5); +} +; + + + AlterRoleStmt: + ALTER ROLE RoleSpec opt_with AlterOptRoleList + { + $$ = cat_str(4,mm_strdup("alter role"),$3,$4,$5); +} +| ALTER USER RoleSpec opt_with AlterOptRoleList + { + $$ = cat_str(4,mm_strdup("alter user"),$3,$4,$5); +} +; + + + opt_in_database: + + { + $$=EMPTY; } +| IN_P DATABASE name + { + $$ = cat_str(2,mm_strdup("in database"),$3); +} +; + + + AlterRoleSetStmt: + ALTER ROLE RoleSpec opt_in_database SetResetClause + { + $$ = cat_str(4,mm_strdup("alter role"),$3,$4,$5); +} +| ALTER ROLE ALL opt_in_database SetResetClause + { + $$ = cat_str(3,mm_strdup("alter role all"),$4,$5); +} +| ALTER USER RoleSpec opt_in_database SetResetClause + { + $$ = cat_str(4,mm_strdup("alter user"),$3,$4,$5); +} +| ALTER USER ALL opt_in_database SetResetClause + { + $$ = cat_str(3,mm_strdup("alter user all"),$4,$5); +} +; + + + DropRoleStmt: + DROP ROLE role_list + { + $$ = cat_str(2,mm_strdup("drop role"),$3); +} +| DROP ROLE IF_P EXISTS role_list + { + $$ = cat_str(2,mm_strdup("drop role if exists"),$5); +} +| DROP USER role_list + { + $$ = cat_str(2,mm_strdup("drop user"),$3); +} +| DROP USER IF_P EXISTS role_list + { + $$ = cat_str(2,mm_strdup("drop user if exists"),$5); +} +| DROP GROUP_P role_list + { + $$ = cat_str(2,mm_strdup("drop group"),$3); +} +| DROP GROUP_P IF_P EXISTS role_list + { + $$ = cat_str(2,mm_strdup("drop group if exists"),$5); +} +; + + + CreateGroupStmt: + CREATE GROUP_P RoleId opt_with OptRoleList + { + $$ = cat_str(4,mm_strdup("create group"),$3,$4,$5); +} +; + + + AlterGroupStmt: + ALTER GROUP_P RoleSpec add_drop USER role_list + { + $$ = cat_str(5,mm_strdup("alter group"),$3,$4,mm_strdup("user"),$6); +} +; + + + add_drop: + ADD_P + { + $$ = mm_strdup("add"); +} +| DROP + { + $$ = mm_strdup("drop"); +} +; + + + CreateSchemaStmt: + CREATE SCHEMA OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList + { + $$ = cat_str(5,mm_strdup("create schema"),$3,mm_strdup("authorization"),$5,$6); +} +| CREATE SCHEMA ColId OptSchemaEltList + { + $$ = cat_str(3,mm_strdup("create schema"),$3,$4); +} +| CREATE SCHEMA IF_P NOT EXISTS OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = cat_str(5,mm_strdup("create schema if not exists"),$6,mm_strdup("authorization"),$8,$9); +} +| CREATE SCHEMA IF_P NOT EXISTS ColId OptSchemaEltList + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = cat_str(3,mm_strdup("create schema if not exists"),$6,$7); +} +; + + + OptSchemaName: + ColId + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + OptSchemaEltList: + OptSchemaEltList schema_stmt + { + $$ = cat_str(2,$1,$2); +} +| + { + $$=EMPTY; } +; + + + schema_stmt: + CreateStmt + { + $$ = $1; +} +| IndexStmt + { + $$ = $1; +} +| CreateSeqStmt + { + $$ = $1; +} +| CreateTrigStmt + { + $$ = $1; +} +| GrantStmt + { + $$ = $1; +} +| ViewStmt + { + $$ = $1; +} +; + + + VariableSetStmt: + SET set_rest + { + $$ = cat_str(2,mm_strdup("set"),$2); +} +| SET LOCAL set_rest + { + $$ = cat_str(2,mm_strdup("set local"),$3); +} +| SET SESSION set_rest + { + $$ = cat_str(2,mm_strdup("set session"),$3); +} +; + + + set_rest: + TRANSACTION transaction_mode_list + { + $$ = cat_str(2,mm_strdup("transaction"),$2); +} +| SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list + { + $$ = cat_str(2,mm_strdup("session characteristics as transaction"),$5); +} +| set_rest_more + { + $$ = $1; +} +; + + + generic_set: + var_name TO var_list + { + $$ = cat_str(3,$1,mm_strdup("to"),$3); +} +| var_name '=' var_list + { + $$ = cat_str(3,$1,mm_strdup("="),$3); +} +| var_name TO DEFAULT + { + $$ = cat_str(2,$1,mm_strdup("to default")); +} +| var_name '=' DEFAULT + { + $$ = cat_str(2,$1,mm_strdup("= default")); +} +; + + + set_rest_more: + generic_set + { + $$ = $1; +} +| var_name FROM CURRENT_P + { + $$ = cat_str(2,$1,mm_strdup("from current")); +} +| TIME ZONE zone_value + { + $$ = cat_str(2,mm_strdup("time zone"),$3); +} +| CATALOG_P ecpg_sconst + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = cat_str(2,mm_strdup("catalog"),$2); +} +| SCHEMA ecpg_sconst + { + $$ = cat_str(2,mm_strdup("schema"),$2); +} +| NAMES opt_encoding + { + $$ = cat_str(2,mm_strdup("names"),$2); +} +| ROLE NonReservedWord_or_Sconst + { + $$ = cat_str(2,mm_strdup("role"),$2); +} +| SESSION AUTHORIZATION NonReservedWord_or_Sconst + { + $$ = cat_str(2,mm_strdup("session authorization"),$3); +} +| SESSION AUTHORIZATION DEFAULT + { + $$ = mm_strdup("session authorization default"); +} +| XML_P OPTION document_or_content + { + $$ = cat_str(2,mm_strdup("xml option"),$3); +} +| TRANSACTION SNAPSHOT ecpg_sconst + { + $$ = cat_str(2,mm_strdup("transaction snapshot"),$3); +} +; + + + var_name: +ECPGColId + { + $$ = $1; +} +| var_name '.' ColId + { + $$ = cat_str(3,$1,mm_strdup("."),$3); +} +; + + + var_list: + var_value + { + $$ = $1; +} +| var_list ',' var_value + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + var_value: + opt_boolean_or_string + { + $$ = $1; +} +| NumericOnly + { + if ($1[0] == '$') + { + free($1); + $1 = mm_strdup("$0"); + } + + $$ = $1; +} +; + + + iso_level: + READ UNCOMMITTED + { + $$ = mm_strdup("read uncommitted"); +} +| READ COMMITTED + { + $$ = mm_strdup("read committed"); +} +| REPEATABLE READ + { + $$ = mm_strdup("repeatable read"); +} +| SERIALIZABLE + { + $$ = mm_strdup("serializable"); +} +; + + + opt_boolean_or_string: + TRUE_P + { + $$ = mm_strdup("true"); +} +| FALSE_P + { + $$ = mm_strdup("false"); +} +| ON + { + $$ = mm_strdup("on"); +} +| NonReservedWord_or_Sconst + { + $$ = $1; +} +; + + + zone_value: + ecpg_sconst + { + $$ = $1; +} +| ecpg_ident + { + $$ = $1; +} +| ConstInterval ecpg_sconst opt_interval + { + $$ = cat_str(3,$1,$2,$3); +} +| ConstInterval '(' Iconst ')' ecpg_sconst + { + $$ = cat_str(5,$1,mm_strdup("("),$3,mm_strdup(")"),$5); +} +| NumericOnly + { + $$ = $1; +} +| DEFAULT + { + $$ = mm_strdup("default"); +} +| LOCAL + { + $$ = mm_strdup("local"); +} +; + + + opt_encoding: + ecpg_sconst + { + $$ = $1; +} +| DEFAULT + { + $$ = mm_strdup("default"); +} +| + { + $$=EMPTY; } +; + + + NonReservedWord_or_Sconst: + NonReservedWord + { + $$ = $1; +} +| ecpg_sconst + { + $$ = $1; +} +; + + + VariableResetStmt: + RESET reset_rest + { + $$ = cat_str(2,mm_strdup("reset"),$2); +} +; + + + reset_rest: + generic_reset + { + $$ = $1; +} +| TIME ZONE + { + $$ = mm_strdup("time zone"); +} +| TRANSACTION ISOLATION LEVEL + { + $$ = mm_strdup("transaction isolation level"); +} +| SESSION AUTHORIZATION + { + $$ = mm_strdup("session authorization"); +} +; + + + generic_reset: + var_name + { + $$ = $1; +} +| ALL + { + $$ = mm_strdup("all"); +} +; + + + SetResetClause: + SET set_rest + { + $$ = cat_str(2,mm_strdup("set"),$2); +} +| VariableResetStmt + { + $$ = $1; +} +; + + + FunctionSetResetClause: + SET set_rest_more + { + $$ = cat_str(2,mm_strdup("set"),$2); +} +| VariableResetStmt + { + $$ = $1; +} +; + + + VariableShowStmt: +SHOW var_name ecpg_into + { + $$ = cat_str(2,mm_strdup("show"),$2); +} +| SHOW TIME ZONE ecpg_into + { + $$ = mm_strdup("show time zone"); +} +| SHOW TRANSACTION ISOLATION LEVEL ecpg_into + { + $$ = mm_strdup("show transaction isolation level"); +} +| SHOW SESSION AUTHORIZATION ecpg_into + { + $$ = mm_strdup("show session authorization"); +} +| SHOW ALL + { + mmerror(PARSE_ERROR, ET_ERROR, "SHOW ALL is not implemented"); + $$ = EMPTY; + } +; + + + ConstraintsSetStmt: + SET CONSTRAINTS constraints_set_list constraints_set_mode + { + $$ = cat_str(3,mm_strdup("set constraints"),$3,$4); +} +; + + + constraints_set_list: + ALL + { + $$ = mm_strdup("all"); +} +| qualified_name_list + { + $$ = $1; +} +; + + + constraints_set_mode: + DEFERRED + { + $$ = mm_strdup("deferred"); +} +| IMMEDIATE + { + $$ = mm_strdup("immediate"); +} +; + + + CheckPointStmt: + CHECKPOINT + { + $$ = mm_strdup("checkpoint"); +} +; + + + DiscardStmt: + DISCARD ALL + { + $$ = mm_strdup("discard all"); +} +| DISCARD TEMP + { + $$ = mm_strdup("discard temp"); +} +| DISCARD TEMPORARY + { + $$ = mm_strdup("discard temporary"); +} +| DISCARD PLANS + { + $$ = mm_strdup("discard plans"); +} +| DISCARD SEQUENCES + { + $$ = mm_strdup("discard sequences"); +} +; + + + AlterTableStmt: + ALTER TABLE relation_expr alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter table"),$3,$4); +} +| ALTER TABLE IF_P EXISTS relation_expr alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter table if exists"),$5,$6); +} +| ALTER TABLE relation_expr partition_cmd + { + $$ = cat_str(3,mm_strdup("alter table"),$3,$4); +} +| ALTER TABLE IF_P EXISTS relation_expr partition_cmd + { + $$ = cat_str(3,mm_strdup("alter table if exists"),$5,$6); +} +| ALTER TABLE ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait + { + $$ = cat_str(5,mm_strdup("alter table all in tablespace"),$6,mm_strdup("set tablespace"),$9,$10); +} +| ALTER TABLE ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait + { + $$ = cat_str(7,mm_strdup("alter table all in tablespace"),$6,mm_strdup("owned by"),$9,mm_strdup("set tablespace"),$12,$13); +} +| ALTER INDEX qualified_name alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter index"),$3,$4); +} +| ALTER INDEX IF_P EXISTS qualified_name alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter index if exists"),$5,$6); +} +| ALTER INDEX qualified_name index_partition_cmd + { + $$ = cat_str(3,mm_strdup("alter index"),$3,$4); +} +| ALTER INDEX ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait + { + $$ = cat_str(5,mm_strdup("alter index all in tablespace"),$6,mm_strdup("set tablespace"),$9,$10); +} +| ALTER INDEX ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait + { + $$ = cat_str(7,mm_strdup("alter index all in tablespace"),$6,mm_strdup("owned by"),$9,mm_strdup("set tablespace"),$12,$13); +} +| ALTER SEQUENCE qualified_name alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter sequence"),$3,$4); +} +| ALTER SEQUENCE IF_P EXISTS qualified_name alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter sequence if exists"),$5,$6); +} +| ALTER VIEW qualified_name alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter view"),$3,$4); +} +| ALTER VIEW IF_P EXISTS qualified_name alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter view if exists"),$5,$6); +} +| ALTER MATERIALIZED VIEW qualified_name alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter materialized view"),$4,$5); +} +| ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter materialized view if exists"),$6,$7); +} +| ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait + { + $$ = cat_str(5,mm_strdup("alter materialized view all in tablespace"),$7,mm_strdup("set tablespace"),$10,$11); +} +| ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait + { + $$ = cat_str(7,mm_strdup("alter materialized view all in tablespace"),$7,mm_strdup("owned by"),$10,mm_strdup("set tablespace"),$13,$14); +} +| ALTER FOREIGN TABLE relation_expr alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter foreign table"),$4,$5); +} +| ALTER FOREIGN TABLE IF_P EXISTS relation_expr alter_table_cmds + { + $$ = cat_str(3,mm_strdup("alter foreign table if exists"),$6,$7); +} +; + + + alter_table_cmds: + alter_table_cmd + { + $$ = $1; +} +| alter_table_cmds ',' alter_table_cmd + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + partition_cmd: + ATTACH PARTITION qualified_name PartitionBoundSpec + { + $$ = cat_str(3,mm_strdup("attach partition"),$3,$4); +} +| DETACH PARTITION qualified_name opt_concurrently + { + $$ = cat_str(3,mm_strdup("detach partition"),$3,$4); +} +| DETACH PARTITION qualified_name FINALIZE + { + $$ = cat_str(3,mm_strdup("detach partition"),$3,mm_strdup("finalize")); +} +; + + + index_partition_cmd: + ATTACH PARTITION qualified_name + { + $$ = cat_str(2,mm_strdup("attach partition"),$3); +} +; + + + alter_table_cmd: + ADD_P columnDef + { + $$ = cat_str(2,mm_strdup("add"),$2); +} +| ADD_P IF_P NOT EXISTS columnDef + { + $$ = cat_str(2,mm_strdup("add if not exists"),$5); +} +| ADD_P COLUMN columnDef + { + $$ = cat_str(2,mm_strdup("add column"),$3); +} +| ADD_P COLUMN IF_P NOT EXISTS columnDef + { + $$ = cat_str(2,mm_strdup("add column if not exists"),$6); +} +| ALTER opt_column ColId alter_column_default + { + $$ = cat_str(4,mm_strdup("alter"),$2,$3,$4); +} +| ALTER opt_column ColId DROP NOT NULL_P + { + $$ = cat_str(4,mm_strdup("alter"),$2,$3,mm_strdup("drop not null")); +} +| ALTER opt_column ColId SET NOT NULL_P + { + $$ = cat_str(4,mm_strdup("alter"),$2,$3,mm_strdup("set not null")); +} +| ALTER opt_column ColId DROP EXPRESSION + { + $$ = cat_str(4,mm_strdup("alter"),$2,$3,mm_strdup("drop expression")); +} +| ALTER opt_column ColId DROP EXPRESSION IF_P EXISTS + { + $$ = cat_str(4,mm_strdup("alter"),$2,$3,mm_strdup("drop expression if exists")); +} +| ALTER opt_column ColId SET STATISTICS SignedIconst + { + $$ = cat_str(5,mm_strdup("alter"),$2,$3,mm_strdup("set statistics"),$6); +} +| ALTER opt_column Iconst SET STATISTICS SignedIconst + { + $$ = cat_str(5,mm_strdup("alter"),$2,$3,mm_strdup("set statistics"),$6); +} +| ALTER opt_column ColId SET reloptions + { + $$ = cat_str(5,mm_strdup("alter"),$2,$3,mm_strdup("set"),$5); +} +| ALTER opt_column ColId RESET reloptions + { + $$ = cat_str(5,mm_strdup("alter"),$2,$3,mm_strdup("reset"),$5); +} +| ALTER opt_column ColId SET STORAGE ColId + { + $$ = cat_str(5,mm_strdup("alter"),$2,$3,mm_strdup("set storage"),$6); +} +| ALTER opt_column ColId SET column_compression + { + $$ = cat_str(5,mm_strdup("alter"),$2,$3,mm_strdup("set"),$5); +} +| ALTER opt_column ColId ADD_P GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList + { + $$ = cat_str(7,mm_strdup("alter"),$2,$3,mm_strdup("add generated"),$6,mm_strdup("as identity"),$9); +} +| ALTER opt_column ColId alter_identity_column_option_list + { + $$ = cat_str(4,mm_strdup("alter"),$2,$3,$4); +} +| ALTER opt_column ColId DROP IDENTITY_P + { + $$ = cat_str(4,mm_strdup("alter"),$2,$3,mm_strdup("drop identity")); +} +| ALTER opt_column ColId DROP IDENTITY_P IF_P EXISTS + { + $$ = cat_str(4,mm_strdup("alter"),$2,$3,mm_strdup("drop identity if exists")); +} +| DROP opt_column IF_P EXISTS ColId opt_drop_behavior + { + $$ = cat_str(5,mm_strdup("drop"),$2,mm_strdup("if exists"),$5,$6); +} +| DROP opt_column ColId opt_drop_behavior + { + $$ = cat_str(4,mm_strdup("drop"),$2,$3,$4); +} +| ALTER opt_column ColId opt_set_data TYPE_P Typename opt_collate_clause alter_using + { + $$ = cat_str(8,mm_strdup("alter"),$2,$3,$4,mm_strdup("type"),$6,$7,$8); +} +| ALTER opt_column ColId alter_generic_options + { + $$ = cat_str(4,mm_strdup("alter"),$2,$3,$4); +} +| ADD_P TableConstraint + { + $$ = cat_str(2,mm_strdup("add"),$2); +} +| ALTER CONSTRAINT name ConstraintAttributeSpec + { + $$ = cat_str(3,mm_strdup("alter constraint"),$3,$4); +} +| VALIDATE CONSTRAINT name + { + $$ = cat_str(2,mm_strdup("validate constraint"),$3); +} +| DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop constraint if exists"),$5,$6); +} +| DROP CONSTRAINT name opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop constraint"),$3,$4); +} +| SET WITHOUT OIDS + { + $$ = mm_strdup("set without oids"); +} +| CLUSTER ON name + { + $$ = cat_str(2,mm_strdup("cluster on"),$3); +} +| SET WITHOUT CLUSTER + { + $$ = mm_strdup("set without cluster"); +} +| SET LOGGED + { + $$ = mm_strdup("set logged"); +} +| SET UNLOGGED + { + $$ = mm_strdup("set unlogged"); +} +| ENABLE_P TRIGGER name + { + $$ = cat_str(2,mm_strdup("enable trigger"),$3); +} +| ENABLE_P ALWAYS TRIGGER name + { + $$ = cat_str(2,mm_strdup("enable always trigger"),$4); +} +| ENABLE_P REPLICA TRIGGER name + { + $$ = cat_str(2,mm_strdup("enable replica trigger"),$4); +} +| ENABLE_P TRIGGER ALL + { + $$ = mm_strdup("enable trigger all"); +} +| ENABLE_P TRIGGER USER + { + $$ = mm_strdup("enable trigger user"); +} +| DISABLE_P TRIGGER name + { + $$ = cat_str(2,mm_strdup("disable trigger"),$3); +} +| DISABLE_P TRIGGER ALL + { + $$ = mm_strdup("disable trigger all"); +} +| DISABLE_P TRIGGER USER + { + $$ = mm_strdup("disable trigger user"); +} +| ENABLE_P RULE name + { + $$ = cat_str(2,mm_strdup("enable rule"),$3); +} +| ENABLE_P ALWAYS RULE name + { + $$ = cat_str(2,mm_strdup("enable always rule"),$4); +} +| ENABLE_P REPLICA RULE name + { + $$ = cat_str(2,mm_strdup("enable replica rule"),$4); +} +| DISABLE_P RULE name + { + $$ = cat_str(2,mm_strdup("disable rule"),$3); +} +| INHERIT qualified_name + { + $$ = cat_str(2,mm_strdup("inherit"),$2); +} +| NO INHERIT qualified_name + { + $$ = cat_str(2,mm_strdup("no inherit"),$3); +} +| OF any_name + { + $$ = cat_str(2,mm_strdup("of"),$2); +} +| NOT OF + { + $$ = mm_strdup("not of"); +} +| OWNER TO RoleSpec + { + $$ = cat_str(2,mm_strdup("owner to"),$3); +} +| SET TABLESPACE name + { + $$ = cat_str(2,mm_strdup("set tablespace"),$3); +} +| SET reloptions + { + $$ = cat_str(2,mm_strdup("set"),$2); +} +| RESET reloptions + { + $$ = cat_str(2,mm_strdup("reset"),$2); +} +| REPLICA IDENTITY_P replica_identity + { + $$ = cat_str(2,mm_strdup("replica identity"),$3); +} +| ENABLE_P ROW LEVEL SECURITY + { + $$ = mm_strdup("enable row level security"); +} +| DISABLE_P ROW LEVEL SECURITY + { + $$ = mm_strdup("disable row level security"); +} +| FORCE ROW LEVEL SECURITY + { + $$ = mm_strdup("force row level security"); +} +| NO FORCE ROW LEVEL SECURITY + { + $$ = mm_strdup("no force row level security"); +} +| alter_generic_options + { + $$ = $1; +} +; + + + alter_column_default: + SET DEFAULT a_expr + { + $$ = cat_str(2,mm_strdup("set default"),$3); +} +| DROP DEFAULT + { + $$ = mm_strdup("drop default"); +} +; + + + opt_drop_behavior: + CASCADE + { + $$ = mm_strdup("cascade"); +} +| RESTRICT + { + $$ = mm_strdup("restrict"); +} +| + { + $$=EMPTY; } +; + + + opt_collate_clause: + COLLATE any_name + { + $$ = cat_str(2,mm_strdup("collate"),$2); +} +| + { + $$=EMPTY; } +; + + + alter_using: + USING a_expr + { + $$ = cat_str(2,mm_strdup("using"),$2); +} +| + { + $$=EMPTY; } +; + + + replica_identity: + NOTHING + { + $$ = mm_strdup("nothing"); +} +| FULL + { + $$ = mm_strdup("full"); +} +| DEFAULT + { + $$ = mm_strdup("default"); +} +| USING INDEX name + { + $$ = cat_str(2,mm_strdup("using index"),$3); +} +; + + + reloptions: + '(' reloption_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +; + + + opt_reloptions: + WITH reloptions + { + $$ = cat_str(2,mm_strdup("with"),$2); +} +| + { + $$=EMPTY; } +; + + + reloption_list: + reloption_elem + { + $$ = $1; +} +| reloption_list ',' reloption_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + reloption_elem: + ColLabel '=' def_arg + { + $$ = cat_str(3,$1,mm_strdup("="),$3); +} +| ColLabel + { + $$ = $1; +} +| ColLabel '.' ColLabel '=' def_arg + { + $$ = cat_str(5,$1,mm_strdup("."),$3,mm_strdup("="),$5); +} +| ColLabel '.' ColLabel + { + $$ = cat_str(3,$1,mm_strdup("."),$3); +} +; + + + alter_identity_column_option_list: + alter_identity_column_option + { + $$ = $1; +} +| alter_identity_column_option_list alter_identity_column_option + { + $$ = cat_str(2,$1,$2); +} +; + + + alter_identity_column_option: + RESTART + { + $$ = mm_strdup("restart"); +} +| RESTART opt_with NumericOnly + { + $$ = cat_str(3,mm_strdup("restart"),$2,$3); +} +| SET SeqOptElem + { + $$ = cat_str(2,mm_strdup("set"),$2); +} +| SET GENERATED generated_when + { + $$ = cat_str(2,mm_strdup("set generated"),$3); +} +; + + + PartitionBoundSpec: + FOR VALUES WITH '(' hash_partbound ')' + { + $$ = cat_str(3,mm_strdup("for values with ("),$5,mm_strdup(")")); +} +| FOR VALUES IN_P '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("for values in ("),$5,mm_strdup(")")); +} +| FOR VALUES FROM '(' expr_list ')' TO '(' expr_list ')' + { + $$ = cat_str(5,mm_strdup("for values from ("),$5,mm_strdup(") to ("),$9,mm_strdup(")")); +} +| DEFAULT + { + $$ = mm_strdup("default"); +} +; + + + hash_partbound_elem: + NonReservedWord Iconst + { + $$ = cat_str(2,$1,$2); +} +; + + + hash_partbound: + hash_partbound_elem + { + $$ = $1; +} +| hash_partbound ',' hash_partbound_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + AlterCompositeTypeStmt: + ALTER TYPE_P any_name alter_type_cmds + { + $$ = cat_str(3,mm_strdup("alter type"),$3,$4); +} +; + + + alter_type_cmds: + alter_type_cmd + { + $$ = $1; +} +| alter_type_cmds ',' alter_type_cmd + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + alter_type_cmd: + ADD_P ATTRIBUTE TableFuncElement opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("add attribute"),$3,$4); +} +| DROP ATTRIBUTE IF_P EXISTS ColId opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop attribute if exists"),$5,$6); +} +| DROP ATTRIBUTE ColId opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop attribute"),$3,$4); +} +| ALTER ATTRIBUTE ColId opt_set_data TYPE_P Typename opt_collate_clause opt_drop_behavior + { + $$ = cat_str(7,mm_strdup("alter attribute"),$3,$4,mm_strdup("type"),$6,$7,$8); +} +; + + + ClosePortalStmt: + CLOSE cursor_name + { + char *cursor_marker = $2[0] == ':' ? mm_strdup("$0") : $2; + struct cursor *ptr = NULL; + for (ptr = cur; ptr != NULL; ptr = ptr -> next) + { + if (strcmp($2, ptr -> name) == 0) + { + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + break; + } + } + $$ = cat2_str(mm_strdup("close"), cursor_marker); + } +| CLOSE ALL + { + $$ = mm_strdup("close all"); +} +; + + + CopyStmt: + COPY opt_binary qualified_name opt_column_list copy_from opt_program copy_file_name copy_delimiter opt_with copy_options where_clause + { + if (strcmp($6, "from") == 0 && + (strcmp($7, "stdin") == 0 || strcmp($7, "stdout") == 0)) + mmerror(PARSE_ERROR, ET_WARNING, "COPY FROM STDIN is not implemented"); + + $$ = cat_str(11,mm_strdup("copy"),$2,$3,$4,$5,$6,$7,$8,$9,$10,$11); +} +| COPY '(' PreparableStmt ')' TO opt_program copy_file_name opt_with copy_options + { + $$ = cat_str(7,mm_strdup("copy ("),$3,mm_strdup(") to"),$6,$7,$8,$9); +} +; + + + copy_from: + FROM + { + $$ = mm_strdup("from"); +} +| TO + { + $$ = mm_strdup("to"); +} +; + + + opt_program: + PROGRAM + { + $$ = mm_strdup("program"); +} +| + { + $$=EMPTY; } +; + + + copy_file_name: + ecpg_sconst + { + $$ = $1; +} +| STDIN + { + $$ = mm_strdup("stdin"); +} +| STDOUT + { + $$ = mm_strdup("stdout"); +} +; + + + copy_options: + copy_opt_list + { + $$ = $1; +} +| '(' copy_generic_opt_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +; + + + copy_opt_list: + copy_opt_list copy_opt_item + { + $$ = cat_str(2,$1,$2); +} +| + { + $$=EMPTY; } +; + + + copy_opt_item: + BINARY + { + $$ = mm_strdup("binary"); +} +| FREEZE + { + $$ = mm_strdup("freeze"); +} +| DELIMITER opt_as ecpg_sconst + { + $$ = cat_str(3,mm_strdup("delimiter"),$2,$3); +} +| NULL_P opt_as ecpg_sconst + { + $$ = cat_str(3,mm_strdup("null"),$2,$3); +} +| CSV + { + $$ = mm_strdup("csv"); +} +| HEADER_P + { + $$ = mm_strdup("header"); +} +| QUOTE opt_as ecpg_sconst + { + $$ = cat_str(3,mm_strdup("quote"),$2,$3); +} +| ESCAPE opt_as ecpg_sconst + { + $$ = cat_str(3,mm_strdup("escape"),$2,$3); +} +| FORCE QUOTE columnList + { + $$ = cat_str(2,mm_strdup("force quote"),$3); +} +| FORCE QUOTE '*' + { + $$ = mm_strdup("force quote *"); +} +| FORCE NOT NULL_P columnList + { + $$ = cat_str(2,mm_strdup("force not null"),$4); +} +| FORCE NULL_P columnList + { + $$ = cat_str(2,mm_strdup("force null"),$3); +} +| ENCODING ecpg_sconst + { + $$ = cat_str(2,mm_strdup("encoding"),$2); +} +; + + + opt_binary: + BINARY + { + $$ = mm_strdup("binary"); +} +| + { + $$=EMPTY; } +; + + + copy_delimiter: + opt_using DELIMITERS ecpg_sconst + { + $$ = cat_str(3,$1,mm_strdup("delimiters"),$3); +} +| + { + $$=EMPTY; } +; + + + opt_using: + USING + { + $$ = mm_strdup("using"); +} +| + { + $$=EMPTY; } +; + + + copy_generic_opt_list: + copy_generic_opt_elem + { + $$ = $1; +} +| copy_generic_opt_list ',' copy_generic_opt_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + copy_generic_opt_elem: + ColLabel copy_generic_opt_arg + { + $$ = cat_str(2,$1,$2); +} +; + + + copy_generic_opt_arg: + opt_boolean_or_string + { + $$ = $1; +} +| NumericOnly + { + $$ = $1; +} +| '*' + { + $$ = mm_strdup("*"); +} +| '(' copy_generic_opt_arg_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + copy_generic_opt_arg_list: + copy_generic_opt_arg_list_item + { + $$ = $1; +} +| copy_generic_opt_arg_list ',' copy_generic_opt_arg_list_item + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + copy_generic_opt_arg_list_item: + opt_boolean_or_string + { + $$ = $1; +} +; + + + CreateStmt: + CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')' OptInherit OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace + { + $$ = cat_str(13,mm_strdup("create"),$2,mm_strdup("table"),$4,mm_strdup("("),$6,mm_strdup(")"),$8,$9,$10,$11,$12,$13); +} +| CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name '(' OptTableElementList ')' OptInherit OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace + { + $$ = cat_str(13,mm_strdup("create"),$2,mm_strdup("table if not exists"),$7,mm_strdup("("),$9,mm_strdup(")"),$11,$12,$13,$14,$15,$16); +} +| CREATE OptTemp TABLE qualified_name OF any_name OptTypedTableElementList OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace + { + $$ = cat_str(12,mm_strdup("create"),$2,mm_strdup("table"),$4,mm_strdup("of"),$6,$7,$8,$9,$10,$11,$12); +} +| CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name OF any_name OptTypedTableElementList OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace + { + $$ = cat_str(12,mm_strdup("create"),$2,mm_strdup("table if not exists"),$7,mm_strdup("of"),$9,$10,$11,$12,$13,$14,$15); +} +| CREATE OptTemp TABLE qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace + { + $$ = cat_str(13,mm_strdup("create"),$2,mm_strdup("table"),$4,mm_strdup("partition of"),$7,$8,$9,$10,$11,$12,$13,$14); +} +| CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace + { + $$ = cat_str(13,mm_strdup("create"),$2,mm_strdup("table if not exists"),$7,mm_strdup("partition of"),$10,$11,$12,$13,$14,$15,$16,$17); +} +; + + + OptTemp: + TEMPORARY + { + $$ = mm_strdup("temporary"); +} +| TEMP + { + $$ = mm_strdup("temp"); +} +| LOCAL TEMPORARY + { + $$ = mm_strdup("local temporary"); +} +| LOCAL TEMP + { + $$ = mm_strdup("local temp"); +} +| GLOBAL TEMPORARY + { + $$ = mm_strdup("global temporary"); +} +| GLOBAL TEMP + { + $$ = mm_strdup("global temp"); +} +| UNLOGGED + { + $$ = mm_strdup("unlogged"); +} +| + { + $$=EMPTY; } +; + + + OptTableElementList: + TableElementList + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + OptTypedTableElementList: + '(' TypedTableElementList ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + TableElementList: + TableElement + { + $$ = $1; +} +| TableElementList ',' TableElement + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + TypedTableElementList: + TypedTableElement + { + $$ = $1; +} +| TypedTableElementList ',' TypedTableElement + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + TableElement: + columnDef + { + $$ = $1; +} +| TableLikeClause + { + $$ = $1; +} +| TableConstraint + { + $$ = $1; +} +; + + + TypedTableElement: + columnOptions + { + $$ = $1; +} +| TableConstraint + { + $$ = $1; +} +; + + + columnDef: + ColId Typename opt_column_compression create_generic_options ColQualList + { + $$ = cat_str(5,$1,$2,$3,$4,$5); +} +; + + + columnOptions: + ColId ColQualList + { + $$ = cat_str(2,$1,$2); +} +| ColId WITH OPTIONS ColQualList + { + $$ = cat_str(3,$1,mm_strdup("with options"),$4); +} +; + + + column_compression: + COMPRESSION ColId + { + $$ = cat_str(2,mm_strdup("compression"),$2); +} +| COMPRESSION DEFAULT + { + $$ = mm_strdup("compression default"); +} +; + + + opt_column_compression: + column_compression + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + ColQualList: + ColQualList ColConstraint + { + $$ = cat_str(2,$1,$2); +} +| + { + $$=EMPTY; } +; + + + ColConstraint: + CONSTRAINT name ColConstraintElem + { + $$ = cat_str(3,mm_strdup("constraint"),$2,$3); +} +| ColConstraintElem + { + $$ = $1; +} +| ConstraintAttr + { + $$ = $1; +} +| COLLATE any_name + { + $$ = cat_str(2,mm_strdup("collate"),$2); +} +; + + + ColConstraintElem: + NOT NULL_P + { + $$ = mm_strdup("not null"); +} +| NULL_P + { + $$ = mm_strdup("null"); +} +| UNIQUE opt_definition OptConsTableSpace + { + $$ = cat_str(3,mm_strdup("unique"),$2,$3); +} +| PRIMARY KEY opt_definition OptConsTableSpace + { + $$ = cat_str(3,mm_strdup("primary key"),$3,$4); +} +| CHECK '(' a_expr ')' opt_no_inherit + { + $$ = cat_str(4,mm_strdup("check ("),$3,mm_strdup(")"),$5); +} +| DEFAULT b_expr + { + $$ = cat_str(2,mm_strdup("default"),$2); +} +| GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList + { + $$ = cat_str(4,mm_strdup("generated"),$2,mm_strdup("as identity"),$5); +} +| GENERATED generated_when AS '(' a_expr ')' STORED + { + $$ = cat_str(5,mm_strdup("generated"),$2,mm_strdup("as ("),$5,mm_strdup(") stored")); +} +| REFERENCES qualified_name opt_column_list key_match key_actions + { + $$ = cat_str(5,mm_strdup("references"),$2,$3,$4,$5); +} +; + + + generated_when: + ALWAYS + { + $$ = mm_strdup("always"); +} +| BY DEFAULT + { + $$ = mm_strdup("by default"); +} +; + + + ConstraintAttr: + DEFERRABLE + { + $$ = mm_strdup("deferrable"); +} +| NOT DEFERRABLE + { + $$ = mm_strdup("not deferrable"); +} +| INITIALLY DEFERRED + { + $$ = mm_strdup("initially deferred"); +} +| INITIALLY IMMEDIATE + { + $$ = mm_strdup("initially immediate"); +} +; + + + TableLikeClause: + LIKE qualified_name TableLikeOptionList + { + $$ = cat_str(3,mm_strdup("like"),$2,$3); +} +; + + + TableLikeOptionList: + TableLikeOptionList INCLUDING TableLikeOption + { + $$ = cat_str(3,$1,mm_strdup("including"),$3); +} +| TableLikeOptionList EXCLUDING TableLikeOption + { + $$ = cat_str(3,$1,mm_strdup("excluding"),$3); +} +| + { + $$=EMPTY; } +; + + + TableLikeOption: + COMMENTS + { + $$ = mm_strdup("comments"); +} +| COMPRESSION + { + $$ = mm_strdup("compression"); +} +| CONSTRAINTS + { + $$ = mm_strdup("constraints"); +} +| DEFAULTS + { + $$ = mm_strdup("defaults"); +} +| IDENTITY_P + { + $$ = mm_strdup("identity"); +} +| GENERATED + { + $$ = mm_strdup("generated"); +} +| INDEXES + { + $$ = mm_strdup("indexes"); +} +| STATISTICS + { + $$ = mm_strdup("statistics"); +} +| STORAGE + { + $$ = mm_strdup("storage"); +} +| ALL + { + $$ = mm_strdup("all"); +} +; + + + TableConstraint: + CONSTRAINT name ConstraintElem + { + $$ = cat_str(3,mm_strdup("constraint"),$2,$3); +} +| ConstraintElem + { + $$ = $1; +} +; + + + ConstraintElem: + CHECK '(' a_expr ')' ConstraintAttributeSpec + { + $$ = cat_str(4,mm_strdup("check ("),$3,mm_strdup(")"),$5); +} +| UNIQUE '(' columnList ')' opt_c_include opt_definition OptConsTableSpace ConstraintAttributeSpec + { + $$ = cat_str(7,mm_strdup("unique ("),$3,mm_strdup(")"),$5,$6,$7,$8); +} +| UNIQUE ExistingIndex ConstraintAttributeSpec + { + $$ = cat_str(3,mm_strdup("unique"),$2,$3); +} +| PRIMARY KEY '(' columnList ')' opt_c_include opt_definition OptConsTableSpace ConstraintAttributeSpec + { + $$ = cat_str(7,mm_strdup("primary key ("),$4,mm_strdup(")"),$6,$7,$8,$9); +} +| PRIMARY KEY ExistingIndex ConstraintAttributeSpec + { + $$ = cat_str(3,mm_strdup("primary key"),$3,$4); +} +| EXCLUDE access_method_clause '(' ExclusionConstraintList ')' opt_c_include opt_definition OptConsTableSpace OptWhereClause ConstraintAttributeSpec + { + $$ = cat_str(10,mm_strdup("exclude"),$2,mm_strdup("("),$4,mm_strdup(")"),$6,$7,$8,$9,$10); +} +| FOREIGN KEY '(' columnList ')' REFERENCES qualified_name opt_column_list key_match key_actions ConstraintAttributeSpec + { + $$ = cat_str(8,mm_strdup("foreign key ("),$4,mm_strdup(") references"),$7,$8,$9,$10,$11); +} +; + + + opt_no_inherit: + NO INHERIT + { + $$ = mm_strdup("no inherit"); +} +| + { + $$=EMPTY; } +; + + + opt_column_list: + '(' columnList ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + columnList: + columnElem + { + $$ = $1; +} +| columnList ',' columnElem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + columnElem: + ColId + { + $$ = $1; +} +; + + + opt_c_include: + INCLUDE '(' columnList ')' + { + $$ = cat_str(3,mm_strdup("include ("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + key_match: + MATCH FULL + { + $$ = mm_strdup("match full"); +} +| MATCH PARTIAL + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = mm_strdup("match partial"); +} +| MATCH SIMPLE + { + $$ = mm_strdup("match simple"); +} +| + { + $$=EMPTY; } +; + + + ExclusionConstraintList: + ExclusionConstraintElem + { + $$ = $1; +} +| ExclusionConstraintList ',' ExclusionConstraintElem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + ExclusionConstraintElem: + index_elem WITH any_operator + { + $$ = cat_str(3,$1,mm_strdup("with"),$3); +} +| index_elem WITH OPERATOR '(' any_operator ')' + { + $$ = cat_str(4,$1,mm_strdup("with operator ("),$5,mm_strdup(")")); +} +; + + + OptWhereClause: + WHERE '(' a_expr ')' + { + $$ = cat_str(3,mm_strdup("where ("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + key_actions: + key_update + { + $$ = $1; +} +| key_delete + { + $$ = $1; +} +| key_update key_delete + { + $$ = cat_str(2,$1,$2); +} +| key_delete key_update + { + $$ = cat_str(2,$1,$2); +} +| + { + $$=EMPTY; } +; + + + key_update: + ON UPDATE key_action + { + $$ = cat_str(2,mm_strdup("on update"),$3); +} +; + + + key_delete: + ON DELETE_P key_action + { + $$ = cat_str(2,mm_strdup("on delete"),$3); +} +; + + + key_action: + NO ACTION + { + $$ = mm_strdup("no action"); +} +| RESTRICT + { + $$ = mm_strdup("restrict"); +} +| CASCADE + { + $$ = mm_strdup("cascade"); +} +| SET NULL_P + { + $$ = mm_strdup("set null"); +} +| SET DEFAULT + { + $$ = mm_strdup("set default"); +} +; + + + OptInherit: + INHERITS '(' qualified_name_list ')' + { + $$ = cat_str(3,mm_strdup("inherits ("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + OptPartitionSpec: + PartitionSpec + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + PartitionSpec: + PARTITION BY ColId '(' part_params ')' + { + $$ = cat_str(5,mm_strdup("partition by"),$3,mm_strdup("("),$5,mm_strdup(")")); +} +; + + + part_params: + part_elem + { + $$ = $1; +} +| part_params ',' part_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + part_elem: + ColId opt_collate opt_class + { + $$ = cat_str(3,$1,$2,$3); +} +| func_expr_windowless opt_collate opt_class + { + $$ = cat_str(3,$1,$2,$3); +} +| '(' a_expr ')' opt_collate opt_class + { + $$ = cat_str(5,mm_strdup("("),$2,mm_strdup(")"),$4,$5); +} +; + + + table_access_method_clause: + USING name + { + $$ = cat_str(2,mm_strdup("using"),$2); +} +| + { + $$=EMPTY; } +; + + + OptWith: + WITH reloptions + { + $$ = cat_str(2,mm_strdup("with"),$2); +} +| WITHOUT OIDS + { + $$ = mm_strdup("without oids"); +} +| + { + $$=EMPTY; } +; + + + OnCommitOption: + ON COMMIT DROP + { + $$ = mm_strdup("on commit drop"); +} +| ON COMMIT DELETE_P ROWS + { + $$ = mm_strdup("on commit delete rows"); +} +| ON COMMIT PRESERVE ROWS + { + $$ = mm_strdup("on commit preserve rows"); +} +| + { + $$=EMPTY; } +; + + + OptTableSpace: + TABLESPACE name + { + $$ = cat_str(2,mm_strdup("tablespace"),$2); +} +| + { + $$=EMPTY; } +; + + + OptConsTableSpace: + USING INDEX TABLESPACE name + { + $$ = cat_str(2,mm_strdup("using index tablespace"),$4); +} +| + { + $$=EMPTY; } +; + + + ExistingIndex: + USING INDEX name + { + $$ = cat_str(2,mm_strdup("using index"),$3); +} +; + + + CreateStatsStmt: + CREATE STATISTICS any_name opt_name_list ON stats_params FROM from_list + { + $$ = cat_str(7,mm_strdup("create statistics"),$3,$4,mm_strdup("on"),$6,mm_strdup("from"),$8); +} +| CREATE STATISTICS IF_P NOT EXISTS any_name opt_name_list ON stats_params FROM from_list + { + $$ = cat_str(7,mm_strdup("create statistics if not exists"),$6,$7,mm_strdup("on"),$9,mm_strdup("from"),$11); +} +; + + + stats_params: + stats_param + { + $$ = $1; +} +| stats_params ',' stats_param + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + stats_param: + ColId + { + $$ = $1; +} +| func_expr_windowless + { + $$ = $1; +} +| '(' a_expr ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +; + + + AlterStatsStmt: + ALTER STATISTICS any_name SET STATISTICS SignedIconst + { + $$ = cat_str(4,mm_strdup("alter statistics"),$3,mm_strdup("set statistics"),$6); +} +| ALTER STATISTICS IF_P EXISTS any_name SET STATISTICS SignedIconst + { + $$ = cat_str(4,mm_strdup("alter statistics if exists"),$5,mm_strdup("set statistics"),$8); +} +; + + + create_as_target: + qualified_name opt_column_list table_access_method_clause OptWith OnCommitOption OptTableSpace + { + $$ = cat_str(6,$1,$2,$3,$4,$5,$6); +} +; + + + opt_with_data: + WITH DATA_P + { + $$ = mm_strdup("with data"); +} +| WITH NO DATA_P + { + $$ = mm_strdup("with no data"); +} +| + { + $$=EMPTY; } +; + + + CreateMatViewStmt: + CREATE OptNoLog MATERIALIZED VIEW create_mv_target AS SelectStmt opt_with_data + { + $$ = cat_str(7,mm_strdup("create"),$2,mm_strdup("materialized view"),$5,mm_strdup("as"),$7,$8); +} +| CREATE OptNoLog MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data + { + $$ = cat_str(7,mm_strdup("create"),$2,mm_strdup("materialized view if not exists"),$8,mm_strdup("as"),$10,$11); +} +; + + + create_mv_target: + qualified_name opt_column_list table_access_method_clause opt_reloptions OptTableSpace + { + $$ = cat_str(5,$1,$2,$3,$4,$5); +} +; + + + OptNoLog: + UNLOGGED + { + $$ = mm_strdup("unlogged"); +} +| + { + $$=EMPTY; } +; + + + RefreshMatViewStmt: + REFRESH MATERIALIZED VIEW opt_concurrently qualified_name opt_with_data + { + $$ = cat_str(4,mm_strdup("refresh materialized view"),$4,$5,$6); +} +; + + + CreateSeqStmt: + CREATE OptTemp SEQUENCE qualified_name OptSeqOptList + { + $$ = cat_str(5,mm_strdup("create"),$2,mm_strdup("sequence"),$4,$5); +} +| CREATE OptTemp SEQUENCE IF_P NOT EXISTS qualified_name OptSeqOptList + { + $$ = cat_str(5,mm_strdup("create"),$2,mm_strdup("sequence if not exists"),$7,$8); +} +; + + + AlterSeqStmt: + ALTER SEQUENCE qualified_name SeqOptList + { + $$ = cat_str(3,mm_strdup("alter sequence"),$3,$4); +} +| ALTER SEQUENCE IF_P EXISTS qualified_name SeqOptList + { + $$ = cat_str(3,mm_strdup("alter sequence if exists"),$5,$6); +} +; + + + OptSeqOptList: + SeqOptList + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + OptParenthesizedSeqOptList: + '(' SeqOptList ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + SeqOptList: + SeqOptElem + { + $$ = $1; +} +| SeqOptList SeqOptElem + { + $$ = cat_str(2,$1,$2); +} +; + + + SeqOptElem: + AS SimpleTypename + { + $$ = cat_str(2,mm_strdup("as"),$2); +} +| CACHE NumericOnly + { + $$ = cat_str(2,mm_strdup("cache"),$2); +} +| CYCLE + { + $$ = mm_strdup("cycle"); +} +| NO CYCLE + { + $$ = mm_strdup("no cycle"); +} +| INCREMENT opt_by NumericOnly + { + $$ = cat_str(3,mm_strdup("increment"),$2,$3); +} +| MAXVALUE NumericOnly + { + $$ = cat_str(2,mm_strdup("maxvalue"),$2); +} +| MINVALUE NumericOnly + { + $$ = cat_str(2,mm_strdup("minvalue"),$2); +} +| NO MAXVALUE + { + $$ = mm_strdup("no maxvalue"); +} +| NO MINVALUE + { + $$ = mm_strdup("no minvalue"); +} +| OWNED BY any_name + { + $$ = cat_str(2,mm_strdup("owned by"),$3); +} +| SEQUENCE NAME_P any_name + { + $$ = cat_str(2,mm_strdup("sequence name"),$3); +} +| START opt_with NumericOnly + { + $$ = cat_str(3,mm_strdup("start"),$2,$3); +} +| RESTART + { + $$ = mm_strdup("restart"); +} +| RESTART opt_with NumericOnly + { + $$ = cat_str(3,mm_strdup("restart"),$2,$3); +} +; + + + opt_by: + BY + { + $$ = mm_strdup("by"); +} +| + { + $$=EMPTY; } +; + + + NumericOnly: + ecpg_fconst + { + $$ = $1; +} +| '+' ecpg_fconst + { + $$ = cat_str(2,mm_strdup("+"),$2); +} +| '-' ecpg_fconst + { + $$ = cat_str(2,mm_strdup("-"),$2); +} +| SignedIconst + { + $$ = $1; +} +; + + + NumericOnly_list: + NumericOnly + { + $$ = $1; +} +| NumericOnly_list ',' NumericOnly + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + CreatePLangStmt: + CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE name + { + $$ = cat_str(6,mm_strdup("create"),$2,$3,$4,mm_strdup("language"),$6); +} +| CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE name HANDLER handler_name opt_inline_handler opt_validator + { + $$ = cat_str(10,mm_strdup("create"),$2,$3,$4,mm_strdup("language"),$6,mm_strdup("handler"),$8,$9,$10); +} +; + + + opt_trusted: + TRUSTED + { + $$ = mm_strdup("trusted"); +} +| + { + $$=EMPTY; } +; + + + handler_name: + name + { + $$ = $1; +} +| name attrs + { + $$ = cat_str(2,$1,$2); +} +; + + + opt_inline_handler: + INLINE_P handler_name + { + $$ = cat_str(2,mm_strdup("inline"),$2); +} +| + { + $$=EMPTY; } +; + + + validator_clause: + VALIDATOR handler_name + { + $$ = cat_str(2,mm_strdup("validator"),$2); +} +| NO VALIDATOR + { + $$ = mm_strdup("no validator"); +} +; + + + opt_validator: + validator_clause + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + opt_procedural: + PROCEDURAL + { + $$ = mm_strdup("procedural"); +} +| + { + $$=EMPTY; } +; + + + CreateTableSpaceStmt: + CREATE TABLESPACE name OptTableSpaceOwner LOCATION ecpg_sconst opt_reloptions + { + $$ = cat_str(6,mm_strdup("create tablespace"),$3,$4,mm_strdup("location"),$6,$7); +} +; + + + OptTableSpaceOwner: + OWNER RoleSpec + { + $$ = cat_str(2,mm_strdup("owner"),$2); +} +| + { + $$=EMPTY; } +; + + + DropTableSpaceStmt: + DROP TABLESPACE name + { + $$ = cat_str(2,mm_strdup("drop tablespace"),$3); +} +| DROP TABLESPACE IF_P EXISTS name + { + $$ = cat_str(2,mm_strdup("drop tablespace if exists"),$5); +} +; + + + CreateExtensionStmt: + CREATE EXTENSION name opt_with create_extension_opt_list + { + $$ = cat_str(4,mm_strdup("create extension"),$3,$4,$5); +} +| CREATE EXTENSION IF_P NOT EXISTS name opt_with create_extension_opt_list + { + $$ = cat_str(4,mm_strdup("create extension if not exists"),$6,$7,$8); +} +; + + + create_extension_opt_list: + create_extension_opt_list create_extension_opt_item + { + $$ = cat_str(2,$1,$2); +} +| + { + $$=EMPTY; } +; + + + create_extension_opt_item: + SCHEMA name + { + $$ = cat_str(2,mm_strdup("schema"),$2); +} +| VERSION_P NonReservedWord_or_Sconst + { + $$ = cat_str(2,mm_strdup("version"),$2); +} +| FROM NonReservedWord_or_Sconst + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = cat_str(2,mm_strdup("from"),$2); +} +| CASCADE + { + $$ = mm_strdup("cascade"); +} +; + + + AlterExtensionStmt: + ALTER EXTENSION name UPDATE alter_extension_opt_list + { + $$ = cat_str(4,mm_strdup("alter extension"),$3,mm_strdup("update"),$5); +} +; + + + alter_extension_opt_list: + alter_extension_opt_list alter_extension_opt_item + { + $$ = cat_str(2,$1,$2); +} +| + { + $$=EMPTY; } +; + + + alter_extension_opt_item: + TO NonReservedWord_or_Sconst + { + $$ = cat_str(2,mm_strdup("to"),$2); +} +; + + + AlterExtensionContentsStmt: + ALTER EXTENSION name add_drop object_type_name name + { + $$ = cat_str(5,mm_strdup("alter extension"),$3,$4,$5,$6); +} +| ALTER EXTENSION name add_drop object_type_any_name any_name + { + $$ = cat_str(5,mm_strdup("alter extension"),$3,$4,$5,$6); +} +| ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes + { + $$ = cat_str(5,mm_strdup("alter extension"),$3,$4,mm_strdup("aggregate"),$6); +} +| ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')' + { + $$ = cat_str(8,mm_strdup("alter extension"),$3,$4,mm_strdup("cast ("),$7,mm_strdup("as"),$9,mm_strdup(")")); +} +| ALTER EXTENSION name add_drop DOMAIN_P Typename + { + $$ = cat_str(5,mm_strdup("alter extension"),$3,$4,mm_strdup("domain"),$6); +} +| ALTER EXTENSION name add_drop FUNCTION function_with_argtypes + { + $$ = cat_str(5,mm_strdup("alter extension"),$3,$4,mm_strdup("function"),$6); +} +| ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes + { + $$ = cat_str(5,mm_strdup("alter extension"),$3,$4,mm_strdup("operator"),$6); +} +| ALTER EXTENSION name add_drop OPERATOR CLASS any_name USING name + { + $$ = cat_str(7,mm_strdup("alter extension"),$3,$4,mm_strdup("operator class"),$7,mm_strdup("using"),$9); +} +| ALTER EXTENSION name add_drop OPERATOR FAMILY any_name USING name + { + $$ = cat_str(7,mm_strdup("alter extension"),$3,$4,mm_strdup("operator family"),$7,mm_strdup("using"),$9); +} +| ALTER EXTENSION name add_drop PROCEDURE function_with_argtypes + { + $$ = cat_str(5,mm_strdup("alter extension"),$3,$4,mm_strdup("procedure"),$6); +} +| ALTER EXTENSION name add_drop ROUTINE function_with_argtypes + { + $$ = cat_str(5,mm_strdup("alter extension"),$3,$4,mm_strdup("routine"),$6); +} +| ALTER EXTENSION name add_drop TRANSFORM FOR Typename LANGUAGE name + { + $$ = cat_str(7,mm_strdup("alter extension"),$3,$4,mm_strdup("transform for"),$7,mm_strdup("language"),$9); +} +| ALTER EXTENSION name add_drop TYPE_P Typename + { + $$ = cat_str(5,mm_strdup("alter extension"),$3,$4,mm_strdup("type"),$6); +} +; + + + CreateFdwStmt: + CREATE FOREIGN DATA_P WRAPPER name opt_fdw_options create_generic_options + { + $$ = cat_str(4,mm_strdup("create foreign data wrapper"),$5,$6,$7); +} +; + + + fdw_option: + HANDLER handler_name + { + $$ = cat_str(2,mm_strdup("handler"),$2); +} +| NO HANDLER + { + $$ = mm_strdup("no handler"); +} +| VALIDATOR handler_name + { + $$ = cat_str(2,mm_strdup("validator"),$2); +} +| NO VALIDATOR + { + $$ = mm_strdup("no validator"); +} +; + + + fdw_options: + fdw_option + { + $$ = $1; +} +| fdw_options fdw_option + { + $$ = cat_str(2,$1,$2); +} +; + + + opt_fdw_options: + fdw_options + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + AlterFdwStmt: + ALTER FOREIGN DATA_P WRAPPER name opt_fdw_options alter_generic_options + { + $$ = cat_str(4,mm_strdup("alter foreign data wrapper"),$5,$6,$7); +} +| ALTER FOREIGN DATA_P WRAPPER name fdw_options + { + $$ = cat_str(3,mm_strdup("alter foreign data wrapper"),$5,$6); +} +; + + + create_generic_options: + OPTIONS '(' generic_option_list ')' + { + $$ = cat_str(3,mm_strdup("options ("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + generic_option_list: + generic_option_elem + { + $$ = $1; +} +| generic_option_list ',' generic_option_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + alter_generic_options: + OPTIONS '(' alter_generic_option_list ')' + { + $$ = cat_str(3,mm_strdup("options ("),$3,mm_strdup(")")); +} +; + + + alter_generic_option_list: + alter_generic_option_elem + { + $$ = $1; +} +| alter_generic_option_list ',' alter_generic_option_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + alter_generic_option_elem: + generic_option_elem + { + $$ = $1; +} +| SET generic_option_elem + { + $$ = cat_str(2,mm_strdup("set"),$2); +} +| ADD_P generic_option_elem + { + $$ = cat_str(2,mm_strdup("add"),$2); +} +| DROP generic_option_name + { + $$ = cat_str(2,mm_strdup("drop"),$2); +} +; + + + generic_option_elem: + generic_option_name generic_option_arg + { + $$ = cat_str(2,$1,$2); +} +; + + + generic_option_name: + ColLabel + { + $$ = $1; +} +; + + + generic_option_arg: + ecpg_sconst + { + $$ = $1; +} +; + + + CreateForeignServerStmt: + CREATE SERVER name opt_type opt_foreign_server_version FOREIGN DATA_P WRAPPER name create_generic_options + { + $$ = cat_str(7,mm_strdup("create server"),$3,$4,$5,mm_strdup("foreign data wrapper"),$9,$10); +} +| CREATE SERVER IF_P NOT EXISTS name opt_type opt_foreign_server_version FOREIGN DATA_P WRAPPER name create_generic_options + { + $$ = cat_str(7,mm_strdup("create server if not exists"),$6,$7,$8,mm_strdup("foreign data wrapper"),$12,$13); +} +; + + + opt_type: + TYPE_P ecpg_sconst + { + $$ = cat_str(2,mm_strdup("type"),$2); +} +| + { + $$=EMPTY; } +; + + + foreign_server_version: + VERSION_P ecpg_sconst + { + $$ = cat_str(2,mm_strdup("version"),$2); +} +| VERSION_P NULL_P + { + $$ = mm_strdup("version null"); +} +; + + + opt_foreign_server_version: + foreign_server_version + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + AlterForeignServerStmt: + ALTER SERVER name foreign_server_version alter_generic_options + { + $$ = cat_str(4,mm_strdup("alter server"),$3,$4,$5); +} +| ALTER SERVER name foreign_server_version + { + $$ = cat_str(3,mm_strdup("alter server"),$3,$4); +} +| ALTER SERVER name alter_generic_options + { + $$ = cat_str(3,mm_strdup("alter server"),$3,$4); +} +; + + + CreateForeignTableStmt: + CREATE FOREIGN TABLE qualified_name '(' OptTableElementList ')' OptInherit SERVER name create_generic_options + { + $$ = cat_str(9,mm_strdup("create foreign table"),$4,mm_strdup("("),$6,mm_strdup(")"),$8,mm_strdup("server"),$10,$11); +} +| CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name '(' OptTableElementList ')' OptInherit SERVER name create_generic_options + { + $$ = cat_str(9,mm_strdup("create foreign table if not exists"),$7,mm_strdup("("),$9,mm_strdup(")"),$11,mm_strdup("server"),$13,$14); +} +| CREATE FOREIGN TABLE qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec SERVER name create_generic_options + { + $$ = cat_str(9,mm_strdup("create foreign table"),$4,mm_strdup("partition of"),$7,$8,$9,mm_strdup("server"),$11,$12); +} +| CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec SERVER name create_generic_options + { + $$ = cat_str(9,mm_strdup("create foreign table if not exists"),$7,mm_strdup("partition of"),$10,$11,$12,mm_strdup("server"),$14,$15); +} +; + + + ImportForeignSchemaStmt: + IMPORT_P FOREIGN SCHEMA name import_qualification FROM SERVER name INTO name create_generic_options + { + $$ = cat_str(8,mm_strdup("import foreign schema"),$4,$5,mm_strdup("from server"),$8,mm_strdup("into"),$10,$11); +} +; + + + import_qualification_type: + LIMIT TO + { + $$ = mm_strdup("limit to"); +} +| EXCEPT + { + $$ = mm_strdup("except"); +} +; + + + import_qualification: + import_qualification_type '(' relation_expr_list ')' + { + $$ = cat_str(4,$1,mm_strdup("("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + CreateUserMappingStmt: + CREATE USER MAPPING FOR auth_ident SERVER name create_generic_options + { + $$ = cat_str(5,mm_strdup("create user mapping for"),$5,mm_strdup("server"),$7,$8); +} +| CREATE USER MAPPING IF_P NOT EXISTS FOR auth_ident SERVER name create_generic_options + { + $$ = cat_str(5,mm_strdup("create user mapping if not exists for"),$8,mm_strdup("server"),$10,$11); +} +; + + + auth_ident: + RoleSpec + { + $$ = $1; +} +| USER + { + $$ = mm_strdup("user"); +} +; + + + DropUserMappingStmt: + DROP USER MAPPING FOR auth_ident SERVER name + { + $$ = cat_str(4,mm_strdup("drop user mapping for"),$5,mm_strdup("server"),$7); +} +| DROP USER MAPPING IF_P EXISTS FOR auth_ident SERVER name + { + $$ = cat_str(4,mm_strdup("drop user mapping if exists for"),$7,mm_strdup("server"),$9); +} +; + + + AlterUserMappingStmt: + ALTER USER MAPPING FOR auth_ident SERVER name alter_generic_options + { + $$ = cat_str(5,mm_strdup("alter user mapping for"),$5,mm_strdup("server"),$7,$8); +} +; + + + CreatePolicyStmt: + CREATE POLICY name ON qualified_name RowSecurityDefaultPermissive RowSecurityDefaultForCmd RowSecurityDefaultToRole RowSecurityOptionalExpr RowSecurityOptionalWithCheck + { + $$ = cat_str(9,mm_strdup("create policy"),$3,mm_strdup("on"),$5,$6,$7,$8,$9,$10); +} +; + + + AlterPolicyStmt: + ALTER POLICY name ON qualified_name RowSecurityOptionalToRole RowSecurityOptionalExpr RowSecurityOptionalWithCheck + { + $$ = cat_str(7,mm_strdup("alter policy"),$3,mm_strdup("on"),$5,$6,$7,$8); +} +; + + + RowSecurityOptionalExpr: + USING '(' a_expr ')' + { + $$ = cat_str(3,mm_strdup("using ("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + RowSecurityOptionalWithCheck: + WITH CHECK '(' a_expr ')' + { + $$ = cat_str(3,mm_strdup("with check ("),$4,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + RowSecurityDefaultToRole: + TO role_list + { + $$ = cat_str(2,mm_strdup("to"),$2); +} +| + { + $$=EMPTY; } +; + + + RowSecurityOptionalToRole: + TO role_list + { + $$ = cat_str(2,mm_strdup("to"),$2); +} +| + { + $$=EMPTY; } +; + + + RowSecurityDefaultPermissive: + AS ecpg_ident + { + $$ = cat_str(2,mm_strdup("as"),$2); +} +| + { + $$=EMPTY; } +; + + + RowSecurityDefaultForCmd: + FOR row_security_cmd + { + $$ = cat_str(2,mm_strdup("for"),$2); +} +| + { + $$=EMPTY; } +; + + + row_security_cmd: + ALL + { + $$ = mm_strdup("all"); +} +| SELECT + { + $$ = mm_strdup("select"); +} +| INSERT + { + $$ = mm_strdup("insert"); +} +| UPDATE + { + $$ = mm_strdup("update"); +} +| DELETE_P + { + $$ = mm_strdup("delete"); +} +; + + + CreateAmStmt: + CREATE ACCESS METHOD name TYPE_P am_type HANDLER handler_name + { + $$ = cat_str(6,mm_strdup("create access method"),$4,mm_strdup("type"),$6,mm_strdup("handler"),$8); +} +; + + + am_type: + INDEX + { + $$ = mm_strdup("index"); +} +| TABLE + { + $$ = mm_strdup("table"); +} +; + + + CreateTrigStmt: + CREATE opt_or_replace TRIGGER name TriggerActionTime TriggerEvents ON qualified_name TriggerReferencing TriggerForSpec TriggerWhen EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' + { + $$ = cat_str(17,mm_strdup("create"),$2,mm_strdup("trigger"),$4,$5,$6,mm_strdup("on"),$8,$9,$10,$11,mm_strdup("execute"),$13,$14,mm_strdup("("),$16,mm_strdup(")")); +} +| CREATE opt_or_replace CONSTRAINT TRIGGER name AFTER TriggerEvents ON qualified_name OptConstrFromTable ConstraintAttributeSpec FOR EACH ROW TriggerWhen EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = cat_str(18,mm_strdup("create"),$2,mm_strdup("constraint trigger"),$5,mm_strdup("after"),$7,mm_strdup("on"),$9,$10,$11,mm_strdup("for each row"),$15,mm_strdup("execute"),$17,$18,mm_strdup("("),$20,mm_strdup(")")); +} +; + + + TriggerActionTime: + BEFORE + { + $$ = mm_strdup("before"); +} +| AFTER + { + $$ = mm_strdup("after"); +} +| INSTEAD OF + { + $$ = mm_strdup("instead of"); +} +; + + + TriggerEvents: + TriggerOneEvent + { + $$ = $1; +} +| TriggerEvents OR TriggerOneEvent + { + $$ = cat_str(3,$1,mm_strdup("or"),$3); +} +; + + + TriggerOneEvent: + INSERT + { + $$ = mm_strdup("insert"); +} +| DELETE_P + { + $$ = mm_strdup("delete"); +} +| UPDATE + { + $$ = mm_strdup("update"); +} +| UPDATE OF columnList + { + $$ = cat_str(2,mm_strdup("update of"),$3); +} +| TRUNCATE + { + $$ = mm_strdup("truncate"); +} +; + + + TriggerReferencing: + REFERENCING TriggerTransitions + { + $$ = cat_str(2,mm_strdup("referencing"),$2); +} +| + { + $$=EMPTY; } +; + + + TriggerTransitions: + TriggerTransition + { + $$ = $1; +} +| TriggerTransitions TriggerTransition + { + $$ = cat_str(2,$1,$2); +} +; + + + TriggerTransition: + TransitionOldOrNew TransitionRowOrTable opt_as TransitionRelName + { + $$ = cat_str(4,$1,$2,$3,$4); +} +; + + + TransitionOldOrNew: + NEW + { + $$ = mm_strdup("new"); +} +| OLD + { + $$ = mm_strdup("old"); +} +; + + + TransitionRowOrTable: + TABLE + { + $$ = mm_strdup("table"); +} +| ROW + { + $$ = mm_strdup("row"); +} +; + + + TransitionRelName: + ColId + { + $$ = $1; +} +; + + + TriggerForSpec: + FOR TriggerForOptEach TriggerForType + { + $$ = cat_str(3,mm_strdup("for"),$2,$3); +} +| + { + $$=EMPTY; } +; + + + TriggerForOptEach: + EACH + { + $$ = mm_strdup("each"); +} +| + { + $$=EMPTY; } +; + + + TriggerForType: + ROW + { + $$ = mm_strdup("row"); +} +| STATEMENT + { + $$ = mm_strdup("statement"); +} +; + + + TriggerWhen: + WHEN '(' a_expr ')' + { + $$ = cat_str(3,mm_strdup("when ("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + FUNCTION_or_PROCEDURE: + FUNCTION + { + $$ = mm_strdup("function"); +} +| PROCEDURE + { + $$ = mm_strdup("procedure"); +} +; + + + TriggerFuncArgs: + TriggerFuncArg + { + $$ = $1; +} +| TriggerFuncArgs ',' TriggerFuncArg + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +| + { + $$=EMPTY; } +; + + + TriggerFuncArg: + Iconst + { + $$ = $1; +} +| ecpg_fconst + { + $$ = $1; +} +| ecpg_sconst + { + $$ = $1; +} +| ColLabel + { + $$ = $1; +} +; + + + OptConstrFromTable: + FROM qualified_name + { + $$ = cat_str(2,mm_strdup("from"),$2); +} +| + { + $$=EMPTY; } +; + + + ConstraintAttributeSpec: + + { + $$=EMPTY; } +| ConstraintAttributeSpec ConstraintAttributeElem + { + $$ = cat_str(2,$1,$2); +} +; + + + ConstraintAttributeElem: + NOT DEFERRABLE + { + $$ = mm_strdup("not deferrable"); +} +| DEFERRABLE + { + $$ = mm_strdup("deferrable"); +} +| INITIALLY IMMEDIATE + { + $$ = mm_strdup("initially immediate"); +} +| INITIALLY DEFERRED + { + $$ = mm_strdup("initially deferred"); +} +| NOT VALID + { + $$ = mm_strdup("not valid"); +} +| NO INHERIT + { + $$ = mm_strdup("no inherit"); +} +; + + + CreateEventTrigStmt: + CREATE EVENT TRIGGER name ON ColLabel EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')' + { + $$ = cat_str(8,mm_strdup("create event trigger"),$4,mm_strdup("on"),$6,mm_strdup("execute"),$8,$9,mm_strdup("( )")); +} +| CREATE EVENT TRIGGER name ON ColLabel WHEN event_trigger_when_list EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')' + { + $$ = cat_str(10,mm_strdup("create event trigger"),$4,mm_strdup("on"),$6,mm_strdup("when"),$8,mm_strdup("execute"),$10,$11,mm_strdup("( )")); +} +; + + + event_trigger_when_list: + event_trigger_when_item + { + $$ = $1; +} +| event_trigger_when_list AND event_trigger_when_item + { + $$ = cat_str(3,$1,mm_strdup("and"),$3); +} +; + + + event_trigger_when_item: + ColId IN_P '(' event_trigger_value_list ')' + { + $$ = cat_str(4,$1,mm_strdup("in ("),$4,mm_strdup(")")); +} +; + + + event_trigger_value_list: + SCONST + { + $$ = mm_strdup("sconst"); +} +| event_trigger_value_list ',' SCONST + { + $$ = cat_str(2,$1,mm_strdup(", sconst")); +} +; + + + AlterEventTrigStmt: + ALTER EVENT TRIGGER name enable_trigger + { + $$ = cat_str(3,mm_strdup("alter event trigger"),$4,$5); +} +; + + + enable_trigger: + ENABLE_P + { + $$ = mm_strdup("enable"); +} +| ENABLE_P REPLICA + { + $$ = mm_strdup("enable replica"); +} +| ENABLE_P ALWAYS + { + $$ = mm_strdup("enable always"); +} +| DISABLE_P + { + $$ = mm_strdup("disable"); +} +; + + + CreateAssertionStmt: + CREATE ASSERTION any_name CHECK '(' a_expr ')' ConstraintAttributeSpec + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = cat_str(6,mm_strdup("create assertion"),$3,mm_strdup("check ("),$6,mm_strdup(")"),$8); +} +; + + + DefineStmt: + CREATE opt_or_replace AGGREGATE func_name aggr_args definition + { + $$ = cat_str(6,mm_strdup("create"),$2,mm_strdup("aggregate"),$4,$5,$6); +} +| CREATE opt_or_replace AGGREGATE func_name old_aggr_definition + { + $$ = cat_str(5,mm_strdup("create"),$2,mm_strdup("aggregate"),$4,$5); +} +| CREATE OPERATOR any_operator definition + { + $$ = cat_str(3,mm_strdup("create operator"),$3,$4); +} +| CREATE TYPE_P any_name definition + { + $$ = cat_str(3,mm_strdup("create type"),$3,$4); +} +| CREATE TYPE_P any_name + { + $$ = cat_str(2,mm_strdup("create type"),$3); +} +| CREATE TYPE_P any_name AS '(' OptTableFuncElementList ')' + { + $$ = cat_str(5,mm_strdup("create type"),$3,mm_strdup("as ("),$6,mm_strdup(")")); +} +| CREATE TYPE_P any_name AS ENUM_P '(' opt_enum_val_list ')' + { + $$ = cat_str(5,mm_strdup("create type"),$3,mm_strdup("as enum ("),$7,mm_strdup(")")); +} +| CREATE TYPE_P any_name AS RANGE definition + { + $$ = cat_str(4,mm_strdup("create type"),$3,mm_strdup("as range"),$6); +} +| CREATE TEXT_P SEARCH PARSER any_name definition + { + $$ = cat_str(3,mm_strdup("create text search parser"),$5,$6); +} +| CREATE TEXT_P SEARCH DICTIONARY any_name definition + { + $$ = cat_str(3,mm_strdup("create text search dictionary"),$5,$6); +} +| CREATE TEXT_P SEARCH TEMPLATE any_name definition + { + $$ = cat_str(3,mm_strdup("create text search template"),$5,$6); +} +| CREATE TEXT_P SEARCH CONFIGURATION any_name definition + { + $$ = cat_str(3,mm_strdup("create text search configuration"),$5,$6); +} +| CREATE COLLATION any_name definition + { + $$ = cat_str(3,mm_strdup("create collation"),$3,$4); +} +| CREATE COLLATION IF_P NOT EXISTS any_name definition + { + $$ = cat_str(3,mm_strdup("create collation if not exists"),$6,$7); +} +| CREATE COLLATION any_name FROM any_name + { + $$ = cat_str(4,mm_strdup("create collation"),$3,mm_strdup("from"),$5); +} +| CREATE COLLATION IF_P NOT EXISTS any_name FROM any_name + { + $$ = cat_str(4,mm_strdup("create collation if not exists"),$6,mm_strdup("from"),$8); +} +; + + + definition: + '(' def_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +; + + + def_list: + def_elem + { + $$ = $1; +} +| def_list ',' def_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + def_elem: + ColLabel '=' def_arg + { + $$ = cat_str(3,$1,mm_strdup("="),$3); +} +| ColLabel + { + $$ = $1; +} +; + + + def_arg: + func_type + { + $$ = $1; +} +| reserved_keyword + { + $$ = $1; +} +| qual_all_Op + { + $$ = $1; +} +| NumericOnly + { + $$ = $1; +} +| ecpg_sconst + { + $$ = $1; +} +| NONE + { + $$ = mm_strdup("none"); +} +; + + + old_aggr_definition: + '(' old_aggr_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +; + + + old_aggr_list: + old_aggr_elem + { + $$ = $1; +} +| old_aggr_list ',' old_aggr_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + old_aggr_elem: + ecpg_ident '=' def_arg + { + $$ = cat_str(3,$1,mm_strdup("="),$3); +} +; + + + opt_enum_val_list: + enum_val_list + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + enum_val_list: + ecpg_sconst + { + $$ = $1; +} +| enum_val_list ',' ecpg_sconst + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + AlterEnumStmt: + ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists ecpg_sconst + { + $$ = cat_str(5,mm_strdup("alter type"),$3,mm_strdup("add value"),$6,$7); +} +| ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists ecpg_sconst BEFORE ecpg_sconst + { + $$ = cat_str(7,mm_strdup("alter type"),$3,mm_strdup("add value"),$6,$7,mm_strdup("before"),$9); +} +| ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists ecpg_sconst AFTER ecpg_sconst + { + $$ = cat_str(7,mm_strdup("alter type"),$3,mm_strdup("add value"),$6,$7,mm_strdup("after"),$9); +} +| ALTER TYPE_P any_name RENAME VALUE_P ecpg_sconst TO ecpg_sconst + { + $$ = cat_str(6,mm_strdup("alter type"),$3,mm_strdup("rename value"),$6,mm_strdup("to"),$8); +} +; + + + opt_if_not_exists: + IF_P NOT EXISTS + { + $$ = mm_strdup("if not exists"); +} +| + { + $$=EMPTY; } +; + + + CreateOpClassStmt: + CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P Typename USING name opt_opfamily AS opclass_item_list + { + $$ = cat_str(10,mm_strdup("create operator class"),$4,$5,mm_strdup("for type"),$8,mm_strdup("using"),$10,$11,mm_strdup("as"),$13); +} +; + + + opclass_item_list: + opclass_item + { + $$ = $1; +} +| opclass_item_list ',' opclass_item + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + opclass_item: + OPERATOR Iconst any_operator opclass_purpose opt_recheck + { + $$ = cat_str(5,mm_strdup("operator"),$2,$3,$4,$5); +} +| OPERATOR Iconst operator_with_argtypes opclass_purpose opt_recheck + { + $$ = cat_str(5,mm_strdup("operator"),$2,$3,$4,$5); +} +| FUNCTION Iconst function_with_argtypes + { + $$ = cat_str(3,mm_strdup("function"),$2,$3); +} +| FUNCTION Iconst '(' type_list ')' function_with_argtypes + { + $$ = cat_str(6,mm_strdup("function"),$2,mm_strdup("("),$4,mm_strdup(")"),$6); +} +| STORAGE Typename + { + $$ = cat_str(2,mm_strdup("storage"),$2); +} +; + + + opt_default: + DEFAULT + { + $$ = mm_strdup("default"); +} +| + { + $$=EMPTY; } +; + + + opt_opfamily: + FAMILY any_name + { + $$ = cat_str(2,mm_strdup("family"),$2); +} +| + { + $$=EMPTY; } +; + + + opclass_purpose: + FOR SEARCH + { + $$ = mm_strdup("for search"); +} +| FOR ORDER BY any_name + { + $$ = cat_str(2,mm_strdup("for order by"),$4); +} +| + { + $$=EMPTY; } +; + + + opt_recheck: + RECHECK + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = mm_strdup("recheck"); +} +| + { + $$=EMPTY; } +; + + + CreateOpFamilyStmt: + CREATE OPERATOR FAMILY any_name USING name + { + $$ = cat_str(4,mm_strdup("create operator family"),$4,mm_strdup("using"),$6); +} +; + + + AlterOpFamilyStmt: + ALTER OPERATOR FAMILY any_name USING name ADD_P opclass_item_list + { + $$ = cat_str(6,mm_strdup("alter operator family"),$4,mm_strdup("using"),$6,mm_strdup("add"),$8); +} +| ALTER OPERATOR FAMILY any_name USING name DROP opclass_drop_list + { + $$ = cat_str(6,mm_strdup("alter operator family"),$4,mm_strdup("using"),$6,mm_strdup("drop"),$8); +} +; + + + opclass_drop_list: + opclass_drop + { + $$ = $1; +} +| opclass_drop_list ',' opclass_drop + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + opclass_drop: + OPERATOR Iconst '(' type_list ')' + { + $$ = cat_str(5,mm_strdup("operator"),$2,mm_strdup("("),$4,mm_strdup(")")); +} +| FUNCTION Iconst '(' type_list ')' + { + $$ = cat_str(5,mm_strdup("function"),$2,mm_strdup("("),$4,mm_strdup(")")); +} +; + + + DropOpClassStmt: + DROP OPERATOR CLASS any_name USING name opt_drop_behavior + { + $$ = cat_str(5,mm_strdup("drop operator class"),$4,mm_strdup("using"),$6,$7); +} +| DROP OPERATOR CLASS IF_P EXISTS any_name USING name opt_drop_behavior + { + $$ = cat_str(5,mm_strdup("drop operator class if exists"),$6,mm_strdup("using"),$8,$9); +} +; + + + DropOpFamilyStmt: + DROP OPERATOR FAMILY any_name USING name opt_drop_behavior + { + $$ = cat_str(5,mm_strdup("drop operator family"),$4,mm_strdup("using"),$6,$7); +} +| DROP OPERATOR FAMILY IF_P EXISTS any_name USING name opt_drop_behavior + { + $$ = cat_str(5,mm_strdup("drop operator family if exists"),$6,mm_strdup("using"),$8,$9); +} +; + + + DropOwnedStmt: + DROP OWNED BY role_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop owned by"),$4,$5); +} +; + + + ReassignOwnedStmt: + REASSIGN OWNED BY role_list TO RoleSpec + { + $$ = cat_str(4,mm_strdup("reassign owned by"),$4,mm_strdup("to"),$6); +} +; + + + DropStmt: + DROP object_type_any_name IF_P EXISTS any_name_list opt_drop_behavior + { + $$ = cat_str(5,mm_strdup("drop"),$2,mm_strdup("if exists"),$5,$6); +} +| DROP object_type_any_name any_name_list opt_drop_behavior + { + $$ = cat_str(4,mm_strdup("drop"),$2,$3,$4); +} +| DROP drop_type_name IF_P EXISTS name_list opt_drop_behavior + { + $$ = cat_str(5,mm_strdup("drop"),$2,mm_strdup("if exists"),$5,$6); +} +| DROP drop_type_name name_list opt_drop_behavior + { + $$ = cat_str(4,mm_strdup("drop"),$2,$3,$4); +} +| DROP object_type_name_on_any_name name ON any_name opt_drop_behavior + { + $$ = cat_str(6,mm_strdup("drop"),$2,$3,mm_strdup("on"),$5,$6); +} +| DROP object_type_name_on_any_name IF_P EXISTS name ON any_name opt_drop_behavior + { + $$ = cat_str(7,mm_strdup("drop"),$2,mm_strdup("if exists"),$5,mm_strdup("on"),$7,$8); +} +| DROP TYPE_P type_name_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop type"),$3,$4); +} +| DROP TYPE_P IF_P EXISTS type_name_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop type if exists"),$5,$6); +} +| DROP DOMAIN_P type_name_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop domain"),$3,$4); +} +| DROP DOMAIN_P IF_P EXISTS type_name_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop domain if exists"),$5,$6); +} +| DROP INDEX CONCURRENTLY any_name_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop index concurrently"),$4,$5); +} +| DROP INDEX CONCURRENTLY IF_P EXISTS any_name_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop index concurrently if exists"),$6,$7); +} +; + + + object_type_any_name: + TABLE + { + $$ = mm_strdup("table"); +} +| SEQUENCE + { + $$ = mm_strdup("sequence"); +} +| VIEW + { + $$ = mm_strdup("view"); +} +| MATERIALIZED VIEW + { + $$ = mm_strdup("materialized view"); +} +| INDEX + { + $$ = mm_strdup("index"); +} +| FOREIGN TABLE + { + $$ = mm_strdup("foreign table"); +} +| COLLATION + { + $$ = mm_strdup("collation"); +} +| CONVERSION_P + { + $$ = mm_strdup("conversion"); +} +| STATISTICS + { + $$ = mm_strdup("statistics"); +} +| TEXT_P SEARCH PARSER + { + $$ = mm_strdup("text search parser"); +} +| TEXT_P SEARCH DICTIONARY + { + $$ = mm_strdup("text search dictionary"); +} +| TEXT_P SEARCH TEMPLATE + { + $$ = mm_strdup("text search template"); +} +| TEXT_P SEARCH CONFIGURATION + { + $$ = mm_strdup("text search configuration"); +} +; + + + object_type_name: + drop_type_name + { + $$ = $1; +} +| DATABASE + { + $$ = mm_strdup("database"); +} +| ROLE + { + $$ = mm_strdup("role"); +} +| SUBSCRIPTION + { + $$ = mm_strdup("subscription"); +} +| TABLESPACE + { + $$ = mm_strdup("tablespace"); +} +; + + + drop_type_name: + ACCESS METHOD + { + $$ = mm_strdup("access method"); +} +| EVENT TRIGGER + { + $$ = mm_strdup("event trigger"); +} +| EXTENSION + { + $$ = mm_strdup("extension"); +} +| FOREIGN DATA_P WRAPPER + { + $$ = mm_strdup("foreign data wrapper"); +} +| opt_procedural LANGUAGE + { + $$ = cat_str(2,$1,mm_strdup("language")); +} +| PUBLICATION + { + $$ = mm_strdup("publication"); +} +| SCHEMA + { + $$ = mm_strdup("schema"); +} +| SERVER + { + $$ = mm_strdup("server"); +} +; + + + object_type_name_on_any_name: + POLICY + { + $$ = mm_strdup("policy"); +} +| RULE + { + $$ = mm_strdup("rule"); +} +| TRIGGER + { + $$ = mm_strdup("trigger"); +} +; + + + any_name_list: + any_name + { + $$ = $1; +} +| any_name_list ',' any_name + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + any_name: + ColId + { + $$ = $1; +} +| ColId attrs + { + $$ = cat_str(2,$1,$2); +} +; + + + attrs: + '.' attr_name + { + $$ = cat_str(2,mm_strdup("."),$2); +} +| attrs '.' attr_name + { + $$ = cat_str(3,$1,mm_strdup("."),$3); +} +; + + + type_name_list: + Typename + { + $$ = $1; +} +| type_name_list ',' Typename + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + TruncateStmt: + TRUNCATE opt_table relation_expr_list opt_restart_seqs opt_drop_behavior + { + $$ = cat_str(5,mm_strdup("truncate"),$2,$3,$4,$5); +} +; + + + opt_restart_seqs: + CONTINUE_P IDENTITY_P + { + $$ = mm_strdup("continue identity"); +} +| RESTART IDENTITY_P + { + $$ = mm_strdup("restart identity"); +} +| + { + $$=EMPTY; } +; + + + CommentStmt: + COMMENT ON object_type_any_name any_name IS comment_text + { + $$ = cat_str(5,mm_strdup("comment on"),$3,$4,mm_strdup("is"),$6); +} +| COMMENT ON COLUMN any_name IS comment_text + { + $$ = cat_str(4,mm_strdup("comment on column"),$4,mm_strdup("is"),$6); +} +| COMMENT ON object_type_name name IS comment_text + { + $$ = cat_str(5,mm_strdup("comment on"),$3,$4,mm_strdup("is"),$6); +} +| COMMENT ON TYPE_P Typename IS comment_text + { + $$ = cat_str(4,mm_strdup("comment on type"),$4,mm_strdup("is"),$6); +} +| COMMENT ON DOMAIN_P Typename IS comment_text + { + $$ = cat_str(4,mm_strdup("comment on domain"),$4,mm_strdup("is"),$6); +} +| COMMENT ON AGGREGATE aggregate_with_argtypes IS comment_text + { + $$ = cat_str(4,mm_strdup("comment on aggregate"),$4,mm_strdup("is"),$6); +} +| COMMENT ON FUNCTION function_with_argtypes IS comment_text + { + $$ = cat_str(4,mm_strdup("comment on function"),$4,mm_strdup("is"),$6); +} +| COMMENT ON OPERATOR operator_with_argtypes IS comment_text + { + $$ = cat_str(4,mm_strdup("comment on operator"),$4,mm_strdup("is"),$6); +} +| COMMENT ON CONSTRAINT name ON any_name IS comment_text + { + $$ = cat_str(6,mm_strdup("comment on constraint"),$4,mm_strdup("on"),$6,mm_strdup("is"),$8); +} +| COMMENT ON CONSTRAINT name ON DOMAIN_P any_name IS comment_text + { + $$ = cat_str(6,mm_strdup("comment on constraint"),$4,mm_strdup("on domain"),$7,mm_strdup("is"),$9); +} +| COMMENT ON object_type_name_on_any_name name ON any_name IS comment_text + { + $$ = cat_str(7,mm_strdup("comment on"),$3,$4,mm_strdup("on"),$6,mm_strdup("is"),$8); +} +| COMMENT ON PROCEDURE function_with_argtypes IS comment_text + { + $$ = cat_str(4,mm_strdup("comment on procedure"),$4,mm_strdup("is"),$6); +} +| COMMENT ON ROUTINE function_with_argtypes IS comment_text + { + $$ = cat_str(4,mm_strdup("comment on routine"),$4,mm_strdup("is"),$6); +} +| COMMENT ON TRANSFORM FOR Typename LANGUAGE name IS comment_text + { + $$ = cat_str(6,mm_strdup("comment on transform for"),$5,mm_strdup("language"),$7,mm_strdup("is"),$9); +} +| COMMENT ON OPERATOR CLASS any_name USING name IS comment_text + { + $$ = cat_str(6,mm_strdup("comment on operator class"),$5,mm_strdup("using"),$7,mm_strdup("is"),$9); +} +| COMMENT ON OPERATOR FAMILY any_name USING name IS comment_text + { + $$ = cat_str(6,mm_strdup("comment on operator family"),$5,mm_strdup("using"),$7,mm_strdup("is"),$9); +} +| COMMENT ON LARGE_P OBJECT_P NumericOnly IS comment_text + { + $$ = cat_str(4,mm_strdup("comment on large object"),$5,mm_strdup("is"),$7); +} +| COMMENT ON CAST '(' Typename AS Typename ')' IS comment_text + { + $$ = cat_str(6,mm_strdup("comment on cast ("),$5,mm_strdup("as"),$7,mm_strdup(") is"),$10); +} +; + + + comment_text: + ecpg_sconst + { + $$ = $1; +} +| NULL_P + { + $$ = mm_strdup("null"); +} +; + + + SecLabelStmt: + SECURITY LABEL opt_provider ON object_type_any_name any_name IS security_label + { + $$ = cat_str(7,mm_strdup("security label"),$3,mm_strdup("on"),$5,$6,mm_strdup("is"),$8); +} +| SECURITY LABEL opt_provider ON COLUMN any_name IS security_label + { + $$ = cat_str(6,mm_strdup("security label"),$3,mm_strdup("on column"),$6,mm_strdup("is"),$8); +} +| SECURITY LABEL opt_provider ON object_type_name name IS security_label + { + $$ = cat_str(7,mm_strdup("security label"),$3,mm_strdup("on"),$5,$6,mm_strdup("is"),$8); +} +| SECURITY LABEL opt_provider ON TYPE_P Typename IS security_label + { + $$ = cat_str(6,mm_strdup("security label"),$3,mm_strdup("on type"),$6,mm_strdup("is"),$8); +} +| SECURITY LABEL opt_provider ON DOMAIN_P Typename IS security_label + { + $$ = cat_str(6,mm_strdup("security label"),$3,mm_strdup("on domain"),$6,mm_strdup("is"),$8); +} +| SECURITY LABEL opt_provider ON AGGREGATE aggregate_with_argtypes IS security_label + { + $$ = cat_str(6,mm_strdup("security label"),$3,mm_strdup("on aggregate"),$6,mm_strdup("is"),$8); +} +| SECURITY LABEL opt_provider ON FUNCTION function_with_argtypes IS security_label + { + $$ = cat_str(6,mm_strdup("security label"),$3,mm_strdup("on function"),$6,mm_strdup("is"),$8); +} +| SECURITY LABEL opt_provider ON LARGE_P OBJECT_P NumericOnly IS security_label + { + $$ = cat_str(6,mm_strdup("security label"),$3,mm_strdup("on large object"),$7,mm_strdup("is"),$9); +} +| SECURITY LABEL opt_provider ON PROCEDURE function_with_argtypes IS security_label + { + $$ = cat_str(6,mm_strdup("security label"),$3,mm_strdup("on procedure"),$6,mm_strdup("is"),$8); +} +| SECURITY LABEL opt_provider ON ROUTINE function_with_argtypes IS security_label + { + $$ = cat_str(6,mm_strdup("security label"),$3,mm_strdup("on routine"),$6,mm_strdup("is"),$8); +} +; + + + opt_provider: + FOR NonReservedWord_or_Sconst + { + $$ = cat_str(2,mm_strdup("for"),$2); +} +| + { + $$=EMPTY; } +; + + + security_label: + ecpg_sconst + { + $$ = $1; +} +| NULL_P + { + $$ = mm_strdup("null"); +} +; + + + FetchStmt: + FETCH fetch_args + { + $$ = cat_str(2,mm_strdup("fetch"),$2); +} +| MOVE fetch_args + { + $$ = cat_str(2,mm_strdup("move"),$2); +} + | FETCH fetch_args ecpg_fetch_into + { + $$ = cat2_str(mm_strdup("fetch"), $2); + } + | FETCH FORWARD cursor_name opt_ecpg_fetch_into + { + char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3; + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("fetch forward"), cursor_marker); + } + | FETCH FORWARD from_in cursor_name opt_ecpg_fetch_into + { + char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4; + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("fetch forward from"), cursor_marker); + } + | FETCH BACKWARD cursor_name opt_ecpg_fetch_into + { + char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3; + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("fetch backward"), cursor_marker); + } + | FETCH BACKWARD from_in cursor_name opt_ecpg_fetch_into + { + char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4; + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("fetch backward from"), cursor_marker); + } + | MOVE FORWARD cursor_name + { + char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3; + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("move forward"), cursor_marker); + } + | MOVE FORWARD from_in cursor_name + { + char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4; + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("move forward from"), cursor_marker); + } + | MOVE BACKWARD cursor_name + { + char *cursor_marker = $3[0] == ':' ? mm_strdup("$0") : $3; + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("move backward"), cursor_marker); + } + | MOVE BACKWARD from_in cursor_name + { + char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4; + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + $$ = cat_str(2, mm_strdup("move backward from"), cursor_marker); + } +; + + + fetch_args: + cursor_name + { + struct cursor *ptr = add_additional_variables($1, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($1[0] == ':') + { + free($1); + $1 = mm_strdup("$0"); + } + + $$ = $1; +} +| from_in cursor_name + { + struct cursor *ptr = add_additional_variables($2, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($2[0] == ':') + { + free($2); + $2 = mm_strdup("$0"); + } + + $$ = cat_str(2,$1,$2); +} +| NEXT opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($3[0] == ':') + { + free($3); + $3 = mm_strdup("$0"); + } + + $$ = cat_str(3,mm_strdup("next"),$2,$3); +} +| PRIOR opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($3[0] == ':') + { + free($3); + $3 = mm_strdup("$0"); + } + + $$ = cat_str(3,mm_strdup("prior"),$2,$3); +} +| FIRST_P opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($3[0] == ':') + { + free($3); + $3 = mm_strdup("$0"); + } + + $$ = cat_str(3,mm_strdup("first"),$2,$3); +} +| LAST_P opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($3[0] == ':') + { + free($3); + $3 = mm_strdup("$0"); + } + + $$ = cat_str(3,mm_strdup("last"),$2,$3); +} +| ABSOLUTE_P SignedIconst opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($4[0] == ':') + { + free($4); + $4 = mm_strdup("$0"); + } + if ($2[0] == '$') + { + free($2); + $2 = mm_strdup("$0"); + } + + $$ = cat_str(4,mm_strdup("absolute"),$2,$3,$4); +} +| RELATIVE_P SignedIconst opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($4[0] == ':') + { + free($4); + $4 = mm_strdup("$0"); + } + if ($2[0] == '$') + { + free($2); + $2 = mm_strdup("$0"); + } + + $$ = cat_str(4,mm_strdup("relative"),$2,$3,$4); +} +| SignedIconst opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($3[0] == ':') + { + free($3); + $3 = mm_strdup("$0"); + } + if ($1[0] == '$') + { + free($1); + $1 = mm_strdup("$0"); + } + + $$ = cat_str(3,$1,$2,$3); +} +| ALL opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($3, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($3[0] == ':') + { + free($3); + $3 = mm_strdup("$0"); + } + + $$ = cat_str(3,mm_strdup("all"),$2,$3); +} +| FORWARD SignedIconst opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($4[0] == ':') + { + free($4); + $4 = mm_strdup("$0"); + } + if ($2[0] == '$') + { + free($2); + $2 = mm_strdup("$0"); + } + + $$ = cat_str(4,mm_strdup("forward"),$2,$3,$4); +} +| FORWARD ALL opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($4[0] == ':') + { + free($4); + $4 = mm_strdup("$0"); + } + + $$ = cat_str(3,mm_strdup("forward all"),$3,$4); +} +| BACKWARD SignedIconst opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($4[0] == ':') + { + free($4); + $4 = mm_strdup("$0"); + } + if ($2[0] == '$') + { + free($2); + $2 = mm_strdup("$0"); + } + + $$ = cat_str(4,mm_strdup("backward"),$2,$3,$4); +} +| BACKWARD ALL opt_from_in cursor_name + { + struct cursor *ptr = add_additional_variables($4, false); + if (ptr -> connection) + connection = mm_strdup(ptr -> connection); + + if ($4[0] == ':') + { + free($4); + $4 = mm_strdup("$0"); + } + + $$ = cat_str(3,mm_strdup("backward all"),$3,$4); +} +; + + + from_in: + FROM + { + $$ = mm_strdup("from"); +} +| IN_P + { + $$ = mm_strdup("in"); +} +; + + + opt_from_in: + from_in + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + GrantStmt: + GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_option opt_granted_by + { + $$ = cat_str(8,mm_strdup("grant"),$2,mm_strdup("on"),$4,mm_strdup("to"),$6,$7,$8); +} +; + + + RevokeStmt: + REVOKE privileges ON privilege_target FROM grantee_list opt_granted_by opt_drop_behavior + { + $$ = cat_str(8,mm_strdup("revoke"),$2,mm_strdup("on"),$4,mm_strdup("from"),$6,$7,$8); +} +| REVOKE GRANT OPTION FOR privileges ON privilege_target FROM grantee_list opt_granted_by opt_drop_behavior + { + $$ = cat_str(8,mm_strdup("revoke grant option for"),$5,mm_strdup("on"),$7,mm_strdup("from"),$9,$10,$11); +} +; + + + privileges: + privilege_list + { + $$ = $1; +} +| ALL + { + $$ = mm_strdup("all"); +} +| ALL PRIVILEGES + { + $$ = mm_strdup("all privileges"); +} +| ALL '(' columnList ')' + { + $$ = cat_str(3,mm_strdup("all ("),$3,mm_strdup(")")); +} +| ALL PRIVILEGES '(' columnList ')' + { + $$ = cat_str(3,mm_strdup("all privileges ("),$4,mm_strdup(")")); +} +; + + + privilege_list: + privilege + { + $$ = $1; +} +| privilege_list ',' privilege + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + privilege: + SELECT opt_column_list + { + $$ = cat_str(2,mm_strdup("select"),$2); +} +| REFERENCES opt_column_list + { + $$ = cat_str(2,mm_strdup("references"),$2); +} +| CREATE opt_column_list + { + $$ = cat_str(2,mm_strdup("create"),$2); +} +| ColId opt_column_list + { + $$ = cat_str(2,$1,$2); +} +; + + + privilege_target: + qualified_name_list + { + $$ = $1; +} +| TABLE qualified_name_list + { + $$ = cat_str(2,mm_strdup("table"),$2); +} +| SEQUENCE qualified_name_list + { + $$ = cat_str(2,mm_strdup("sequence"),$2); +} +| FOREIGN DATA_P WRAPPER name_list + { + $$ = cat_str(2,mm_strdup("foreign data wrapper"),$4); +} +| FOREIGN SERVER name_list + { + $$ = cat_str(2,mm_strdup("foreign server"),$3); +} +| FUNCTION function_with_argtypes_list + { + $$ = cat_str(2,mm_strdup("function"),$2); +} +| PROCEDURE function_with_argtypes_list + { + $$ = cat_str(2,mm_strdup("procedure"),$2); +} +| ROUTINE function_with_argtypes_list + { + $$ = cat_str(2,mm_strdup("routine"),$2); +} +| DATABASE name_list + { + $$ = cat_str(2,mm_strdup("database"),$2); +} +| DOMAIN_P any_name_list + { + $$ = cat_str(2,mm_strdup("domain"),$2); +} +| LANGUAGE name_list + { + $$ = cat_str(2,mm_strdup("language"),$2); +} +| LARGE_P OBJECT_P NumericOnly_list + { + $$ = cat_str(2,mm_strdup("large object"),$3); +} +| SCHEMA name_list + { + $$ = cat_str(2,mm_strdup("schema"),$2); +} +| TABLESPACE name_list + { + $$ = cat_str(2,mm_strdup("tablespace"),$2); +} +| TYPE_P any_name_list + { + $$ = cat_str(2,mm_strdup("type"),$2); +} +| ALL TABLES IN_P SCHEMA name_list + { + $$ = cat_str(2,mm_strdup("all tables in schema"),$5); +} +| ALL SEQUENCES IN_P SCHEMA name_list + { + $$ = cat_str(2,mm_strdup("all sequences in schema"),$5); +} +| ALL FUNCTIONS IN_P SCHEMA name_list + { + $$ = cat_str(2,mm_strdup("all functions in schema"),$5); +} +| ALL PROCEDURES IN_P SCHEMA name_list + { + $$ = cat_str(2,mm_strdup("all procedures in schema"),$5); +} +| ALL ROUTINES IN_P SCHEMA name_list + { + $$ = cat_str(2,mm_strdup("all routines in schema"),$5); +} +; + + + grantee_list: + grantee + { + $$ = $1; +} +| grantee_list ',' grantee + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + grantee: + RoleSpec + { + $$ = $1; +} +| GROUP_P RoleSpec + { + $$ = cat_str(2,mm_strdup("group"),$2); +} +; + + + opt_grant_grant_option: + WITH GRANT OPTION + { + $$ = mm_strdup("with grant option"); +} +| + { + $$=EMPTY; } +; + + + GrantRoleStmt: + GRANT privilege_list TO role_list opt_grant_admin_option opt_granted_by + { + $$ = cat_str(6,mm_strdup("grant"),$2,mm_strdup("to"),$4,$5,$6); +} +; + + + RevokeRoleStmt: + REVOKE privilege_list FROM role_list opt_granted_by opt_drop_behavior + { + $$ = cat_str(6,mm_strdup("revoke"),$2,mm_strdup("from"),$4,$5,$6); +} +| REVOKE ADMIN OPTION FOR privilege_list FROM role_list opt_granted_by opt_drop_behavior + { + $$ = cat_str(6,mm_strdup("revoke admin option for"),$5,mm_strdup("from"),$7,$8,$9); +} +; + + + opt_grant_admin_option: + WITH ADMIN OPTION + { + $$ = mm_strdup("with admin option"); +} +| + { + $$=EMPTY; } +; + + + opt_granted_by: + GRANTED BY RoleSpec + { + $$ = cat_str(2,mm_strdup("granted by"),$3); +} +| + { + $$=EMPTY; } +; + + + AlterDefaultPrivilegesStmt: + ALTER DEFAULT PRIVILEGES DefACLOptionList DefACLAction + { + $$ = cat_str(3,mm_strdup("alter default privileges"),$4,$5); +} +; + + + DefACLOptionList: + DefACLOptionList DefACLOption + { + $$ = cat_str(2,$1,$2); +} +| + { + $$=EMPTY; } +; + + + DefACLOption: + IN_P SCHEMA name_list + { + $$ = cat_str(2,mm_strdup("in schema"),$3); +} +| FOR ROLE role_list + { + $$ = cat_str(2,mm_strdup("for role"),$3); +} +| FOR USER role_list + { + $$ = cat_str(2,mm_strdup("for user"),$3); +} +; + + + DefACLAction: + GRANT privileges ON defacl_privilege_target TO grantee_list opt_grant_grant_option + { + $$ = cat_str(7,mm_strdup("grant"),$2,mm_strdup("on"),$4,mm_strdup("to"),$6,$7); +} +| REVOKE privileges ON defacl_privilege_target FROM grantee_list opt_drop_behavior + { + $$ = cat_str(7,mm_strdup("revoke"),$2,mm_strdup("on"),$4,mm_strdup("from"),$6,$7); +} +| REVOKE GRANT OPTION FOR privileges ON defacl_privilege_target FROM grantee_list opt_drop_behavior + { + $$ = cat_str(7,mm_strdup("revoke grant option for"),$5,mm_strdup("on"),$7,mm_strdup("from"),$9,$10); +} +; + + + defacl_privilege_target: + TABLES + { + $$ = mm_strdup("tables"); +} +| FUNCTIONS + { + $$ = mm_strdup("functions"); +} +| ROUTINES + { + $$ = mm_strdup("routines"); +} +| SEQUENCES + { + $$ = mm_strdup("sequences"); +} +| TYPES_P + { + $$ = mm_strdup("types"); +} +| SCHEMAS + { + $$ = mm_strdup("schemas"); +} +; + + + IndexStmt: + CREATE opt_unique INDEX opt_concurrently opt_index_name ON relation_expr access_method_clause '(' index_params ')' opt_include opt_reloptions OptTableSpace where_clause + { + $$ = cat_str(15,mm_strdup("create"),$2,mm_strdup("index"),$4,$5,mm_strdup("on"),$7,$8,mm_strdup("("),$10,mm_strdup(")"),$12,$13,$14,$15); +} +| CREATE opt_unique INDEX opt_concurrently IF_P NOT EXISTS name ON relation_expr access_method_clause '(' index_params ')' opt_include opt_reloptions OptTableSpace where_clause + { + $$ = cat_str(16,mm_strdup("create"),$2,mm_strdup("index"),$4,mm_strdup("if not exists"),$8,mm_strdup("on"),$10,$11,mm_strdup("("),$13,mm_strdup(")"),$15,$16,$17,$18); +} +; + + + opt_unique: + UNIQUE + { + $$ = mm_strdup("unique"); +} +| + { + $$=EMPTY; } +; + + + opt_concurrently: + CONCURRENTLY + { + $$ = mm_strdup("concurrently"); +} +| + { + $$=EMPTY; } +; + + + opt_index_name: + name + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + access_method_clause: + USING name + { + $$ = cat_str(2,mm_strdup("using"),$2); +} +| + { + $$=EMPTY; } +; + + + index_params: + index_elem + { + $$ = $1; +} +| index_params ',' index_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + index_elem_options: + opt_collate opt_class opt_asc_desc opt_nulls_order + { + $$ = cat_str(4,$1,$2,$3,$4); +} +| opt_collate any_name reloptions opt_asc_desc opt_nulls_order + { + $$ = cat_str(5,$1,$2,$3,$4,$5); +} +; + + + index_elem: + ColId index_elem_options + { + $$ = cat_str(2,$1,$2); +} +| func_expr_windowless index_elem_options + { + $$ = cat_str(2,$1,$2); +} +| '(' a_expr ')' index_elem_options + { + $$ = cat_str(4,mm_strdup("("),$2,mm_strdup(")"),$4); +} +; + + + opt_include: + INCLUDE '(' index_including_params ')' + { + $$ = cat_str(3,mm_strdup("include ("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + index_including_params: + index_elem + { + $$ = $1; +} +| index_including_params ',' index_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + opt_collate: + COLLATE any_name + { + $$ = cat_str(2,mm_strdup("collate"),$2); +} +| + { + $$=EMPTY; } +; + + + opt_class: + any_name + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + opt_asc_desc: + ASC + { + $$ = mm_strdup("asc"); +} +| DESC + { + $$ = mm_strdup("desc"); +} +| + { + $$=EMPTY; } +; + + + opt_nulls_order: + NULLS_LA FIRST_P + { + $$ = mm_strdup("nulls first"); +} +| NULLS_LA LAST_P + { + $$ = mm_strdup("nulls last"); +} +| + { + $$=EMPTY; } +; + + + CreateFunctionStmt: + CREATE opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS func_return opt_createfunc_opt_list opt_routine_body + { + $$ = cat_str(9,mm_strdup("create"),$2,mm_strdup("function"),$4,$5,mm_strdup("returns"),$7,$8,$9); +} +| CREATE opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS TABLE '(' table_func_column_list ')' opt_createfunc_opt_list opt_routine_body + { + $$ = cat_str(10,mm_strdup("create"),$2,mm_strdup("function"),$4,$5,mm_strdup("returns table ("),$9,mm_strdup(")"),$11,$12); +} +| CREATE opt_or_replace FUNCTION func_name func_args_with_defaults opt_createfunc_opt_list opt_routine_body + { + $$ = cat_str(7,mm_strdup("create"),$2,mm_strdup("function"),$4,$5,$6,$7); +} +| CREATE opt_or_replace PROCEDURE func_name func_args_with_defaults opt_createfunc_opt_list opt_routine_body + { + $$ = cat_str(7,mm_strdup("create"),$2,mm_strdup("procedure"),$4,$5,$6,$7); +} +; + + + opt_or_replace: + OR REPLACE + { + $$ = mm_strdup("or replace"); +} +| + { + $$=EMPTY; } +; + + + func_args: + '(' func_args_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| '(' ')' + { + $$ = mm_strdup("( )"); +} +; + + + func_args_list: + func_arg + { + $$ = $1; +} +| func_args_list ',' func_arg + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + function_with_argtypes_list: + function_with_argtypes + { + $$ = $1; +} +| function_with_argtypes_list ',' function_with_argtypes + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + function_with_argtypes: + func_name func_args + { + $$ = cat_str(2,$1,$2); +} +| type_func_name_keyword + { + $$ = $1; +} +| ColId + { + $$ = $1; +} +| ColId indirection + { + $$ = cat_str(2,$1,$2); +} +; + + + func_args_with_defaults: + '(' func_args_with_defaults_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| '(' ')' + { + $$ = mm_strdup("( )"); +} +; + + + func_args_with_defaults_list: + func_arg_with_default + { + $$ = $1; +} +| func_args_with_defaults_list ',' func_arg_with_default + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + func_arg: + arg_class param_name func_type + { + $$ = cat_str(3,$1,$2,$3); +} +| param_name arg_class func_type + { + $$ = cat_str(3,$1,$2,$3); +} +| param_name func_type + { + $$ = cat_str(2,$1,$2); +} +| arg_class func_type + { + $$ = cat_str(2,$1,$2); +} +| func_type + { + $$ = $1; +} +; + + + arg_class: + IN_P + { + $$ = mm_strdup("in"); +} +| OUT_P + { + $$ = mm_strdup("out"); +} +| INOUT + { + $$ = mm_strdup("inout"); +} +| IN_P OUT_P + { + $$ = mm_strdup("in out"); +} +| VARIADIC + { + $$ = mm_strdup("variadic"); +} +; + + + param_name: + type_function_name + { + $$ = $1; +} +; + + + func_return: + func_type + { + $$ = $1; +} +; + + + func_type: + Typename + { + $$ = $1; +} +| type_function_name attrs '%' TYPE_P + { + $$ = cat_str(3,$1,$2,mm_strdup("% type")); +} +| SETOF type_function_name attrs '%' TYPE_P + { + $$ = cat_str(4,mm_strdup("setof"),$2,$3,mm_strdup("% type")); +} +; + + + func_arg_with_default: + func_arg + { + $$ = $1; +} +| func_arg DEFAULT a_expr + { + $$ = cat_str(3,$1,mm_strdup("default"),$3); +} +| func_arg '=' a_expr + { + $$ = cat_str(3,$1,mm_strdup("="),$3); +} +; + + + aggr_arg: + func_arg + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = $1; +} +; + + + aggr_args: + '(' '*' ')' + { + $$ = mm_strdup("( * )"); +} +| '(' aggr_args_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| '(' ORDER BY aggr_args_list ')' + { + $$ = cat_str(3,mm_strdup("( order by"),$4,mm_strdup(")")); +} +| '(' aggr_args_list ORDER BY aggr_args_list ')' + { + $$ = cat_str(5,mm_strdup("("),$2,mm_strdup("order by"),$5,mm_strdup(")")); +} +; + + + aggr_args_list: + aggr_arg + { + $$ = $1; +} +| aggr_args_list ',' aggr_arg + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + aggregate_with_argtypes: + func_name aggr_args + { + $$ = cat_str(2,$1,$2); +} +; + + + aggregate_with_argtypes_list: + aggregate_with_argtypes + { + $$ = $1; +} +| aggregate_with_argtypes_list ',' aggregate_with_argtypes + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + opt_createfunc_opt_list: + createfunc_opt_list + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + createfunc_opt_list: + createfunc_opt_item + { + $$ = $1; +} +| createfunc_opt_list createfunc_opt_item + { + $$ = cat_str(2,$1,$2); +} +; + + + common_func_opt_item: + CALLED ON NULL_P INPUT_P + { + $$ = mm_strdup("called on null input"); +} +| RETURNS NULL_P ON NULL_P INPUT_P + { + $$ = mm_strdup("returns null on null input"); +} +| STRICT_P + { + $$ = mm_strdup("strict"); +} +| IMMUTABLE + { + $$ = mm_strdup("immutable"); +} +| STABLE + { + $$ = mm_strdup("stable"); +} +| VOLATILE + { + $$ = mm_strdup("volatile"); +} +| EXTERNAL SECURITY DEFINER + { + $$ = mm_strdup("external security definer"); +} +| EXTERNAL SECURITY INVOKER + { + $$ = mm_strdup("external security invoker"); +} +| SECURITY DEFINER + { + $$ = mm_strdup("security definer"); +} +| SECURITY INVOKER + { + $$ = mm_strdup("security invoker"); +} +| LEAKPROOF + { + $$ = mm_strdup("leakproof"); +} +| NOT LEAKPROOF + { + $$ = mm_strdup("not leakproof"); +} +| COST NumericOnly + { + $$ = cat_str(2,mm_strdup("cost"),$2); +} +| ROWS NumericOnly + { + $$ = cat_str(2,mm_strdup("rows"),$2); +} +| SUPPORT any_name + { + $$ = cat_str(2,mm_strdup("support"),$2); +} +| FunctionSetResetClause + { + $$ = $1; +} +| PARALLEL ColId + { + $$ = cat_str(2,mm_strdup("parallel"),$2); +} +; + + + createfunc_opt_item: + AS func_as + { + $$ = cat_str(2,mm_strdup("as"),$2); +} +| LANGUAGE NonReservedWord_or_Sconst + { + $$ = cat_str(2,mm_strdup("language"),$2); +} +| TRANSFORM transform_type_list + { + $$ = cat_str(2,mm_strdup("transform"),$2); +} +| WINDOW + { + $$ = mm_strdup("window"); +} +| common_func_opt_item + { + $$ = $1; +} +; + + + func_as: + ecpg_sconst + { + $$ = $1; +} +| ecpg_sconst ',' ecpg_sconst + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + ReturnStmt: + RETURN a_expr + { + $$ = cat_str(2,mm_strdup("return"),$2); +} +; + + + opt_routine_body: + ReturnStmt + { + $$ = $1; +} +| BEGIN_P ATOMIC routine_body_stmt_list END_P + { + $$ = cat_str(3,mm_strdup("begin atomic"),$3,mm_strdup("end")); +} +| + { + $$=EMPTY; } +; + + + routine_body_stmt_list: + routine_body_stmt_list routine_body_stmt ';' + { + $$ = cat_str(3,$1,$2,mm_strdup(";")); +} +| + { + $$=EMPTY; } +; + + + routine_body_stmt: + stmt + { + $$ = $1; +} +| ReturnStmt + { + $$ = $1; +} +; + + + transform_type_list: + FOR TYPE_P Typename + { + $$ = cat_str(2,mm_strdup("for type"),$3); +} +| transform_type_list ',' FOR TYPE_P Typename + { + $$ = cat_str(3,$1,mm_strdup(", for type"),$5); +} +; + + + opt_definition: + WITH definition + { + $$ = cat_str(2,mm_strdup("with"),$2); +} +| + { + $$=EMPTY; } +; + + + table_func_column: + param_name func_type + { + $$ = cat_str(2,$1,$2); +} +; + + + table_func_column_list: + table_func_column + { + $$ = $1; +} +| table_func_column_list ',' table_func_column + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + AlterFunctionStmt: + ALTER FUNCTION function_with_argtypes alterfunc_opt_list opt_restrict + { + $$ = cat_str(4,mm_strdup("alter function"),$3,$4,$5); +} +| ALTER PROCEDURE function_with_argtypes alterfunc_opt_list opt_restrict + { + $$ = cat_str(4,mm_strdup("alter procedure"),$3,$4,$5); +} +| ALTER ROUTINE function_with_argtypes alterfunc_opt_list opt_restrict + { + $$ = cat_str(4,mm_strdup("alter routine"),$3,$4,$5); +} +; + + + alterfunc_opt_list: + common_func_opt_item + { + $$ = $1; +} +| alterfunc_opt_list common_func_opt_item + { + $$ = cat_str(2,$1,$2); +} +; + + + opt_restrict: + RESTRICT + { + $$ = mm_strdup("restrict"); +} +| + { + $$=EMPTY; } +; + + + RemoveFuncStmt: + DROP FUNCTION function_with_argtypes_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop function"),$3,$4); +} +| DROP FUNCTION IF_P EXISTS function_with_argtypes_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop function if exists"),$5,$6); +} +| DROP PROCEDURE function_with_argtypes_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop procedure"),$3,$4); +} +| DROP PROCEDURE IF_P EXISTS function_with_argtypes_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop procedure if exists"),$5,$6); +} +| DROP ROUTINE function_with_argtypes_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop routine"),$3,$4); +} +| DROP ROUTINE IF_P EXISTS function_with_argtypes_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop routine if exists"),$5,$6); +} +; + + + RemoveAggrStmt: + DROP AGGREGATE aggregate_with_argtypes_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop aggregate"),$3,$4); +} +| DROP AGGREGATE IF_P EXISTS aggregate_with_argtypes_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop aggregate if exists"),$5,$6); +} +; + + + RemoveOperStmt: + DROP OPERATOR operator_with_argtypes_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop operator"),$3,$4); +} +| DROP OPERATOR IF_P EXISTS operator_with_argtypes_list opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop operator if exists"),$5,$6); +} +; + + + oper_argtypes: + '(' Typename ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| '(' Typename ',' Typename ')' + { + $$ = cat_str(5,mm_strdup("("),$2,mm_strdup(","),$4,mm_strdup(")")); +} +| '(' NONE ',' Typename ')' + { + $$ = cat_str(3,mm_strdup("( none ,"),$4,mm_strdup(")")); +} +| '(' Typename ',' NONE ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(", none )")); +} +; + + + any_operator: + all_Op + { + $$ = $1; +} +| ColId '.' any_operator + { + $$ = cat_str(3,$1,mm_strdup("."),$3); +} +; + + + operator_with_argtypes_list: + operator_with_argtypes + { + $$ = $1; +} +| operator_with_argtypes_list ',' operator_with_argtypes + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + operator_with_argtypes: + any_operator oper_argtypes + { + $$ = cat_str(2,$1,$2); +} +; + + + DoStmt: + DO dostmt_opt_list + { + $$ = cat_str(2,mm_strdup("do"),$2); +} +; + + + dostmt_opt_list: + dostmt_opt_item + { + $$ = $1; +} +| dostmt_opt_list dostmt_opt_item + { + $$ = cat_str(2,$1,$2); +} +; + + + dostmt_opt_item: + ecpg_sconst + { + $$ = $1; +} +| LANGUAGE NonReservedWord_or_Sconst + { + $$ = cat_str(2,mm_strdup("language"),$2); +} +; + + + CreateCastStmt: + CREATE CAST '(' Typename AS Typename ')' WITH FUNCTION function_with_argtypes cast_context + { + $$ = cat_str(7,mm_strdup("create cast ("),$4,mm_strdup("as"),$6,mm_strdup(") with function"),$10,$11); +} +| CREATE CAST '(' Typename AS Typename ')' WITHOUT FUNCTION cast_context + { + $$ = cat_str(6,mm_strdup("create cast ("),$4,mm_strdup("as"),$6,mm_strdup(") without function"),$10); +} +| CREATE CAST '(' Typename AS Typename ')' WITH INOUT cast_context + { + $$ = cat_str(6,mm_strdup("create cast ("),$4,mm_strdup("as"),$6,mm_strdup(") with inout"),$10); +} +; + + + cast_context: + AS IMPLICIT_P + { + $$ = mm_strdup("as implicit"); +} +| AS ASSIGNMENT + { + $$ = mm_strdup("as assignment"); +} +| + { + $$=EMPTY; } +; + + + DropCastStmt: + DROP CAST opt_if_exists '(' Typename AS Typename ')' opt_drop_behavior + { + $$ = cat_str(8,mm_strdup("drop cast"),$3,mm_strdup("("),$5,mm_strdup("as"),$7,mm_strdup(")"),$9); +} +; + + + opt_if_exists: + IF_P EXISTS + { + $$ = mm_strdup("if exists"); +} +| + { + $$=EMPTY; } +; + + + CreateTransformStmt: + CREATE opt_or_replace TRANSFORM FOR Typename LANGUAGE name '(' transform_element_list ')' + { + $$ = cat_str(9,mm_strdup("create"),$2,mm_strdup("transform for"),$5,mm_strdup("language"),$7,mm_strdup("("),$9,mm_strdup(")")); +} +; + + + transform_element_list: + FROM SQL_P WITH FUNCTION function_with_argtypes ',' TO SQL_P WITH FUNCTION function_with_argtypes + { + $$ = cat_str(4,mm_strdup("from sql with function"),$5,mm_strdup(", to sql with function"),$11); +} +| TO SQL_P WITH FUNCTION function_with_argtypes ',' FROM SQL_P WITH FUNCTION function_with_argtypes + { + $$ = cat_str(4,mm_strdup("to sql with function"),$5,mm_strdup(", from sql with function"),$11); +} +| FROM SQL_P WITH FUNCTION function_with_argtypes + { + $$ = cat_str(2,mm_strdup("from sql with function"),$5); +} +| TO SQL_P WITH FUNCTION function_with_argtypes + { + $$ = cat_str(2,mm_strdup("to sql with function"),$5); +} +; + + + DropTransformStmt: + DROP TRANSFORM opt_if_exists FOR Typename LANGUAGE name opt_drop_behavior + { + $$ = cat_str(7,mm_strdup("drop transform"),$3,mm_strdup("for"),$5,mm_strdup("language"),$7,$8); +} +; + + + ReindexStmt: + REINDEX reindex_target_type opt_concurrently qualified_name + { + $$ = cat_str(4,mm_strdup("reindex"),$2,$3,$4); +} +| REINDEX reindex_target_multitable opt_concurrently name + { + $$ = cat_str(4,mm_strdup("reindex"),$2,$3,$4); +} +| REINDEX '(' utility_option_list ')' reindex_target_type opt_concurrently qualified_name + { + $$ = cat_str(6,mm_strdup("reindex ("),$3,mm_strdup(")"),$5,$6,$7); +} +| REINDEX '(' utility_option_list ')' reindex_target_multitable opt_concurrently name + { + $$ = cat_str(6,mm_strdup("reindex ("),$3,mm_strdup(")"),$5,$6,$7); +} +; + + + reindex_target_type: + INDEX + { + $$ = mm_strdup("index"); +} +| TABLE + { + $$ = mm_strdup("table"); +} +; + + + reindex_target_multitable: + SCHEMA + { + $$ = mm_strdup("schema"); +} +| SYSTEM_P + { + $$ = mm_strdup("system"); +} +| DATABASE + { + $$ = mm_strdup("database"); +} +; + + + AlterTblSpcStmt: + ALTER TABLESPACE name SET reloptions + { + $$ = cat_str(4,mm_strdup("alter tablespace"),$3,mm_strdup("set"),$5); +} +| ALTER TABLESPACE name RESET reloptions + { + $$ = cat_str(4,mm_strdup("alter tablespace"),$3,mm_strdup("reset"),$5); +} +; + + + RenameStmt: + ALTER AGGREGATE aggregate_with_argtypes RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter aggregate"),$3,mm_strdup("rename to"),$6); +} +| ALTER COLLATION any_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter collation"),$3,mm_strdup("rename to"),$6); +} +| ALTER CONVERSION_P any_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter conversion"),$3,mm_strdup("rename to"),$6); +} +| ALTER DATABASE name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter database"),$3,mm_strdup("rename to"),$6); +} +| ALTER DOMAIN_P any_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter domain"),$3,mm_strdup("rename to"),$6); +} +| ALTER DOMAIN_P any_name RENAME CONSTRAINT name TO name + { + $$ = cat_str(6,mm_strdup("alter domain"),$3,mm_strdup("rename constraint"),$6,mm_strdup("to"),$8); +} +| ALTER FOREIGN DATA_P WRAPPER name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter foreign data wrapper"),$5,mm_strdup("rename to"),$8); +} +| ALTER FUNCTION function_with_argtypes RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter function"),$3,mm_strdup("rename to"),$6); +} +| ALTER GROUP_P RoleId RENAME TO RoleId + { + $$ = cat_str(4,mm_strdup("alter group"),$3,mm_strdup("rename to"),$6); +} +| ALTER opt_procedural LANGUAGE name RENAME TO name + { + $$ = cat_str(6,mm_strdup("alter"),$2,mm_strdup("language"),$4,mm_strdup("rename to"),$7); +} +| ALTER OPERATOR CLASS any_name USING name RENAME TO name + { + $$ = cat_str(6,mm_strdup("alter operator class"),$4,mm_strdup("using"),$6,mm_strdup("rename to"),$9); +} +| ALTER OPERATOR FAMILY any_name USING name RENAME TO name + { + $$ = cat_str(6,mm_strdup("alter operator family"),$4,mm_strdup("using"),$6,mm_strdup("rename to"),$9); +} +| ALTER POLICY name ON qualified_name RENAME TO name + { + $$ = cat_str(6,mm_strdup("alter policy"),$3,mm_strdup("on"),$5,mm_strdup("rename to"),$8); +} +| ALTER POLICY IF_P EXISTS name ON qualified_name RENAME TO name + { + $$ = cat_str(6,mm_strdup("alter policy if exists"),$5,mm_strdup("on"),$7,mm_strdup("rename to"),$10); +} +| ALTER PROCEDURE function_with_argtypes RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter procedure"),$3,mm_strdup("rename to"),$6); +} +| ALTER PUBLICATION name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter publication"),$3,mm_strdup("rename to"),$6); +} +| ALTER ROUTINE function_with_argtypes RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter routine"),$3,mm_strdup("rename to"),$6); +} +| ALTER SCHEMA name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter schema"),$3,mm_strdup("rename to"),$6); +} +| ALTER SERVER name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter server"),$3,mm_strdup("rename to"),$6); +} +| ALTER SUBSCRIPTION name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter subscription"),$3,mm_strdup("rename to"),$6); +} +| ALTER TABLE relation_expr RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter table"),$3,mm_strdup("rename to"),$6); +} +| ALTER TABLE IF_P EXISTS relation_expr RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter table if exists"),$5,mm_strdup("rename to"),$8); +} +| ALTER SEQUENCE qualified_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter sequence"),$3,mm_strdup("rename to"),$6); +} +| ALTER SEQUENCE IF_P EXISTS qualified_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter sequence if exists"),$5,mm_strdup("rename to"),$8); +} +| ALTER VIEW qualified_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter view"),$3,mm_strdup("rename to"),$6); +} +| ALTER VIEW IF_P EXISTS qualified_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter view if exists"),$5,mm_strdup("rename to"),$8); +} +| ALTER MATERIALIZED VIEW qualified_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter materialized view"),$4,mm_strdup("rename to"),$7); +} +| ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter materialized view if exists"),$6,mm_strdup("rename to"),$9); +} +| ALTER INDEX qualified_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter index"),$3,mm_strdup("rename to"),$6); +} +| ALTER INDEX IF_P EXISTS qualified_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter index if exists"),$5,mm_strdup("rename to"),$8); +} +| ALTER FOREIGN TABLE relation_expr RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter foreign table"),$4,mm_strdup("rename to"),$7); +} +| ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter foreign table if exists"),$6,mm_strdup("rename to"),$9); +} +| ALTER TABLE relation_expr RENAME opt_column name TO name + { + $$ = cat_str(7,mm_strdup("alter table"),$3,mm_strdup("rename"),$5,$6,mm_strdup("to"),$8); +} +| ALTER TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name + { + $$ = cat_str(7,mm_strdup("alter table if exists"),$5,mm_strdup("rename"),$7,$8,mm_strdup("to"),$10); +} +| ALTER VIEW qualified_name RENAME opt_column name TO name + { + $$ = cat_str(7,mm_strdup("alter view"),$3,mm_strdup("rename"),$5,$6,mm_strdup("to"),$8); +} +| ALTER VIEW IF_P EXISTS qualified_name RENAME opt_column name TO name + { + $$ = cat_str(7,mm_strdup("alter view if exists"),$5,mm_strdup("rename"),$7,$8,mm_strdup("to"),$10); +} +| ALTER MATERIALIZED VIEW qualified_name RENAME opt_column name TO name + { + $$ = cat_str(7,mm_strdup("alter materialized view"),$4,mm_strdup("rename"),$6,$7,mm_strdup("to"),$9); +} +| ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name RENAME opt_column name TO name + { + $$ = cat_str(7,mm_strdup("alter materialized view if exists"),$6,mm_strdup("rename"),$8,$9,mm_strdup("to"),$11); +} +| ALTER TABLE relation_expr RENAME CONSTRAINT name TO name + { + $$ = cat_str(6,mm_strdup("alter table"),$3,mm_strdup("rename constraint"),$6,mm_strdup("to"),$8); +} +| ALTER TABLE IF_P EXISTS relation_expr RENAME CONSTRAINT name TO name + { + $$ = cat_str(6,mm_strdup("alter table if exists"),$5,mm_strdup("rename constraint"),$8,mm_strdup("to"),$10); +} +| ALTER FOREIGN TABLE relation_expr RENAME opt_column name TO name + { + $$ = cat_str(7,mm_strdup("alter foreign table"),$4,mm_strdup("rename"),$6,$7,mm_strdup("to"),$9); +} +| ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name + { + $$ = cat_str(7,mm_strdup("alter foreign table if exists"),$6,mm_strdup("rename"),$8,$9,mm_strdup("to"),$11); +} +| ALTER RULE name ON qualified_name RENAME TO name + { + $$ = cat_str(6,mm_strdup("alter rule"),$3,mm_strdup("on"),$5,mm_strdup("rename to"),$8); +} +| ALTER TRIGGER name ON qualified_name RENAME TO name + { + $$ = cat_str(6,mm_strdup("alter trigger"),$3,mm_strdup("on"),$5,mm_strdup("rename to"),$8); +} +| ALTER EVENT TRIGGER name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter event trigger"),$4,mm_strdup("rename to"),$7); +} +| ALTER ROLE RoleId RENAME TO RoleId + { + $$ = cat_str(4,mm_strdup("alter role"),$3,mm_strdup("rename to"),$6); +} +| ALTER USER RoleId RENAME TO RoleId + { + $$ = cat_str(4,mm_strdup("alter user"),$3,mm_strdup("rename to"),$6); +} +| ALTER TABLESPACE name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter tablespace"),$3,mm_strdup("rename to"),$6); +} +| ALTER STATISTICS any_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter statistics"),$3,mm_strdup("rename to"),$6); +} +| ALTER TEXT_P SEARCH PARSER any_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter text search parser"),$5,mm_strdup("rename to"),$8); +} +| ALTER TEXT_P SEARCH DICTIONARY any_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter text search dictionary"),$5,mm_strdup("rename to"),$8); +} +| ALTER TEXT_P SEARCH TEMPLATE any_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter text search template"),$5,mm_strdup("rename to"),$8); +} +| ALTER TEXT_P SEARCH CONFIGURATION any_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter text search configuration"),$5,mm_strdup("rename to"),$8); +} +| ALTER TYPE_P any_name RENAME TO name + { + $$ = cat_str(4,mm_strdup("alter type"),$3,mm_strdup("rename to"),$6); +} +| ALTER TYPE_P any_name RENAME ATTRIBUTE name TO name opt_drop_behavior + { + $$ = cat_str(7,mm_strdup("alter type"),$3,mm_strdup("rename attribute"),$6,mm_strdup("to"),$8,$9); +} +; + + + opt_column: + COLUMN + { + $$ = mm_strdup("column"); +} +| + { + $$=EMPTY; } +; + + + opt_set_data: + SET DATA_P + { + $$ = mm_strdup("set data"); +} +| + { + $$=EMPTY; } +; + + + AlterObjectDependsStmt: + ALTER FUNCTION function_with_argtypes opt_no DEPENDS ON EXTENSION name + { + $$ = cat_str(5,mm_strdup("alter function"),$3,$4,mm_strdup("depends on extension"),$8); +} +| ALTER PROCEDURE function_with_argtypes opt_no DEPENDS ON EXTENSION name + { + $$ = cat_str(5,mm_strdup("alter procedure"),$3,$4,mm_strdup("depends on extension"),$8); +} +| ALTER ROUTINE function_with_argtypes opt_no DEPENDS ON EXTENSION name + { + $$ = cat_str(5,mm_strdup("alter routine"),$3,$4,mm_strdup("depends on extension"),$8); +} +| ALTER TRIGGER name ON qualified_name opt_no DEPENDS ON EXTENSION name + { + $$ = cat_str(7,mm_strdup("alter trigger"),$3,mm_strdup("on"),$5,$6,mm_strdup("depends on extension"),$10); +} +| ALTER MATERIALIZED VIEW qualified_name opt_no DEPENDS ON EXTENSION name + { + $$ = cat_str(5,mm_strdup("alter materialized view"),$4,$5,mm_strdup("depends on extension"),$9); +} +| ALTER INDEX qualified_name opt_no DEPENDS ON EXTENSION name + { + $$ = cat_str(5,mm_strdup("alter index"),$3,$4,mm_strdup("depends on extension"),$8); +} +; + + + opt_no: + NO + { + $$ = mm_strdup("no"); +} +| + { + $$=EMPTY; } +; + + + AlterObjectSchemaStmt: + ALTER AGGREGATE aggregate_with_argtypes SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter aggregate"),$3,mm_strdup("set schema"),$6); +} +| ALTER COLLATION any_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter collation"),$3,mm_strdup("set schema"),$6); +} +| ALTER CONVERSION_P any_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter conversion"),$3,mm_strdup("set schema"),$6); +} +| ALTER DOMAIN_P any_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter domain"),$3,mm_strdup("set schema"),$6); +} +| ALTER EXTENSION name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter extension"),$3,mm_strdup("set schema"),$6); +} +| ALTER FUNCTION function_with_argtypes SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter function"),$3,mm_strdup("set schema"),$6); +} +| ALTER OPERATOR operator_with_argtypes SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter operator"),$3,mm_strdup("set schema"),$6); +} +| ALTER OPERATOR CLASS any_name USING name SET SCHEMA name + { + $$ = cat_str(6,mm_strdup("alter operator class"),$4,mm_strdup("using"),$6,mm_strdup("set schema"),$9); +} +| ALTER OPERATOR FAMILY any_name USING name SET SCHEMA name + { + $$ = cat_str(6,mm_strdup("alter operator family"),$4,mm_strdup("using"),$6,mm_strdup("set schema"),$9); +} +| ALTER PROCEDURE function_with_argtypes SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter procedure"),$3,mm_strdup("set schema"),$6); +} +| ALTER ROUTINE function_with_argtypes SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter routine"),$3,mm_strdup("set schema"),$6); +} +| ALTER TABLE relation_expr SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter table"),$3,mm_strdup("set schema"),$6); +} +| ALTER TABLE IF_P EXISTS relation_expr SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter table if exists"),$5,mm_strdup("set schema"),$8); +} +| ALTER STATISTICS any_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter statistics"),$3,mm_strdup("set schema"),$6); +} +| ALTER TEXT_P SEARCH PARSER any_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter text search parser"),$5,mm_strdup("set schema"),$8); +} +| ALTER TEXT_P SEARCH DICTIONARY any_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter text search dictionary"),$5,mm_strdup("set schema"),$8); +} +| ALTER TEXT_P SEARCH TEMPLATE any_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter text search template"),$5,mm_strdup("set schema"),$8); +} +| ALTER TEXT_P SEARCH CONFIGURATION any_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter text search configuration"),$5,mm_strdup("set schema"),$8); +} +| ALTER SEQUENCE qualified_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter sequence"),$3,mm_strdup("set schema"),$6); +} +| ALTER SEQUENCE IF_P EXISTS qualified_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter sequence if exists"),$5,mm_strdup("set schema"),$8); +} +| ALTER VIEW qualified_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter view"),$3,mm_strdup("set schema"),$6); +} +| ALTER VIEW IF_P EXISTS qualified_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter view if exists"),$5,mm_strdup("set schema"),$8); +} +| ALTER MATERIALIZED VIEW qualified_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter materialized view"),$4,mm_strdup("set schema"),$7); +} +| ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter materialized view if exists"),$6,mm_strdup("set schema"),$9); +} +| ALTER FOREIGN TABLE relation_expr SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter foreign table"),$4,mm_strdup("set schema"),$7); +} +| ALTER FOREIGN TABLE IF_P EXISTS relation_expr SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter foreign table if exists"),$6,mm_strdup("set schema"),$9); +} +| ALTER TYPE_P any_name SET SCHEMA name + { + $$ = cat_str(4,mm_strdup("alter type"),$3,mm_strdup("set schema"),$6); +} +; + + + AlterOperatorStmt: + ALTER OPERATOR operator_with_argtypes SET '(' operator_def_list ')' + { + $$ = cat_str(5,mm_strdup("alter operator"),$3,mm_strdup("set ("),$6,mm_strdup(")")); +} +; + + + operator_def_list: + operator_def_elem + { + $$ = $1; +} +| operator_def_list ',' operator_def_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + operator_def_elem: + ColLabel '=' NONE + { + $$ = cat_str(2,$1,mm_strdup("= none")); +} +| ColLabel '=' operator_def_arg + { + $$ = cat_str(3,$1,mm_strdup("="),$3); +} +; + + + operator_def_arg: + func_type + { + $$ = $1; +} +| reserved_keyword + { + $$ = $1; +} +| qual_all_Op + { + $$ = $1; +} +| NumericOnly + { + $$ = $1; +} +| ecpg_sconst + { + $$ = $1; +} +; + + + AlterTypeStmt: + ALTER TYPE_P any_name SET '(' operator_def_list ')' + { + $$ = cat_str(5,mm_strdup("alter type"),$3,mm_strdup("set ("),$6,mm_strdup(")")); +} +; + + + AlterOwnerStmt: + ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter aggregate"),$3,mm_strdup("owner to"),$6); +} +| ALTER COLLATION any_name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter collation"),$3,mm_strdup("owner to"),$6); +} +| ALTER CONVERSION_P any_name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter conversion"),$3,mm_strdup("owner to"),$6); +} +| ALTER DATABASE name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter database"),$3,mm_strdup("owner to"),$6); +} +| ALTER DOMAIN_P any_name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter domain"),$3,mm_strdup("owner to"),$6); +} +| ALTER FUNCTION function_with_argtypes OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter function"),$3,mm_strdup("owner to"),$6); +} +| ALTER opt_procedural LANGUAGE name OWNER TO RoleSpec + { + $$ = cat_str(6,mm_strdup("alter"),$2,mm_strdup("language"),$4,mm_strdup("owner to"),$7); +} +| ALTER LARGE_P OBJECT_P NumericOnly OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter large object"),$4,mm_strdup("owner to"),$7); +} +| ALTER OPERATOR operator_with_argtypes OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter operator"),$3,mm_strdup("owner to"),$6); +} +| ALTER OPERATOR CLASS any_name USING name OWNER TO RoleSpec + { + $$ = cat_str(6,mm_strdup("alter operator class"),$4,mm_strdup("using"),$6,mm_strdup("owner to"),$9); +} +| ALTER OPERATOR FAMILY any_name USING name OWNER TO RoleSpec + { + $$ = cat_str(6,mm_strdup("alter operator family"),$4,mm_strdup("using"),$6,mm_strdup("owner to"),$9); +} +| ALTER PROCEDURE function_with_argtypes OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter procedure"),$3,mm_strdup("owner to"),$6); +} +| ALTER ROUTINE function_with_argtypes OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter routine"),$3,mm_strdup("owner to"),$6); +} +| ALTER SCHEMA name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter schema"),$3,mm_strdup("owner to"),$6); +} +| ALTER TYPE_P any_name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter type"),$3,mm_strdup("owner to"),$6); +} +| ALTER TABLESPACE name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter tablespace"),$3,mm_strdup("owner to"),$6); +} +| ALTER STATISTICS any_name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter statistics"),$3,mm_strdup("owner to"),$6); +} +| ALTER TEXT_P SEARCH DICTIONARY any_name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter text search dictionary"),$5,mm_strdup("owner to"),$8); +} +| ALTER TEXT_P SEARCH CONFIGURATION any_name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter text search configuration"),$5,mm_strdup("owner to"),$8); +} +| ALTER FOREIGN DATA_P WRAPPER name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter foreign data wrapper"),$5,mm_strdup("owner to"),$8); +} +| ALTER SERVER name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter server"),$3,mm_strdup("owner to"),$6); +} +| ALTER EVENT TRIGGER name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter event trigger"),$4,mm_strdup("owner to"),$7); +} +| ALTER PUBLICATION name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter publication"),$3,mm_strdup("owner to"),$6); +} +| ALTER SUBSCRIPTION name OWNER TO RoleSpec + { + $$ = cat_str(4,mm_strdup("alter subscription"),$3,mm_strdup("owner to"),$6); +} +; + + + CreatePublicationStmt: + CREATE PUBLICATION name opt_publication_for_tables opt_definition + { + $$ = cat_str(4,mm_strdup("create publication"),$3,$4,$5); +} +; + + + opt_publication_for_tables: + publication_for_tables + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + publication_for_tables: + FOR TABLE relation_expr_list + { + $$ = cat_str(2,mm_strdup("for table"),$3); +} +| FOR ALL TABLES + { + $$ = mm_strdup("for all tables"); +} +; + + + AlterPublicationStmt: + ALTER PUBLICATION name SET definition + { + $$ = cat_str(4,mm_strdup("alter publication"),$3,mm_strdup("set"),$5); +} +| ALTER PUBLICATION name ADD_P TABLE relation_expr_list + { + $$ = cat_str(4,mm_strdup("alter publication"),$3,mm_strdup("add table"),$6); +} +| ALTER PUBLICATION name SET TABLE relation_expr_list + { + $$ = cat_str(4,mm_strdup("alter publication"),$3,mm_strdup("set table"),$6); +} +| ALTER PUBLICATION name DROP TABLE relation_expr_list + { + $$ = cat_str(4,mm_strdup("alter publication"),$3,mm_strdup("drop table"),$6); +} +; + + + CreateSubscriptionStmt: + CREATE SUBSCRIPTION name CONNECTION ecpg_sconst PUBLICATION name_list opt_definition + { + $$ = cat_str(7,mm_strdup("create subscription"),$3,mm_strdup("connection"),$5,mm_strdup("publication"),$7,$8); +} +; + + + AlterSubscriptionStmt: + ALTER SUBSCRIPTION name SET definition + { + $$ = cat_str(4,mm_strdup("alter subscription"),$3,mm_strdup("set"),$5); +} +| ALTER SUBSCRIPTION name CONNECTION ecpg_sconst + { + $$ = cat_str(4,mm_strdup("alter subscription"),$3,mm_strdup("connection"),$5); +} +| ALTER SUBSCRIPTION name REFRESH PUBLICATION opt_definition + { + $$ = cat_str(4,mm_strdup("alter subscription"),$3,mm_strdup("refresh publication"),$6); +} +| ALTER SUBSCRIPTION name ADD_P PUBLICATION name_list opt_definition + { + $$ = cat_str(5,mm_strdup("alter subscription"),$3,mm_strdup("add publication"),$6,$7); +} +| ALTER SUBSCRIPTION name DROP PUBLICATION name_list opt_definition + { + $$ = cat_str(5,mm_strdup("alter subscription"),$3,mm_strdup("drop publication"),$6,$7); +} +| ALTER SUBSCRIPTION name SET PUBLICATION name_list opt_definition + { + $$ = cat_str(5,mm_strdup("alter subscription"),$3,mm_strdup("set publication"),$6,$7); +} +| ALTER SUBSCRIPTION name ENABLE_P + { + $$ = cat_str(3,mm_strdup("alter subscription"),$3,mm_strdup("enable")); +} +| ALTER SUBSCRIPTION name DISABLE_P + { + $$ = cat_str(3,mm_strdup("alter subscription"),$3,mm_strdup("disable")); +} +; + + + DropSubscriptionStmt: + DROP SUBSCRIPTION name opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop subscription"),$3,$4); +} +| DROP SUBSCRIPTION IF_P EXISTS name opt_drop_behavior + { + $$ = cat_str(3,mm_strdup("drop subscription if exists"),$5,$6); +} +; + + + RuleStmt: + CREATE opt_or_replace RULE name AS ON event TO qualified_name where_clause DO opt_instead RuleActionList + { + $$ = cat_str(12,mm_strdup("create"),$2,mm_strdup("rule"),$4,mm_strdup("as on"),$7,mm_strdup("to"),$9,$10,mm_strdup("do"),$12,$13); +} +; + + + RuleActionList: + NOTHING + { + $$ = mm_strdup("nothing"); +} +| RuleActionStmt + { + $$ = $1; +} +| '(' RuleActionMulti ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +; + + + RuleActionMulti: + RuleActionMulti ';' RuleActionStmtOrEmpty + { + $$ = cat_str(3,$1,mm_strdup(";"),$3); +} +| RuleActionStmtOrEmpty + { + $$ = $1; +} +; + + + RuleActionStmt: + SelectStmt + { + $$ = $1; +} +| InsertStmt + { + $$ = $1; +} +| UpdateStmt + { + $$ = $1; +} +| DeleteStmt + { + $$ = $1; +} +| NotifyStmt + { + $$ = $1; +} +; + + + RuleActionStmtOrEmpty: + RuleActionStmt + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + event: + SELECT + { + $$ = mm_strdup("select"); +} +| UPDATE + { + $$ = mm_strdup("update"); +} +| DELETE_P + { + $$ = mm_strdup("delete"); +} +| INSERT + { + $$ = mm_strdup("insert"); +} +; + + + opt_instead: + INSTEAD + { + $$ = mm_strdup("instead"); +} +| ALSO + { + $$ = mm_strdup("also"); +} +| + { + $$=EMPTY; } +; + + + NotifyStmt: + NOTIFY ColId notify_payload + { + $$ = cat_str(3,mm_strdup("notify"),$2,$3); +} +; + + + notify_payload: + ',' ecpg_sconst + { + $$ = cat_str(2,mm_strdup(","),$2); +} +| + { + $$=EMPTY; } +; + + + ListenStmt: + LISTEN ColId + { + $$ = cat_str(2,mm_strdup("listen"),$2); +} +; + + + UnlistenStmt: + UNLISTEN ColId + { + $$ = cat_str(2,mm_strdup("unlisten"),$2); +} +| UNLISTEN '*' + { + $$ = mm_strdup("unlisten *"); +} +; + + + TransactionStmt: + ABORT_P opt_transaction opt_transaction_chain + { + $$ = cat_str(3,mm_strdup("abort"),$2,$3); +} +| START TRANSACTION transaction_mode_list_or_empty + { + $$ = cat_str(2,mm_strdup("start transaction"),$3); +} +| COMMIT opt_transaction opt_transaction_chain + { + $$ = cat_str(3,mm_strdup("commit"),$2,$3); +} +| ROLLBACK opt_transaction opt_transaction_chain + { + $$ = cat_str(3,mm_strdup("rollback"),$2,$3); +} +| SAVEPOINT ColId + { + $$ = cat_str(2,mm_strdup("savepoint"),$2); +} +| RELEASE SAVEPOINT ColId + { + $$ = cat_str(2,mm_strdup("release savepoint"),$3); +} +| RELEASE ColId + { + $$ = cat_str(2,mm_strdup("release"),$2); +} +| ROLLBACK opt_transaction TO SAVEPOINT ColId + { + $$ = cat_str(4,mm_strdup("rollback"),$2,mm_strdup("to savepoint"),$5); +} +| ROLLBACK opt_transaction TO ColId + { + $$ = cat_str(4,mm_strdup("rollback"),$2,mm_strdup("to"),$4); +} +| PREPARE TRANSACTION ecpg_sconst + { + $$ = cat_str(2,mm_strdup("prepare transaction"),$3); +} +| COMMIT PREPARED ecpg_sconst + { + $$ = cat_str(2,mm_strdup("commit prepared"),$3); +} +| ROLLBACK PREPARED ecpg_sconst + { + $$ = cat_str(2,mm_strdup("rollback prepared"),$3); +} +; + + + TransactionStmtLegacy: + BEGIN_P opt_transaction transaction_mode_list_or_empty + { + $$ = cat_str(3,mm_strdup("begin"),$2,$3); +} +| END_P opt_transaction opt_transaction_chain + { + $$ = cat_str(3,mm_strdup("end"),$2,$3); +} +; + + + opt_transaction: + WORK + { + $$ = mm_strdup("work"); +} +| TRANSACTION + { + $$ = mm_strdup("transaction"); +} +| + { + $$=EMPTY; } +; + + + transaction_mode_item: + ISOLATION LEVEL iso_level + { + $$ = cat_str(2,mm_strdup("isolation level"),$3); +} +| READ ONLY + { + $$ = mm_strdup("read only"); +} +| READ WRITE + { + $$ = mm_strdup("read write"); +} +| DEFERRABLE + { + $$ = mm_strdup("deferrable"); +} +| NOT DEFERRABLE + { + $$ = mm_strdup("not deferrable"); +} +; + + + transaction_mode_list: + transaction_mode_item + { + $$ = $1; +} +| transaction_mode_list ',' transaction_mode_item + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +| transaction_mode_list transaction_mode_item + { + $$ = cat_str(2,$1,$2); +} +; + + + transaction_mode_list_or_empty: + transaction_mode_list + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + opt_transaction_chain: + AND CHAIN + { + $$ = mm_strdup("and chain"); +} +| AND NO CHAIN + { + $$ = mm_strdup("and no chain"); +} +| + { + $$=EMPTY; } +; + + + ViewStmt: + CREATE OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option + { + $$ = cat_str(9,mm_strdup("create"),$2,mm_strdup("view"),$4,$5,$6,mm_strdup("as"),$8,$9); +} +| CREATE OR REPLACE OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option + { + $$ = cat_str(9,mm_strdup("create or replace"),$4,mm_strdup("view"),$6,$7,$8,mm_strdup("as"),$10,$11); +} +| CREATE OptTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS SelectStmt opt_check_option + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = cat_str(11,mm_strdup("create"),$2,mm_strdup("recursive view"),$5,mm_strdup("("),$7,mm_strdup(")"),$9,mm_strdup("as"),$11,$12); +} +| CREATE OR REPLACE OptTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS SelectStmt opt_check_option + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = cat_str(11,mm_strdup("create or replace"),$4,mm_strdup("recursive view"),$7,mm_strdup("("),$9,mm_strdup(")"),$11,mm_strdup("as"),$13,$14); +} +; + + + opt_check_option: + WITH CHECK OPTION + { + $$ = mm_strdup("with check option"); +} +| WITH CASCADED CHECK OPTION + { + $$ = mm_strdup("with cascaded check option"); +} +| WITH LOCAL CHECK OPTION + { + $$ = mm_strdup("with local check option"); +} +| + { + $$=EMPTY; } +; + + + LoadStmt: + LOAD file_name + { + $$ = cat_str(2,mm_strdup("load"),$2); +} +; + + + CreatedbStmt: + CREATE DATABASE name opt_with createdb_opt_list + { + $$ = cat_str(4,mm_strdup("create database"),$3,$4,$5); +} +; + + + createdb_opt_list: + createdb_opt_items + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + createdb_opt_items: + createdb_opt_item + { + $$ = $1; +} +| createdb_opt_items createdb_opt_item + { + $$ = cat_str(2,$1,$2); +} +; + + + createdb_opt_item: + createdb_opt_name opt_equal SignedIconst + { + $$ = cat_str(3,$1,$2,$3); +} +| createdb_opt_name opt_equal opt_boolean_or_string + { + $$ = cat_str(3,$1,$2,$3); +} +| createdb_opt_name opt_equal DEFAULT + { + $$ = cat_str(3,$1,$2,mm_strdup("default")); +} +; + + + createdb_opt_name: + ecpg_ident + { + $$ = $1; +} +| CONNECTION LIMIT + { + $$ = mm_strdup("connection limit"); +} +| ENCODING + { + $$ = mm_strdup("encoding"); +} +| LOCATION + { + $$ = mm_strdup("location"); +} +| OWNER + { + $$ = mm_strdup("owner"); +} +| TABLESPACE + { + $$ = mm_strdup("tablespace"); +} +| TEMPLATE + { + $$ = mm_strdup("template"); +} +; + + + opt_equal: + '=' + { + $$ = mm_strdup("="); +} +| + { + $$=EMPTY; } +; + + + AlterDatabaseStmt: + ALTER DATABASE name WITH createdb_opt_list + { + $$ = cat_str(4,mm_strdup("alter database"),$3,mm_strdup("with"),$5); +} +| ALTER DATABASE name createdb_opt_list + { + $$ = cat_str(3,mm_strdup("alter database"),$3,$4); +} +| ALTER DATABASE name SET TABLESPACE name + { + $$ = cat_str(4,mm_strdup("alter database"),$3,mm_strdup("set tablespace"),$6); +} +; + + + AlterDatabaseSetStmt: + ALTER DATABASE name SetResetClause + { + $$ = cat_str(3,mm_strdup("alter database"),$3,$4); +} +; + + + DropdbStmt: + DROP DATABASE name + { + $$ = cat_str(2,mm_strdup("drop database"),$3); +} +| DROP DATABASE IF_P EXISTS name + { + $$ = cat_str(2,mm_strdup("drop database if exists"),$5); +} +| DROP DATABASE name opt_with '(' drop_option_list ')' + { + $$ = cat_str(6,mm_strdup("drop database"),$3,$4,mm_strdup("("),$6,mm_strdup(")")); +} +| DROP DATABASE IF_P EXISTS name opt_with '(' drop_option_list ')' + { + $$ = cat_str(6,mm_strdup("drop database if exists"),$5,$6,mm_strdup("("),$8,mm_strdup(")")); +} +; + + + drop_option_list: + drop_option + { + $$ = $1; +} +| drop_option_list ',' drop_option + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + drop_option: + FORCE + { + $$ = mm_strdup("force"); +} +; + + + AlterCollationStmt: + ALTER COLLATION any_name REFRESH VERSION_P + { + $$ = cat_str(3,mm_strdup("alter collation"),$3,mm_strdup("refresh version")); +} +; + + + AlterSystemStmt: + ALTER SYSTEM_P SET generic_set + { + $$ = cat_str(2,mm_strdup("alter system set"),$4); +} +| ALTER SYSTEM_P RESET generic_reset + { + $$ = cat_str(2,mm_strdup("alter system reset"),$4); +} +; + + + CreateDomainStmt: + CREATE DOMAIN_P any_name opt_as Typename ColQualList + { + $$ = cat_str(5,mm_strdup("create domain"),$3,$4,$5,$6); +} +; + + + AlterDomainStmt: + ALTER DOMAIN_P any_name alter_column_default + { + $$ = cat_str(3,mm_strdup("alter domain"),$3,$4); +} +| ALTER DOMAIN_P any_name DROP NOT NULL_P + { + $$ = cat_str(3,mm_strdup("alter domain"),$3,mm_strdup("drop not null")); +} +| ALTER DOMAIN_P any_name SET NOT NULL_P + { + $$ = cat_str(3,mm_strdup("alter domain"),$3,mm_strdup("set not null")); +} +| ALTER DOMAIN_P any_name ADD_P TableConstraint + { + $$ = cat_str(4,mm_strdup("alter domain"),$3,mm_strdup("add"),$5); +} +| ALTER DOMAIN_P any_name DROP CONSTRAINT name opt_drop_behavior + { + $$ = cat_str(5,mm_strdup("alter domain"),$3,mm_strdup("drop constraint"),$6,$7); +} +| ALTER DOMAIN_P any_name DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior + { + $$ = cat_str(5,mm_strdup("alter domain"),$3,mm_strdup("drop constraint if exists"),$8,$9); +} +| ALTER DOMAIN_P any_name VALIDATE CONSTRAINT name + { + $$ = cat_str(4,mm_strdup("alter domain"),$3,mm_strdup("validate constraint"),$6); +} +; + + + opt_as: + AS + { + $$ = mm_strdup("as"); +} +| + { + $$=EMPTY; } +; + + + AlterTSDictionaryStmt: + ALTER TEXT_P SEARCH DICTIONARY any_name definition + { + $$ = cat_str(3,mm_strdup("alter text search dictionary"),$5,$6); +} +; + + + AlterTSConfigurationStmt: + ALTER TEXT_P SEARCH CONFIGURATION any_name ADD_P MAPPING FOR name_list any_with any_name_list + { + $$ = cat_str(6,mm_strdup("alter text search configuration"),$5,mm_strdup("add mapping for"),$9,$10,$11); +} +| ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list any_with any_name_list + { + $$ = cat_str(6,mm_strdup("alter text search configuration"),$5,mm_strdup("alter mapping for"),$9,$10,$11); +} +| ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING REPLACE any_name any_with any_name + { + $$ = cat_str(6,mm_strdup("alter text search configuration"),$5,mm_strdup("alter mapping replace"),$9,$10,$11); +} +| ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list REPLACE any_name any_with any_name + { + $$ = cat_str(8,mm_strdup("alter text search configuration"),$5,mm_strdup("alter mapping for"),$9,mm_strdup("replace"),$11,$12,$13); +} +| ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING FOR name_list + { + $$ = cat_str(4,mm_strdup("alter text search configuration"),$5,mm_strdup("drop mapping for"),$9); +} +| ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING IF_P EXISTS FOR name_list + { + $$ = cat_str(4,mm_strdup("alter text search configuration"),$5,mm_strdup("drop mapping if exists for"),$11); +} +; + + + any_with: + WITH + { + $$ = mm_strdup("with"); +} +| WITH_LA + { + $$ = mm_strdup("with"); +} +; + + + CreateConversionStmt: + CREATE opt_default CONVERSION_P any_name FOR ecpg_sconst TO ecpg_sconst FROM any_name + { + $$ = cat_str(10,mm_strdup("create"),$2,mm_strdup("conversion"),$4,mm_strdup("for"),$6,mm_strdup("to"),$8,mm_strdup("from"),$10); +} +; + + + ClusterStmt: + CLUSTER opt_verbose qualified_name cluster_index_specification + { + $$ = cat_str(4,mm_strdup("cluster"),$2,$3,$4); +} +| CLUSTER '(' utility_option_list ')' qualified_name cluster_index_specification + { + $$ = cat_str(5,mm_strdup("cluster ("),$3,mm_strdup(")"),$5,$6); +} +| CLUSTER opt_verbose + { + $$ = cat_str(2,mm_strdup("cluster"),$2); +} +| CLUSTER opt_verbose name ON qualified_name + { + $$ = cat_str(5,mm_strdup("cluster"),$2,$3,mm_strdup("on"),$5); +} +; + + + cluster_index_specification: + USING name + { + $$ = cat_str(2,mm_strdup("using"),$2); +} +| + { + $$=EMPTY; } +; + + + VacuumStmt: + VACUUM opt_full opt_freeze opt_verbose opt_analyze opt_vacuum_relation_list + { + $$ = cat_str(6,mm_strdup("vacuum"),$2,$3,$4,$5,$6); +} +| VACUUM '(' utility_option_list ')' opt_vacuum_relation_list + { + $$ = cat_str(4,mm_strdup("vacuum ("),$3,mm_strdup(")"),$5); +} +; + + + AnalyzeStmt: + analyze_keyword opt_verbose opt_vacuum_relation_list + { + $$ = cat_str(3,$1,$2,$3); +} +| analyze_keyword '(' utility_option_list ')' opt_vacuum_relation_list + { + $$ = cat_str(5,$1,mm_strdup("("),$3,mm_strdup(")"),$5); +} +; + + + utility_option_list: + utility_option_elem + { + $$ = $1; +} +| utility_option_list ',' utility_option_elem + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + analyze_keyword: + ANALYZE + { + $$ = mm_strdup("analyze"); +} +| ANALYSE + { + $$ = mm_strdup("analyse"); +} +; + + + utility_option_elem: + utility_option_name utility_option_arg + { + $$ = cat_str(2,$1,$2); +} +; + + + utility_option_name: + NonReservedWord + { + $$ = $1; +} +| analyze_keyword + { + $$ = $1; +} +; + + + utility_option_arg: + opt_boolean_or_string + { + $$ = $1; +} +| NumericOnly + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + opt_analyze: + analyze_keyword + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + opt_verbose: + VERBOSE + { + $$ = mm_strdup("verbose"); +} +| + { + $$=EMPTY; } +; + + + opt_full: + FULL + { + $$ = mm_strdup("full"); +} +| + { + $$=EMPTY; } +; + + + opt_freeze: + FREEZE + { + $$ = mm_strdup("freeze"); +} +| + { + $$=EMPTY; } +; + + + opt_name_list: + '(' name_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + vacuum_relation: + qualified_name opt_name_list + { + $$ = cat_str(2,$1,$2); +} +; + + + vacuum_relation_list: + vacuum_relation + { + $$ = $1; +} +| vacuum_relation_list ',' vacuum_relation + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + opt_vacuum_relation_list: + vacuum_relation_list + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + ExplainStmt: + EXPLAIN ExplainableStmt + { + $$ = cat_str(2,mm_strdup("explain"),$2); +} +| EXPLAIN analyze_keyword opt_verbose ExplainableStmt + { + $$ = cat_str(4,mm_strdup("explain"),$2,$3,$4); +} +| EXPLAIN VERBOSE ExplainableStmt + { + $$ = cat_str(2,mm_strdup("explain verbose"),$3); +} +| EXPLAIN '(' utility_option_list ')' ExplainableStmt + { + $$ = cat_str(4,mm_strdup("explain ("),$3,mm_strdup(")"),$5); +} +; + + + ExplainableStmt: + SelectStmt + { + $$ = $1; +} +| InsertStmt + { + $$ = $1; +} +| UpdateStmt + { + $$ = $1; +} +| DeleteStmt + { + $$ = $1; +} +| DeclareCursorStmt + { + $$ = $1; +} +| CreateAsStmt + { + $$ = $1; +} +| CreateMatViewStmt + { + $$ = $1; +} +| RefreshMatViewStmt + { + $$ = $1; +} +| ExecuteStmt + { + $$ = $1.name; + } +; + + + PrepareStmt: +PREPARE prepared_name prep_type_clause AS PreparableStmt + { + $$.name = $2; + $$.type = $3; + $$.stmt = $5; + } + | PREPARE prepared_name FROM execstring + { + $$.name = $2; + $$.type = NULL; + $$.stmt = $4; + } +; + + + prep_type_clause: + '(' type_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + PreparableStmt: + SelectStmt + { + $$ = $1; +} +| InsertStmt + { + $$ = $1; +} +| UpdateStmt + { + $$ = $1; +} +| DeleteStmt + { + $$ = $1; +} +; + + + ExecuteStmt: +EXECUTE prepared_name execute_param_clause execute_rest + { + $$.name = $2; + $$.type = $3; + } +| CREATE OptTemp TABLE create_as_target AS EXECUTE prepared_name execute_param_clause opt_with_data execute_rest + { + $$.name = cat_str(8,mm_strdup("create"),$2,mm_strdup("table"),$4,mm_strdup("as execute"),$7,$8,$9); + } +| CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS EXECUTE prepared_name execute_param_clause opt_with_data execute_rest + { + $$.name = cat_str(8,mm_strdup("create"),$2,mm_strdup("table if not exists"),$7,mm_strdup("as execute"),$10,$11,$12); + } +; + + + execute_param_clause: + '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + InsertStmt: + opt_with_clause INSERT INTO insert_target insert_rest opt_on_conflict returning_clause + { + $$ = cat_str(6,$1,mm_strdup("insert into"),$4,$5,$6,$7); +} +; + + + insert_target: + qualified_name + { + $$ = $1; +} +| qualified_name AS ColId + { + $$ = cat_str(3,$1,mm_strdup("as"),$3); +} +; + + + insert_rest: + SelectStmt + { + $$ = $1; +} +| OVERRIDING override_kind VALUE_P SelectStmt + { + $$ = cat_str(4,mm_strdup("overriding"),$2,mm_strdup("value"),$4); +} +| '(' insert_column_list ')' SelectStmt + { + $$ = cat_str(4,mm_strdup("("),$2,mm_strdup(")"),$4); +} +| '(' insert_column_list ')' OVERRIDING override_kind VALUE_P SelectStmt + { + $$ = cat_str(6,mm_strdup("("),$2,mm_strdup(") overriding"),$5,mm_strdup("value"),$7); +} +| DEFAULT VALUES + { + $$ = mm_strdup("default values"); +} +; + + + override_kind: + USER + { + $$ = mm_strdup("user"); +} +| SYSTEM_P + { + $$ = mm_strdup("system"); +} +; + + + insert_column_list: + insert_column_item + { + $$ = $1; +} +| insert_column_list ',' insert_column_item + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + insert_column_item: + ColId opt_indirection + { + $$ = cat_str(2,$1,$2); +} +; + + + opt_on_conflict: + ON CONFLICT opt_conf_expr DO UPDATE SET set_clause_list where_clause + { + $$ = cat_str(5,mm_strdup("on conflict"),$3,mm_strdup("do update set"),$7,$8); +} +| ON CONFLICT opt_conf_expr DO NOTHING + { + $$ = cat_str(3,mm_strdup("on conflict"),$3,mm_strdup("do nothing")); +} +| + { + $$=EMPTY; } +; + + + opt_conf_expr: + '(' index_params ')' where_clause + { + $$ = cat_str(4,mm_strdup("("),$2,mm_strdup(")"),$4); +} +| ON CONSTRAINT name + { + $$ = cat_str(2,mm_strdup("on constraint"),$3); +} +| + { + $$=EMPTY; } +; + + + returning_clause: +RETURNING target_list opt_ecpg_into + { + $$ = cat_str(2,mm_strdup("returning"),$2); +} +| + { + $$=EMPTY; } +; + + + DeleteStmt: + opt_with_clause DELETE_P FROM relation_expr_opt_alias using_clause where_or_current_clause returning_clause + { + $$ = cat_str(6,$1,mm_strdup("delete from"),$4,$5,$6,$7); +} +; + + + using_clause: + USING from_list + { + $$ = cat_str(2,mm_strdup("using"),$2); +} +| + { + $$=EMPTY; } +; + + + LockStmt: + LOCK_P opt_table relation_expr_list opt_lock opt_nowait + { + $$ = cat_str(5,mm_strdup("lock"),$2,$3,$4,$5); +} +; + + + opt_lock: + IN_P lock_type MODE + { + $$ = cat_str(3,mm_strdup("in"),$2,mm_strdup("mode")); +} +| + { + $$=EMPTY; } +; + + + lock_type: + ACCESS SHARE + { + $$ = mm_strdup("access share"); +} +| ROW SHARE + { + $$ = mm_strdup("row share"); +} +| ROW EXCLUSIVE + { + $$ = mm_strdup("row exclusive"); +} +| SHARE UPDATE EXCLUSIVE + { + $$ = mm_strdup("share update exclusive"); +} +| SHARE + { + $$ = mm_strdup("share"); +} +| SHARE ROW EXCLUSIVE + { + $$ = mm_strdup("share row exclusive"); +} +| EXCLUSIVE + { + $$ = mm_strdup("exclusive"); +} +| ACCESS EXCLUSIVE + { + $$ = mm_strdup("access exclusive"); +} +; + + + opt_nowait: + NOWAIT + { + $$ = mm_strdup("nowait"); +} +| + { + $$=EMPTY; } +; + + + opt_nowait_or_skip: + NOWAIT + { + $$ = mm_strdup("nowait"); +} +| SKIP LOCKED + { + $$ = mm_strdup("skip locked"); +} +| + { + $$=EMPTY; } +; + + + UpdateStmt: + opt_with_clause UPDATE relation_expr_opt_alias SET set_clause_list from_clause where_or_current_clause returning_clause + { + $$ = cat_str(8,$1,mm_strdup("update"),$3,mm_strdup("set"),$5,$6,$7,$8); +} +; + + + set_clause_list: + set_clause + { + $$ = $1; +} +| set_clause_list ',' set_clause + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + set_clause: + set_target '=' a_expr + { + $$ = cat_str(3,$1,mm_strdup("="),$3); +} +| '(' set_target_list ')' '=' a_expr + { + $$ = cat_str(4,mm_strdup("("),$2,mm_strdup(") ="),$5); +} +; + + + set_target: + ColId opt_indirection + { + $$ = cat_str(2,$1,$2); +} +; + + + set_target_list: + set_target + { + $$ = $1; +} +| set_target_list ',' set_target + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + DeclareCursorStmt: + DECLARE cursor_name cursor_options CURSOR opt_hold FOR SelectStmt + { + struct cursor *ptr, *this; + char *cursor_marker = $2[0] == ':' ? mm_strdup("$0") : mm_strdup($2); + char *comment, *c1, *c2; + int (* strcmp_fn)(const char *, const char *) = (($2[0] == ':' || $2[0] == '"') ? strcmp : pg_strcasecmp); + + if (INFORMIX_MODE && pg_strcasecmp($2, "database") == 0) + mmfatal(PARSE_ERROR, "\"database\" cannot be used as cursor name in INFORMIX mode"); + + for (ptr = cur; ptr != NULL; ptr = ptr->next) + { + if (strcmp_fn($2, ptr->name) == 0) + { + if ($2[0] == ':') + mmerror(PARSE_ERROR, ET_ERROR, "using variable \"%s\" in different declare statements is not supported", $2+1); + else + mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" is already defined", $2); + } + } + + this = (struct cursor *) mm_alloc(sizeof(struct cursor)); + + this->next = cur; + this->name = $2; + this->function = (current_function ? mm_strdup(current_function) : NULL); + this->connection = connection ? mm_strdup(connection) : NULL; + this->opened = false; + this->command = cat_str(7, mm_strdup("declare"), cursor_marker, $3, mm_strdup("cursor"), $5, mm_strdup("for"), $7); + this->argsinsert = argsinsert; + this->argsinsert_oos = NULL; + this->argsresult = argsresult; + this->argsresult_oos = NULL; + argsinsert = argsresult = NULL; + cur = this; + + c1 = mm_strdup(this->command); + if ((c2 = strstr(c1, "*/")) != NULL) + { + /* We put this text into a comment, so we better remove [*][/]. */ + c2[0] = '.'; + c2[1] = '.'; + } + comment = cat_str(3, mm_strdup("/*"), c1, mm_strdup("*/")); + + $$ = cat2_str(adjust_outofscope_cursor_vars(this), comment); + } +; + + + cursor_name: + name + { + $$ = $1; +} + | char_civar + { + char *curname = mm_alloc(strlen($1) + 2); + sprintf(curname, ":%s", $1); + free($1); + $1 = curname; + $$ = $1; + } +; + + + cursor_options: + + { + $$=EMPTY; } +| cursor_options NO SCROLL + { + $$ = cat_str(2,$1,mm_strdup("no scroll")); +} +| cursor_options SCROLL + { + $$ = cat_str(2,$1,mm_strdup("scroll")); +} +| cursor_options BINARY + { + $$ = cat_str(2,$1,mm_strdup("binary")); +} +| cursor_options ASENSITIVE + { + $$ = cat_str(2,$1,mm_strdup("asensitive")); +} +| cursor_options INSENSITIVE + { + $$ = cat_str(2,$1,mm_strdup("insensitive")); +} +; + + + opt_hold: + + { + if (compat == ECPG_COMPAT_INFORMIX_SE && autocommit) + $$ = mm_strdup("with hold"); + else + $$ = EMPTY; + } +| WITH HOLD + { + $$ = mm_strdup("with hold"); +} +| WITHOUT HOLD + { + $$ = mm_strdup("without hold"); +} +; + + + SelectStmt: + select_no_parens %prec UMINUS + { + $$ = $1; +} +| select_with_parens %prec UMINUS + { + $$ = $1; +} +; + + + select_with_parens: + '(' select_no_parens ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| '(' select_with_parens ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +; + + + select_no_parens: + simple_select + { + $$ = $1; +} +| select_clause sort_clause + { + $$ = cat_str(2,$1,$2); +} +| select_clause opt_sort_clause for_locking_clause opt_select_limit + { + $$ = cat_str(4,$1,$2,$3,$4); +} +| select_clause opt_sort_clause select_limit opt_for_locking_clause + { + $$ = cat_str(4,$1,$2,$3,$4); +} +| with_clause select_clause + { + $$ = cat_str(2,$1,$2); +} +| with_clause select_clause sort_clause + { + $$ = cat_str(3,$1,$2,$3); +} +| with_clause select_clause opt_sort_clause for_locking_clause opt_select_limit + { + $$ = cat_str(5,$1,$2,$3,$4,$5); +} +| with_clause select_clause opt_sort_clause select_limit opt_for_locking_clause + { + $$ = cat_str(5,$1,$2,$3,$4,$5); +} +; + + + select_clause: + simple_select + { + $$ = $1; +} +| select_with_parens + { + $$ = $1; +} +; + + + simple_select: + SELECT opt_all_clause opt_target_list into_clause from_clause where_clause group_clause having_clause window_clause + { + $$ = cat_str(9,mm_strdup("select"),$2,$3,$4,$5,$6,$7,$8,$9); +} +| SELECT distinct_clause target_list into_clause from_clause where_clause group_clause having_clause window_clause + { + $$ = cat_str(9,mm_strdup("select"),$2,$3,$4,$5,$6,$7,$8,$9); +} +| values_clause + { + $$ = $1; +} +| TABLE relation_expr + { + $$ = cat_str(2,mm_strdup("table"),$2); +} +| select_clause UNION set_quantifier select_clause + { + $$ = cat_str(4,$1,mm_strdup("union"),$3,$4); +} +| select_clause INTERSECT set_quantifier select_clause + { + $$ = cat_str(4,$1,mm_strdup("intersect"),$3,$4); +} +| select_clause EXCEPT set_quantifier select_clause + { + $$ = cat_str(4,$1,mm_strdup("except"),$3,$4); +} +; + + + with_clause: + WITH cte_list + { + $$ = cat_str(2,mm_strdup("with"),$2); +} +| WITH_LA cte_list + { + $$ = cat_str(2,mm_strdup("with"),$2); +} +| WITH RECURSIVE cte_list + { + $$ = cat_str(2,mm_strdup("with recursive"),$3); +} +; + + + cte_list: + common_table_expr + { + $$ = $1; +} +| cte_list ',' common_table_expr + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + common_table_expr: + name opt_name_list AS opt_materialized '(' PreparableStmt ')' opt_search_clause opt_cycle_clause + { + $$ = cat_str(9,$1,$2,mm_strdup("as"),$4,mm_strdup("("),$6,mm_strdup(")"),$8,$9); +} +; + + + opt_materialized: + MATERIALIZED + { + $$ = mm_strdup("materialized"); +} +| NOT MATERIALIZED + { + $$ = mm_strdup("not materialized"); +} +| + { + $$=EMPTY; } +; + + + opt_search_clause: + SEARCH DEPTH FIRST_P BY columnList SET ColId + { + $$ = cat_str(4,mm_strdup("search depth first by"),$5,mm_strdup("set"),$7); +} +| SEARCH BREADTH FIRST_P BY columnList SET ColId + { + $$ = cat_str(4,mm_strdup("search breadth first by"),$5,mm_strdup("set"),$7); +} +| + { + $$=EMPTY; } +; + + + opt_cycle_clause: + CYCLE columnList SET ColId TO AexprConst DEFAULT AexprConst USING ColId + { + $$ = cat_str(10,mm_strdup("cycle"),$2,mm_strdup("set"),$4,mm_strdup("to"),$6,mm_strdup("default"),$8,mm_strdup("using"),$10); +} +| CYCLE columnList SET ColId USING ColId + { + $$ = cat_str(6,mm_strdup("cycle"),$2,mm_strdup("set"),$4,mm_strdup("using"),$6); +} +| + { + $$=EMPTY; } +; + + + opt_with_clause: + with_clause + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + into_clause: + INTO OptTempTableName + { + FoundInto = 1; + $$= cat2_str(mm_strdup("into"), $2); + } + | ecpg_into { $$ = EMPTY; } +| + { + $$=EMPTY; } +; + + + OptTempTableName: + TEMPORARY opt_table qualified_name + { + $$ = cat_str(3,mm_strdup("temporary"),$2,$3); +} +| TEMP opt_table qualified_name + { + $$ = cat_str(3,mm_strdup("temp"),$2,$3); +} +| LOCAL TEMPORARY opt_table qualified_name + { + $$ = cat_str(3,mm_strdup("local temporary"),$3,$4); +} +| LOCAL TEMP opt_table qualified_name + { + $$ = cat_str(3,mm_strdup("local temp"),$3,$4); +} +| GLOBAL TEMPORARY opt_table qualified_name + { + $$ = cat_str(3,mm_strdup("global temporary"),$3,$4); +} +| GLOBAL TEMP opt_table qualified_name + { + $$ = cat_str(3,mm_strdup("global temp"),$3,$4); +} +| UNLOGGED opt_table qualified_name + { + $$ = cat_str(3,mm_strdup("unlogged"),$2,$3); +} +| TABLE qualified_name + { + $$ = cat_str(2,mm_strdup("table"),$2); +} +| qualified_name + { + $$ = $1; +} +; + + + opt_table: + TABLE + { + $$ = mm_strdup("table"); +} +| + { + $$=EMPTY; } +; + + + set_quantifier: + ALL + { + $$ = mm_strdup("all"); +} +| DISTINCT + { + $$ = mm_strdup("distinct"); +} +| + { + $$=EMPTY; } +; + + + distinct_clause: + DISTINCT + { + $$ = mm_strdup("distinct"); +} +| DISTINCT ON '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("distinct on ("),$4,mm_strdup(")")); +} +; + + + opt_all_clause: + ALL + { + $$ = mm_strdup("all"); +} +| + { + $$=EMPTY; } +; + + + opt_sort_clause: + sort_clause + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + sort_clause: + ORDER BY sortby_list + { + $$ = cat_str(2,mm_strdup("order by"),$3); +} +; + + + sortby_list: + sortby + { + $$ = $1; +} +| sortby_list ',' sortby + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + sortby: + a_expr USING qual_all_Op opt_nulls_order + { + $$ = cat_str(4,$1,mm_strdup("using"),$3,$4); +} +| a_expr opt_asc_desc opt_nulls_order + { + $$ = cat_str(3,$1,$2,$3); +} +; + + + select_limit: + limit_clause offset_clause + { + $$ = cat_str(2,$1,$2); +} +| offset_clause limit_clause + { + $$ = cat_str(2,$1,$2); +} +| limit_clause + { + $$ = $1; +} +| offset_clause + { + $$ = $1; +} +; + + + opt_select_limit: + select_limit + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + limit_clause: + LIMIT select_limit_value + { + $$ = cat_str(2,mm_strdup("limit"),$2); +} +| LIMIT select_limit_value ',' select_offset_value + { + mmerror(PARSE_ERROR, ET_WARNING, "no longer supported LIMIT #,# syntax passed to server"); + $$ = cat_str(4, mm_strdup("limit"), $2, mm_strdup(","), $4); + } +| FETCH first_or_next select_fetch_first_value row_or_rows ONLY + { + $$ = cat_str(5,mm_strdup("fetch"),$2,$3,$4,mm_strdup("only")); +} +| FETCH first_or_next select_fetch_first_value row_or_rows WITH TIES + { + $$ = cat_str(5,mm_strdup("fetch"),$2,$3,$4,mm_strdup("with ties")); +} +| FETCH first_or_next row_or_rows ONLY + { + $$ = cat_str(4,mm_strdup("fetch"),$2,$3,mm_strdup("only")); +} +| FETCH first_or_next row_or_rows WITH TIES + { + $$ = cat_str(4,mm_strdup("fetch"),$2,$3,mm_strdup("with ties")); +} +; + + + offset_clause: + OFFSET select_offset_value + { + $$ = cat_str(2,mm_strdup("offset"),$2); +} +| OFFSET select_fetch_first_value row_or_rows + { + $$ = cat_str(3,mm_strdup("offset"),$2,$3); +} +; + + + select_limit_value: + a_expr + { + $$ = $1; +} +| ALL + { + $$ = mm_strdup("all"); +} +; + + + select_offset_value: + a_expr + { + $$ = $1; +} +; + + + select_fetch_first_value: + c_expr + { + $$ = $1; +} +| '+' I_or_F_const + { + $$ = cat_str(2,mm_strdup("+"),$2); +} +| '-' I_or_F_const + { + $$ = cat_str(2,mm_strdup("-"),$2); +} +; + + + I_or_F_const: + Iconst + { + $$ = $1; +} +| ecpg_fconst + { + $$ = $1; +} +; + + + row_or_rows: + ROW + { + $$ = mm_strdup("row"); +} +| ROWS + { + $$ = mm_strdup("rows"); +} +; + + + first_or_next: + FIRST_P + { + $$ = mm_strdup("first"); +} +| NEXT + { + $$ = mm_strdup("next"); +} +; + + + group_clause: + GROUP_P BY set_quantifier group_by_list + { + $$ = cat_str(3,mm_strdup("group by"),$3,$4); +} +| + { + $$=EMPTY; } +; + + + group_by_list: + group_by_item + { + $$ = $1; +} +| group_by_list ',' group_by_item + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + group_by_item: + a_expr + { + $$ = $1; +} +| empty_grouping_set + { + $$ = $1; +} +| cube_clause + { + $$ = $1; +} +| rollup_clause + { + $$ = $1; +} +| grouping_sets_clause + { + $$ = $1; +} +; + + + empty_grouping_set: + '(' ')' + { + $$ = mm_strdup("( )"); +} +; + + + rollup_clause: + ROLLUP '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("rollup ("),$3,mm_strdup(")")); +} +; + + + cube_clause: + CUBE '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("cube ("),$3,mm_strdup(")")); +} +; + + + grouping_sets_clause: + GROUPING SETS '(' group_by_list ')' + { + $$ = cat_str(3,mm_strdup("grouping sets ("),$4,mm_strdup(")")); +} +; + + + having_clause: + HAVING a_expr + { + $$ = cat_str(2,mm_strdup("having"),$2); +} +| + { + $$=EMPTY; } +; + + + for_locking_clause: + for_locking_items + { + $$ = $1; +} +| FOR READ ONLY + { + $$ = mm_strdup("for read only"); +} +; + + + opt_for_locking_clause: + for_locking_clause + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + for_locking_items: + for_locking_item + { + $$ = $1; +} +| for_locking_items for_locking_item + { + $$ = cat_str(2,$1,$2); +} +; + + + for_locking_item: + for_locking_strength locked_rels_list opt_nowait_or_skip + { + $$ = cat_str(3,$1,$2,$3); +} +; + + + for_locking_strength: + FOR UPDATE + { + $$ = mm_strdup("for update"); +} +| FOR NO KEY UPDATE + { + $$ = mm_strdup("for no key update"); +} +| FOR SHARE + { + $$ = mm_strdup("for share"); +} +| FOR KEY SHARE + { + $$ = mm_strdup("for key share"); +} +; + + + locked_rels_list: + OF qualified_name_list + { + $$ = cat_str(2,mm_strdup("of"),$2); +} +| + { + $$=EMPTY; } +; + + + values_clause: + VALUES '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("values ("),$3,mm_strdup(")")); +} +| values_clause ',' '(' expr_list ')' + { + $$ = cat_str(4,$1,mm_strdup(", ("),$4,mm_strdup(")")); +} +; + + + from_clause: + FROM from_list + { + $$ = cat_str(2,mm_strdup("from"),$2); +} +| + { + $$=EMPTY; } +; + + + from_list: + table_ref + { + $$ = $1; +} +| from_list ',' table_ref + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + table_ref: + relation_expr opt_alias_clause + { + $$ = cat_str(2,$1,$2); +} +| relation_expr opt_alias_clause tablesample_clause + { + $$ = cat_str(3,$1,$2,$3); +} +| func_table func_alias_clause + { + $$ = cat_str(2,$1,$2); +} +| LATERAL_P func_table func_alias_clause + { + $$ = cat_str(3,mm_strdup("lateral"),$2,$3); +} +| xmltable opt_alias_clause + { + $$ = cat_str(2,$1,$2); +} +| LATERAL_P xmltable opt_alias_clause + { + $$ = cat_str(3,mm_strdup("lateral"),$2,$3); +} +| select_with_parens opt_alias_clause + { + if ($2 == NULL) + mmerror(PARSE_ERROR, ET_ERROR, "subquery in FROM must have an alias"); + + $$ = cat_str(2,$1,$2); +} +| LATERAL_P select_with_parens opt_alias_clause + { + if ($3 == NULL) + mmerror(PARSE_ERROR, ET_ERROR, "subquery in FROM must have an alias"); + + $$ = cat_str(3,mm_strdup("lateral"),$2,$3); +} +| joined_table + { + $$ = $1; +} +| '(' joined_table ')' alias_clause + { + $$ = cat_str(4,mm_strdup("("),$2,mm_strdup(")"),$4); +} +; + + + joined_table: + '(' joined_table ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| table_ref CROSS JOIN table_ref + { + $$ = cat_str(3,$1,mm_strdup("cross join"),$4); +} +| table_ref join_type JOIN table_ref join_qual + { + $$ = cat_str(5,$1,$2,mm_strdup("join"),$4,$5); +} +| table_ref JOIN table_ref join_qual + { + $$ = cat_str(4,$1,mm_strdup("join"),$3,$4); +} +| table_ref NATURAL join_type JOIN table_ref + { + $$ = cat_str(5,$1,mm_strdup("natural"),$3,mm_strdup("join"),$5); +} +| table_ref NATURAL JOIN table_ref + { + $$ = cat_str(3,$1,mm_strdup("natural join"),$4); +} +; + + + alias_clause: + AS ColId '(' name_list ')' + { + $$ = cat_str(5,mm_strdup("as"),$2,mm_strdup("("),$4,mm_strdup(")")); +} +| AS ColId + { + $$ = cat_str(2,mm_strdup("as"),$2); +} +| ColId '(' name_list ')' + { + $$ = cat_str(4,$1,mm_strdup("("),$3,mm_strdup(")")); +} +| ColId + { + $$ = $1; +} +; + + + opt_alias_clause: + alias_clause + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + opt_alias_clause_for_join_using: + AS ColId + { + $$ = cat_str(2,mm_strdup("as"),$2); +} +| + { + $$=EMPTY; } +; + + + func_alias_clause: + alias_clause + { + $$ = $1; +} +| AS '(' TableFuncElementList ')' + { + $$ = cat_str(3,mm_strdup("as ("),$3,mm_strdup(")")); +} +| AS ColId '(' TableFuncElementList ')' + { + $$ = cat_str(5,mm_strdup("as"),$2,mm_strdup("("),$4,mm_strdup(")")); +} +| ColId '(' TableFuncElementList ')' + { + $$ = cat_str(4,$1,mm_strdup("("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + join_type: + FULL opt_outer + { + $$ = cat_str(2,mm_strdup("full"),$2); +} +| LEFT opt_outer + { + $$ = cat_str(2,mm_strdup("left"),$2); +} +| RIGHT opt_outer + { + $$ = cat_str(2,mm_strdup("right"),$2); +} +| INNER_P + { + $$ = mm_strdup("inner"); +} +; + + + opt_outer: + OUTER_P + { + $$ = mm_strdup("outer"); +} +| + { + $$=EMPTY; } +; + + + join_qual: + USING '(' name_list ')' opt_alias_clause_for_join_using + { + $$ = cat_str(4,mm_strdup("using ("),$3,mm_strdup(")"),$5); +} +| ON a_expr + { + $$ = cat_str(2,mm_strdup("on"),$2); +} +; + + + relation_expr: + qualified_name + { + $$ = $1; +} +| qualified_name '*' + { + $$ = cat_str(2,$1,mm_strdup("*")); +} +| ONLY qualified_name + { + $$ = cat_str(2,mm_strdup("only"),$2); +} +| ONLY '(' qualified_name ')' + { + $$ = cat_str(3,mm_strdup("only ("),$3,mm_strdup(")")); +} +; + + + relation_expr_list: + relation_expr + { + $$ = $1; +} +| relation_expr_list ',' relation_expr + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + relation_expr_opt_alias: + relation_expr %prec UMINUS + { + $$ = $1; +} +| relation_expr ColId + { + $$ = cat_str(2,$1,$2); +} +| relation_expr AS ColId + { + $$ = cat_str(3,$1,mm_strdup("as"),$3); +} +; + + + tablesample_clause: + TABLESAMPLE func_name '(' expr_list ')' opt_repeatable_clause + { + $$ = cat_str(6,mm_strdup("tablesample"),$2,mm_strdup("("),$4,mm_strdup(")"),$6); +} +; + + + opt_repeatable_clause: + REPEATABLE '(' a_expr ')' + { + $$ = cat_str(3,mm_strdup("repeatable ("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + func_table: + func_expr_windowless opt_ordinality + { + $$ = cat_str(2,$1,$2); +} +| ROWS FROM '(' rowsfrom_list ')' opt_ordinality + { + $$ = cat_str(4,mm_strdup("rows from ("),$4,mm_strdup(")"),$6); +} +; + + + rowsfrom_item: + func_expr_windowless opt_col_def_list + { + $$ = cat_str(2,$1,$2); +} +; + + + rowsfrom_list: + rowsfrom_item + { + $$ = $1; +} +| rowsfrom_list ',' rowsfrom_item + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + opt_col_def_list: + AS '(' TableFuncElementList ')' + { + $$ = cat_str(3,mm_strdup("as ("),$3,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + opt_ordinality: + WITH_LA ORDINALITY + { + $$ = mm_strdup("with ordinality"); +} +| + { + $$=EMPTY; } +; + + + where_clause: + WHERE a_expr + { + $$ = cat_str(2,mm_strdup("where"),$2); +} +| + { + $$=EMPTY; } +; + + + where_or_current_clause: + WHERE a_expr + { + $$ = cat_str(2,mm_strdup("where"),$2); +} +| WHERE CURRENT_P OF cursor_name + { + char *cursor_marker = $4[0] == ':' ? mm_strdup("$0") : $4; + $$ = cat_str(2,mm_strdup("where current of"), cursor_marker); + } +| + { + $$=EMPTY; } +; + + + OptTableFuncElementList: + TableFuncElementList + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + TableFuncElementList: + TableFuncElement + { + $$ = $1; +} +| TableFuncElementList ',' TableFuncElement + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + TableFuncElement: + ColId Typename opt_collate_clause + { + $$ = cat_str(3,$1,$2,$3); +} +; + + + xmltable: + XMLTABLE '(' c_expr xmlexists_argument COLUMNS xmltable_column_list ')' + { + $$ = cat_str(6,mm_strdup("xmltable ("),$3,$4,mm_strdup("columns"),$6,mm_strdup(")")); +} +| XMLTABLE '(' XMLNAMESPACES '(' xml_namespace_list ')' ',' c_expr xmlexists_argument COLUMNS xmltable_column_list ')' + { + $$ = cat_str(8,mm_strdup("xmltable ( xmlnamespaces ("),$5,mm_strdup(") ,"),$8,$9,mm_strdup("columns"),$11,mm_strdup(")")); +} +; + + + xmltable_column_list: + xmltable_column_el + { + $$ = $1; +} +| xmltable_column_list ',' xmltable_column_el + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + xmltable_column_el: + ColId Typename + { + $$ = cat_str(2,$1,$2); +} +| ColId Typename xmltable_column_option_list + { + $$ = cat_str(3,$1,$2,$3); +} +| ColId FOR ORDINALITY + { + $$ = cat_str(2,$1,mm_strdup("for ordinality")); +} +; + + + xmltable_column_option_list: + xmltable_column_option_el + { + $$ = $1; +} +| xmltable_column_option_list xmltable_column_option_el + { + $$ = cat_str(2,$1,$2); +} +; + + + xmltable_column_option_el: + ecpg_ident b_expr + { + $$ = cat_str(2,$1,$2); +} +| DEFAULT b_expr + { + $$ = cat_str(2,mm_strdup("default"),$2); +} +| NOT NULL_P + { + $$ = mm_strdup("not null"); +} +| NULL_P + { + $$ = mm_strdup("null"); +} +; + + + xml_namespace_list: + xml_namespace_el + { + $$ = $1; +} +| xml_namespace_list ',' xml_namespace_el + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + xml_namespace_el: + b_expr AS ColLabel + { + $$ = cat_str(3,$1,mm_strdup("as"),$3); +} +| DEFAULT b_expr + { + $$ = cat_str(2,mm_strdup("default"),$2); +} +; + + + Typename: + SimpleTypename opt_array_bounds + { $$ = cat2_str($1, $2.str); } +| SETOF SimpleTypename opt_array_bounds + { $$ = cat_str(3, mm_strdup("setof"), $2, $3.str); } +| SimpleTypename ARRAY '[' Iconst ']' + { + $$ = cat_str(4,$1,mm_strdup("array ["),$4,mm_strdup("]")); +} +| SETOF SimpleTypename ARRAY '[' Iconst ']' + { + $$ = cat_str(5,mm_strdup("setof"),$2,mm_strdup("array ["),$5,mm_strdup("]")); +} +| SimpleTypename ARRAY + { + $$ = cat_str(2,$1,mm_strdup("array")); +} +| SETOF SimpleTypename ARRAY + { + $$ = cat_str(3,mm_strdup("setof"),$2,mm_strdup("array")); +} +; + + + opt_array_bounds: + opt_array_bounds '[' ']' + { + $$.index1 = $1.index1; + $$.index2 = $1.index2; + if (strcmp($$.index1, "-1") == 0) + $$.index1 = mm_strdup("0"); + else if (strcmp($1.index2, "-1") == 0) + $$.index2 = mm_strdup("0"); + $$.str = cat_str(2, $1.str, mm_strdup("[]")); + } + | opt_array_bounds '[' Iresult ']' + { + $$.index1 = $1.index1; + $$.index2 = $1.index2; + if (strcmp($1.index1, "-1") == 0) + $$.index1 = mm_strdup($3); + else if (strcmp($1.index2, "-1") == 0) + $$.index2 = mm_strdup($3); + $$.str = cat_str(4, $1.str, mm_strdup("["), $3, mm_strdup("]")); + } +| + { + $$.index1 = mm_strdup("-1"); + $$.index2 = mm_strdup("-1"); + $$.str= EMPTY; + } +; + + + SimpleTypename: + GenericType + { + $$ = $1; +} +| Numeric + { + $$ = $1; +} +| Bit + { + $$ = $1; +} +| Character + { + $$ = $1; +} +| ConstDatetime + { + $$ = $1; +} +| ConstInterval opt_interval + { + $$ = cat_str(2,$1,$2); +} +| ConstInterval '(' Iconst ')' + { + $$ = cat_str(4,$1,mm_strdup("("),$3,mm_strdup(")")); +} +; + + + ConstTypename: + Numeric + { + $$ = $1; +} +| ConstBit + { + $$ = $1; +} +| ConstCharacter + { + $$ = $1; +} +| ConstDatetime + { + $$ = $1; +} +; + + + GenericType: + type_function_name opt_type_modifiers + { + $$ = cat_str(2,$1,$2); +} +| type_function_name attrs opt_type_modifiers + { + $$ = cat_str(3,$1,$2,$3); +} +; + + + opt_type_modifiers: + '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + Numeric: + INT_P + { + $$ = mm_strdup("int"); +} +| INTEGER + { + $$ = mm_strdup("integer"); +} +| SMALLINT + { + $$ = mm_strdup("smallint"); +} +| BIGINT + { + $$ = mm_strdup("bigint"); +} +| REAL + { + $$ = mm_strdup("real"); +} +| FLOAT_P opt_float + { + $$ = cat_str(2,mm_strdup("float"),$2); +} +| DOUBLE_P PRECISION + { + $$ = mm_strdup("double precision"); +} +| DECIMAL_P opt_type_modifiers + { + $$ = cat_str(2,mm_strdup("decimal"),$2); +} +| DEC opt_type_modifiers + { + $$ = cat_str(2,mm_strdup("dec"),$2); +} +| NUMERIC opt_type_modifiers + { + $$ = cat_str(2,mm_strdup("numeric"),$2); +} +| BOOLEAN_P + { + $$ = mm_strdup("boolean"); +} +; + + + opt_float: + '(' Iconst ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + Bit: + BitWithLength + { + $$ = $1; +} +| BitWithoutLength + { + $$ = $1; +} +; + + + ConstBit: + BitWithLength + { + $$ = $1; +} +| BitWithoutLength + { + $$ = $1; +} +; + + + BitWithLength: + BIT opt_varying '(' expr_list ')' + { + $$ = cat_str(5,mm_strdup("bit"),$2,mm_strdup("("),$4,mm_strdup(")")); +} +; + + + BitWithoutLength: + BIT opt_varying + { + $$ = cat_str(2,mm_strdup("bit"),$2); +} +; + + + Character: + CharacterWithLength + { + $$ = $1; +} +| CharacterWithoutLength + { + $$ = $1; +} +; + + + ConstCharacter: + CharacterWithLength + { + $$ = $1; +} +| CharacterWithoutLength + { + $$ = $1; +} +; + + + CharacterWithLength: + character '(' Iconst ')' + { + $$ = cat_str(4,$1,mm_strdup("("),$3,mm_strdup(")")); +} +; + + + CharacterWithoutLength: + character + { + $$ = $1; +} +; + + + character: + CHARACTER opt_varying + { + $$ = cat_str(2,mm_strdup("character"),$2); +} +| CHAR_P opt_varying + { + $$ = cat_str(2,mm_strdup("char"),$2); +} +| VARCHAR + { + $$ = mm_strdup("varchar"); +} +| NATIONAL CHARACTER opt_varying + { + $$ = cat_str(2,mm_strdup("national character"),$3); +} +| NATIONAL CHAR_P opt_varying + { + $$ = cat_str(2,mm_strdup("national char"),$3); +} +| NCHAR opt_varying + { + $$ = cat_str(2,mm_strdup("nchar"),$2); +} +; + + + opt_varying: + VARYING + { + $$ = mm_strdup("varying"); +} +| + { + $$=EMPTY; } +; + + + ConstDatetime: + TIMESTAMP '(' Iconst ')' opt_timezone + { + $$ = cat_str(4,mm_strdup("timestamp ("),$3,mm_strdup(")"),$5); +} +| TIMESTAMP opt_timezone + { + $$ = cat_str(2,mm_strdup("timestamp"),$2); +} +| TIME '(' Iconst ')' opt_timezone + { + $$ = cat_str(4,mm_strdup("time ("),$3,mm_strdup(")"),$5); +} +| TIME opt_timezone + { + $$ = cat_str(2,mm_strdup("time"),$2); +} +; + + + ConstInterval: + INTERVAL + { + $$ = mm_strdup("interval"); +} +; + + + opt_timezone: + WITH_LA TIME ZONE + { + $$ = mm_strdup("with time zone"); +} +| WITHOUT TIME ZONE + { + $$ = mm_strdup("without time zone"); +} +| + { + $$=EMPTY; } +; + + + opt_interval: + YEAR_P + { + $$ = mm_strdup("year"); +} +| MONTH_P + { + $$ = mm_strdup("month"); +} +| DAY_P + { + $$ = mm_strdup("day"); +} +| HOUR_P + { + $$ = mm_strdup("hour"); +} +| MINUTE_P + { + $$ = mm_strdup("minute"); +} +| interval_second + { + $$ = $1; +} +| YEAR_P TO MONTH_P + { + $$ = mm_strdup("year to month"); +} +| DAY_P TO HOUR_P + { + $$ = mm_strdup("day to hour"); +} +| DAY_P TO MINUTE_P + { + $$ = mm_strdup("day to minute"); +} +| DAY_P TO interval_second + { + $$ = cat_str(2,mm_strdup("day to"),$3); +} +| HOUR_P TO MINUTE_P + { + $$ = mm_strdup("hour to minute"); +} +| HOUR_P TO interval_second + { + $$ = cat_str(2,mm_strdup("hour to"),$3); +} +| MINUTE_P TO interval_second + { + $$ = cat_str(2,mm_strdup("minute to"),$3); +} +| + { + $$=EMPTY; } +; + + + interval_second: + SECOND_P + { + $$ = mm_strdup("second"); +} +| SECOND_P '(' Iconst ')' + { + $$ = cat_str(3,mm_strdup("second ("),$3,mm_strdup(")")); +} +; + + + a_expr: + c_expr + { + $$ = $1; +} +| a_expr TYPECAST Typename + { + $$ = cat_str(3,$1,mm_strdup("::"),$3); +} +| a_expr COLLATE any_name + { + $$ = cat_str(3,$1,mm_strdup("collate"),$3); +} +| a_expr AT TIME ZONE a_expr %prec AT + { + $$ = cat_str(3,$1,mm_strdup("at time zone"),$5); +} +| '+' a_expr %prec UMINUS + { + $$ = cat_str(2,mm_strdup("+"),$2); +} +| '-' a_expr %prec UMINUS + { + $$ = cat_str(2,mm_strdup("-"),$2); +} +| a_expr '+' a_expr + { + $$ = cat_str(3,$1,mm_strdup("+"),$3); +} +| a_expr '-' a_expr + { + $$ = cat_str(3,$1,mm_strdup("-"),$3); +} +| a_expr '*' a_expr + { + $$ = cat_str(3,$1,mm_strdup("*"),$3); +} +| a_expr '/' a_expr + { + $$ = cat_str(3,$1,mm_strdup("/"),$3); +} +| a_expr '%' a_expr + { + $$ = cat_str(3,$1,mm_strdup("%"),$3); +} +| a_expr '^' a_expr + { + $$ = cat_str(3,$1,mm_strdup("^"),$3); +} +| a_expr '<' a_expr + { + $$ = cat_str(3,$1,mm_strdup("<"),$3); +} +| a_expr '>' a_expr + { + $$ = cat_str(3,$1,mm_strdup(">"),$3); +} +| a_expr '=' a_expr + { + $$ = cat_str(3,$1,mm_strdup("="),$3); +} +| a_expr LESS_EQUALS a_expr + { + $$ = cat_str(3,$1,mm_strdup("<="),$3); +} +| a_expr GREATER_EQUALS a_expr + { + $$ = cat_str(3,$1,mm_strdup(">="),$3); +} +| a_expr NOT_EQUALS a_expr + { + $$ = cat_str(3,$1,mm_strdup("<>"),$3); +} +| a_expr qual_Op a_expr %prec Op + { + $$ = cat_str(3,$1,$2,$3); +} +| qual_Op a_expr %prec Op + { + $$ = cat_str(2,$1,$2); +} +| a_expr AND a_expr + { + $$ = cat_str(3,$1,mm_strdup("and"),$3); +} +| a_expr OR a_expr + { + $$ = cat_str(3,$1,mm_strdup("or"),$3); +} +| NOT a_expr + { + $$ = cat_str(2,mm_strdup("not"),$2); +} +| NOT_LA a_expr %prec NOT + { + $$ = cat_str(2,mm_strdup("not"),$2); +} +| a_expr LIKE a_expr + { + $$ = cat_str(3,$1,mm_strdup("like"),$3); +} +| a_expr LIKE a_expr ESCAPE a_expr %prec LIKE + { + $$ = cat_str(5,$1,mm_strdup("like"),$3,mm_strdup("escape"),$5); +} +| a_expr NOT_LA LIKE a_expr %prec NOT_LA + { + $$ = cat_str(3,$1,mm_strdup("not like"),$4); +} +| a_expr NOT_LA LIKE a_expr ESCAPE a_expr %prec NOT_LA + { + $$ = cat_str(5,$1,mm_strdup("not like"),$4,mm_strdup("escape"),$6); +} +| a_expr ILIKE a_expr + { + $$ = cat_str(3,$1,mm_strdup("ilike"),$3); +} +| a_expr ILIKE a_expr ESCAPE a_expr %prec ILIKE + { + $$ = cat_str(5,$1,mm_strdup("ilike"),$3,mm_strdup("escape"),$5); +} +| a_expr NOT_LA ILIKE a_expr %prec NOT_LA + { + $$ = cat_str(3,$1,mm_strdup("not ilike"),$4); +} +| a_expr NOT_LA ILIKE a_expr ESCAPE a_expr %prec NOT_LA + { + $$ = cat_str(5,$1,mm_strdup("not ilike"),$4,mm_strdup("escape"),$6); +} +| a_expr SIMILAR TO a_expr %prec SIMILAR + { + $$ = cat_str(3,$1,mm_strdup("similar to"),$4); +} +| a_expr SIMILAR TO a_expr ESCAPE a_expr %prec SIMILAR + { + $$ = cat_str(5,$1,mm_strdup("similar to"),$4,mm_strdup("escape"),$6); +} +| a_expr NOT_LA SIMILAR TO a_expr %prec NOT_LA + { + $$ = cat_str(3,$1,mm_strdup("not similar to"),$5); +} +| a_expr NOT_LA SIMILAR TO a_expr ESCAPE a_expr %prec NOT_LA + { + $$ = cat_str(5,$1,mm_strdup("not similar to"),$5,mm_strdup("escape"),$7); +} +| a_expr IS NULL_P %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is null")); +} +| a_expr ISNULL + { + $$ = cat_str(2,$1,mm_strdup("isnull")); +} +| a_expr IS NOT NULL_P %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is not null")); +} +| a_expr NOTNULL + { + $$ = cat_str(2,$1,mm_strdup("notnull")); +} +| row OVERLAPS row + { + $$ = cat_str(3,$1,mm_strdup("overlaps"),$3); +} +| a_expr IS TRUE_P %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is true")); +} +| a_expr IS NOT TRUE_P %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is not true")); +} +| a_expr IS FALSE_P %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is false")); +} +| a_expr IS NOT FALSE_P %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is not false")); +} +| a_expr IS UNKNOWN %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is unknown")); +} +| a_expr IS NOT UNKNOWN %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is not unknown")); +} +| a_expr IS DISTINCT FROM a_expr %prec IS + { + $$ = cat_str(3,$1,mm_strdup("is distinct from"),$5); +} +| a_expr IS NOT DISTINCT FROM a_expr %prec IS + { + $$ = cat_str(3,$1,mm_strdup("is not distinct from"),$6); +} +| a_expr BETWEEN opt_asymmetric b_expr AND a_expr %prec BETWEEN + { + $$ = cat_str(6,$1,mm_strdup("between"),$3,$4,mm_strdup("and"),$6); +} +| a_expr NOT_LA BETWEEN opt_asymmetric b_expr AND a_expr %prec NOT_LA + { + $$ = cat_str(6,$1,mm_strdup("not between"),$4,$5,mm_strdup("and"),$7); +} +| a_expr BETWEEN SYMMETRIC b_expr AND a_expr %prec BETWEEN + { + $$ = cat_str(5,$1,mm_strdup("between symmetric"),$4,mm_strdup("and"),$6); +} +| a_expr NOT_LA BETWEEN SYMMETRIC b_expr AND a_expr %prec NOT_LA + { + $$ = cat_str(5,$1,mm_strdup("not between symmetric"),$5,mm_strdup("and"),$7); +} +| a_expr IN_P in_expr + { + $$ = cat_str(3,$1,mm_strdup("in"),$3); +} +| a_expr NOT_LA IN_P in_expr %prec NOT_LA + { + $$ = cat_str(3,$1,mm_strdup("not in"),$4); +} +| a_expr subquery_Op sub_type select_with_parens %prec Op + { + $$ = cat_str(4,$1,$2,$3,$4); +} +| a_expr subquery_Op sub_type '(' a_expr ')' %prec Op + { + $$ = cat_str(6,$1,$2,$3,mm_strdup("("),$5,mm_strdup(")")); +} +| UNIQUE select_with_parens + { +mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to server"); + $$ = cat_str(2,mm_strdup("unique"),$2); +} +| a_expr IS DOCUMENT_P %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is document")); +} +| a_expr IS NOT DOCUMENT_P %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is not document")); +} +| a_expr IS NORMALIZED %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is normalized")); +} +| a_expr IS unicode_normal_form NORMALIZED %prec IS + { + $$ = cat_str(4,$1,mm_strdup("is"),$3,mm_strdup("normalized")); +} +| a_expr IS NOT NORMALIZED %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is not normalized")); +} +| a_expr IS NOT unicode_normal_form NORMALIZED %prec IS + { + $$ = cat_str(4,$1,mm_strdup("is not"),$4,mm_strdup("normalized")); +} +| DEFAULT + { + $$ = mm_strdup("default"); +} +; + + + b_expr: + c_expr + { + $$ = $1; +} +| b_expr TYPECAST Typename + { + $$ = cat_str(3,$1,mm_strdup("::"),$3); +} +| '+' b_expr %prec UMINUS + { + $$ = cat_str(2,mm_strdup("+"),$2); +} +| '-' b_expr %prec UMINUS + { + $$ = cat_str(2,mm_strdup("-"),$2); +} +| b_expr '+' b_expr + { + $$ = cat_str(3,$1,mm_strdup("+"),$3); +} +| b_expr '-' b_expr + { + $$ = cat_str(3,$1,mm_strdup("-"),$3); +} +| b_expr '*' b_expr + { + $$ = cat_str(3,$1,mm_strdup("*"),$3); +} +| b_expr '/' b_expr + { + $$ = cat_str(3,$1,mm_strdup("/"),$3); +} +| b_expr '%' b_expr + { + $$ = cat_str(3,$1,mm_strdup("%"),$3); +} +| b_expr '^' b_expr + { + $$ = cat_str(3,$1,mm_strdup("^"),$3); +} +| b_expr '<' b_expr + { + $$ = cat_str(3,$1,mm_strdup("<"),$3); +} +| b_expr '>' b_expr + { + $$ = cat_str(3,$1,mm_strdup(">"),$3); +} +| b_expr '=' b_expr + { + $$ = cat_str(3,$1,mm_strdup("="),$3); +} +| b_expr LESS_EQUALS b_expr + { + $$ = cat_str(3,$1,mm_strdup("<="),$3); +} +| b_expr GREATER_EQUALS b_expr + { + $$ = cat_str(3,$1,mm_strdup(">="),$3); +} +| b_expr NOT_EQUALS b_expr + { + $$ = cat_str(3,$1,mm_strdup("<>"),$3); +} +| b_expr qual_Op b_expr %prec Op + { + $$ = cat_str(3,$1,$2,$3); +} +| qual_Op b_expr %prec Op + { + $$ = cat_str(2,$1,$2); +} +| b_expr IS DISTINCT FROM b_expr %prec IS + { + $$ = cat_str(3,$1,mm_strdup("is distinct from"),$5); +} +| b_expr IS NOT DISTINCT FROM b_expr %prec IS + { + $$ = cat_str(3,$1,mm_strdup("is not distinct from"),$6); +} +| b_expr IS DOCUMENT_P %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is document")); +} +| b_expr IS NOT DOCUMENT_P %prec IS + { + $$ = cat_str(2,$1,mm_strdup("is not document")); +} +; + + + c_expr: + columnref + { + $$ = $1; +} +| AexprConst + { + $$ = $1; +} +| ecpg_param opt_indirection + { + $$ = cat_str(2,$1,$2); +} +| '(' a_expr ')' opt_indirection + { + $$ = cat_str(4,mm_strdup("("),$2,mm_strdup(")"),$4); +} +| case_expr + { + $$ = $1; +} +| func_expr + { + $$ = $1; +} +| select_with_parens %prec UMINUS + { + $$ = $1; +} +| select_with_parens indirection + { + $$ = cat_str(2,$1,$2); +} +| EXISTS select_with_parens + { + $$ = cat_str(2,mm_strdup("exists"),$2); +} +| ARRAY select_with_parens + { + $$ = cat_str(2,mm_strdup("array"),$2); +} +| ARRAY array_expr + { + $$ = cat_str(2,mm_strdup("array"),$2); +} +| explicit_row + { + $$ = $1; +} +| implicit_row + { + $$ = $1; +} +| GROUPING '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("grouping ("),$3,mm_strdup(")")); +} +; + + + func_application: + func_name '(' ')' + { + $$ = cat_str(2,$1,mm_strdup("( )")); +} +| func_name '(' func_arg_list opt_sort_clause ')' + { + $$ = cat_str(5,$1,mm_strdup("("),$3,$4,mm_strdup(")")); +} +| func_name '(' VARIADIC func_arg_expr opt_sort_clause ')' + { + $$ = cat_str(5,$1,mm_strdup("( variadic"),$4,$5,mm_strdup(")")); +} +| func_name '(' func_arg_list ',' VARIADIC func_arg_expr opt_sort_clause ')' + { + $$ = cat_str(7,$1,mm_strdup("("),$3,mm_strdup(", variadic"),$6,$7,mm_strdup(")")); +} +| func_name '(' ALL func_arg_list opt_sort_clause ')' + { + $$ = cat_str(5,$1,mm_strdup("( all"),$4,$5,mm_strdup(")")); +} +| func_name '(' DISTINCT func_arg_list opt_sort_clause ')' + { + $$ = cat_str(5,$1,mm_strdup("( distinct"),$4,$5,mm_strdup(")")); +} +| func_name '(' '*' ')' + { + $$ = cat_str(2,$1,mm_strdup("( * )")); +} +; + + + func_expr: + func_application within_group_clause filter_clause over_clause + { + $$ = cat_str(4,$1,$2,$3,$4); +} +| func_expr_common_subexpr + { + $$ = $1; +} +; + + + func_expr_windowless: + func_application + { + $$ = $1; +} +| func_expr_common_subexpr + { + $$ = $1; +} +; + + + func_expr_common_subexpr: + COLLATION FOR '(' a_expr ')' + { + $$ = cat_str(3,mm_strdup("collation for ("),$4,mm_strdup(")")); +} +| CURRENT_DATE + { + $$ = mm_strdup("current_date"); +} +| CURRENT_TIME + { + $$ = mm_strdup("current_time"); +} +| CURRENT_TIME '(' Iconst ')' + { + $$ = cat_str(3,mm_strdup("current_time ("),$3,mm_strdup(")")); +} +| CURRENT_TIMESTAMP + { + $$ = mm_strdup("current_timestamp"); +} +| CURRENT_TIMESTAMP '(' Iconst ')' + { + $$ = cat_str(3,mm_strdup("current_timestamp ("),$3,mm_strdup(")")); +} +| LOCALTIME + { + $$ = mm_strdup("localtime"); +} +| LOCALTIME '(' Iconst ')' + { + $$ = cat_str(3,mm_strdup("localtime ("),$3,mm_strdup(")")); +} +| LOCALTIMESTAMP + { + $$ = mm_strdup("localtimestamp"); +} +| LOCALTIMESTAMP '(' Iconst ')' + { + $$ = cat_str(3,mm_strdup("localtimestamp ("),$3,mm_strdup(")")); +} +| CURRENT_ROLE + { + $$ = mm_strdup("current_role"); +} +| CURRENT_USER + { + $$ = mm_strdup("current_user"); +} +| SESSION_USER + { + $$ = mm_strdup("session_user"); +} +| USER + { + $$ = mm_strdup("user"); +} +| CURRENT_CATALOG + { + $$ = mm_strdup("current_catalog"); +} +| CURRENT_SCHEMA + { + $$ = mm_strdup("current_schema"); +} +| CAST '(' a_expr AS Typename ')' + { + $$ = cat_str(5,mm_strdup("cast ("),$3,mm_strdup("as"),$5,mm_strdup(")")); +} +| EXTRACT '(' extract_list ')' + { + $$ = cat_str(3,mm_strdup("extract ("),$3,mm_strdup(")")); +} +| NORMALIZE '(' a_expr ')' + { + $$ = cat_str(3,mm_strdup("normalize ("),$3,mm_strdup(")")); +} +| NORMALIZE '(' a_expr ',' unicode_normal_form ')' + { + $$ = cat_str(5,mm_strdup("normalize ("),$3,mm_strdup(","),$5,mm_strdup(")")); +} +| OVERLAY '(' overlay_list ')' + { + $$ = cat_str(3,mm_strdup("overlay ("),$3,mm_strdup(")")); +} +| OVERLAY '(' func_arg_list_opt ')' + { + $$ = cat_str(3,mm_strdup("overlay ("),$3,mm_strdup(")")); +} +| POSITION '(' position_list ')' + { + $$ = cat_str(3,mm_strdup("position ("),$3,mm_strdup(")")); +} +| SUBSTRING '(' substr_list ')' + { + $$ = cat_str(3,mm_strdup("substring ("),$3,mm_strdup(")")); +} +| SUBSTRING '(' func_arg_list_opt ')' + { + $$ = cat_str(3,mm_strdup("substring ("),$3,mm_strdup(")")); +} +| TREAT '(' a_expr AS Typename ')' + { + $$ = cat_str(5,mm_strdup("treat ("),$3,mm_strdup("as"),$5,mm_strdup(")")); +} +| TRIM '(' BOTH trim_list ')' + { + $$ = cat_str(3,mm_strdup("trim ( both"),$4,mm_strdup(")")); +} +| TRIM '(' LEADING trim_list ')' + { + $$ = cat_str(3,mm_strdup("trim ( leading"),$4,mm_strdup(")")); +} +| TRIM '(' TRAILING trim_list ')' + { + $$ = cat_str(3,mm_strdup("trim ( trailing"),$4,mm_strdup(")")); +} +| TRIM '(' trim_list ')' + { + $$ = cat_str(3,mm_strdup("trim ("),$3,mm_strdup(")")); +} +| NULLIF '(' a_expr ',' a_expr ')' + { + $$ = cat_str(5,mm_strdup("nullif ("),$3,mm_strdup(","),$5,mm_strdup(")")); +} +| COALESCE '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("coalesce ("),$3,mm_strdup(")")); +} +| GREATEST '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("greatest ("),$3,mm_strdup(")")); +} +| LEAST '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("least ("),$3,mm_strdup(")")); +} +| XMLCONCAT '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("xmlconcat ("),$3,mm_strdup(")")); +} +| XMLELEMENT '(' NAME_P ColLabel ')' + { + $$ = cat_str(3,mm_strdup("xmlelement ( name"),$4,mm_strdup(")")); +} +| XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes ')' + { + $$ = cat_str(5,mm_strdup("xmlelement ( name"),$4,mm_strdup(","),$6,mm_strdup(")")); +} +| XMLELEMENT '(' NAME_P ColLabel ',' expr_list ')' + { + $$ = cat_str(5,mm_strdup("xmlelement ( name"),$4,mm_strdup(","),$6,mm_strdup(")")); +} +| XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes ',' expr_list ')' + { + $$ = cat_str(7,mm_strdup("xmlelement ( name"),$4,mm_strdup(","),$6,mm_strdup(","),$8,mm_strdup(")")); +} +| XMLEXISTS '(' c_expr xmlexists_argument ')' + { + $$ = cat_str(4,mm_strdup("xmlexists ("),$3,$4,mm_strdup(")")); +} +| XMLFOREST '(' xml_attribute_list ')' + { + $$ = cat_str(3,mm_strdup("xmlforest ("),$3,mm_strdup(")")); +} +| XMLPARSE '(' document_or_content a_expr xml_whitespace_option ')' + { + $$ = cat_str(5,mm_strdup("xmlparse ("),$3,$4,$5,mm_strdup(")")); +} +| XMLPI '(' NAME_P ColLabel ')' + { + $$ = cat_str(3,mm_strdup("xmlpi ( name"),$4,mm_strdup(")")); +} +| XMLPI '(' NAME_P ColLabel ',' a_expr ')' + { + $$ = cat_str(5,mm_strdup("xmlpi ( name"),$4,mm_strdup(","),$6,mm_strdup(")")); +} +| XMLROOT '(' a_expr ',' xml_root_version opt_xml_root_standalone ')' + { + $$ = cat_str(6,mm_strdup("xmlroot ("),$3,mm_strdup(","),$5,$6,mm_strdup(")")); +} +| XMLSERIALIZE '(' document_or_content a_expr AS SimpleTypename ')' + { + $$ = cat_str(6,mm_strdup("xmlserialize ("),$3,$4,mm_strdup("as"),$6,mm_strdup(")")); +} +; + + + xml_root_version: + VERSION_P a_expr + { + $$ = cat_str(2,mm_strdup("version"),$2); +} +| VERSION_P NO VALUE_P + { + $$ = mm_strdup("version no value"); +} +; + + + opt_xml_root_standalone: + ',' STANDALONE_P YES_P + { + $$ = mm_strdup(", standalone yes"); +} +| ',' STANDALONE_P NO + { + $$ = mm_strdup(", standalone no"); +} +| ',' STANDALONE_P NO VALUE_P + { + $$ = mm_strdup(", standalone no value"); +} +| + { + $$=EMPTY; } +; + + + xml_attributes: + XMLATTRIBUTES '(' xml_attribute_list ')' + { + $$ = cat_str(3,mm_strdup("xmlattributes ("),$3,mm_strdup(")")); +} +; + + + xml_attribute_list: + xml_attribute_el + { + $$ = $1; +} +| xml_attribute_list ',' xml_attribute_el + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + xml_attribute_el: + a_expr AS ColLabel + { + $$ = cat_str(3,$1,mm_strdup("as"),$3); +} +| a_expr + { + $$ = $1; +} +; + + + document_or_content: + DOCUMENT_P + { + $$ = mm_strdup("document"); +} +| CONTENT_P + { + $$ = mm_strdup("content"); +} +; + + + xml_whitespace_option: + PRESERVE WHITESPACE_P + { + $$ = mm_strdup("preserve whitespace"); +} +| STRIP_P WHITESPACE_P + { + $$ = mm_strdup("strip whitespace"); +} +| + { + $$=EMPTY; } +; + + + xmlexists_argument: + PASSING c_expr + { + $$ = cat_str(2,mm_strdup("passing"),$2); +} +| PASSING c_expr xml_passing_mech + { + $$ = cat_str(3,mm_strdup("passing"),$2,$3); +} +| PASSING xml_passing_mech c_expr + { + $$ = cat_str(3,mm_strdup("passing"),$2,$3); +} +| PASSING xml_passing_mech c_expr xml_passing_mech + { + $$ = cat_str(4,mm_strdup("passing"),$2,$3,$4); +} +; + + + xml_passing_mech: + BY REF + { + $$ = mm_strdup("by ref"); +} +| BY VALUE_P + { + $$ = mm_strdup("by value"); +} +; + + + within_group_clause: + WITHIN GROUP_P '(' sort_clause ')' + { + $$ = cat_str(3,mm_strdup("within group ("),$4,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + filter_clause: + FILTER '(' WHERE a_expr ')' + { + $$ = cat_str(3,mm_strdup("filter ( where"),$4,mm_strdup(")")); +} +| + { + $$=EMPTY; } +; + + + window_clause: + WINDOW window_definition_list + { + $$ = cat_str(2,mm_strdup("window"),$2); +} +| + { + $$=EMPTY; } +; + + + window_definition_list: + window_definition + { + $$ = $1; +} +| window_definition_list ',' window_definition + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + window_definition: + ColId AS window_specification + { + $$ = cat_str(3,$1,mm_strdup("as"),$3); +} +; + + + over_clause: + OVER window_specification + { + $$ = cat_str(2,mm_strdup("over"),$2); +} +| OVER ColId + { + $$ = cat_str(2,mm_strdup("over"),$2); +} +| + { + $$=EMPTY; } +; + + + window_specification: + '(' opt_existing_window_name opt_partition_clause opt_sort_clause opt_frame_clause ')' + { + $$ = cat_str(6,mm_strdup("("),$2,$3,$4,$5,mm_strdup(")")); +} +; + + + opt_existing_window_name: + ColId + { + $$ = $1; +} +| %prec Op + { + $$=EMPTY; } +; + + + opt_partition_clause: + PARTITION BY expr_list + { + $$ = cat_str(2,mm_strdup("partition by"),$3); +} +| + { + $$=EMPTY; } +; + + + opt_frame_clause: + RANGE frame_extent opt_window_exclusion_clause + { + $$ = cat_str(3,mm_strdup("range"),$2,$3); +} +| ROWS frame_extent opt_window_exclusion_clause + { + $$ = cat_str(3,mm_strdup("rows"),$2,$3); +} +| GROUPS frame_extent opt_window_exclusion_clause + { + $$ = cat_str(3,mm_strdup("groups"),$2,$3); +} +| + { + $$=EMPTY; } +; + + + frame_extent: + frame_bound + { + $$ = $1; +} +| BETWEEN frame_bound AND frame_bound + { + $$ = cat_str(4,mm_strdup("between"),$2,mm_strdup("and"),$4); +} +; + + + frame_bound: + UNBOUNDED PRECEDING + { + $$ = mm_strdup("unbounded preceding"); +} +| UNBOUNDED FOLLOWING + { + $$ = mm_strdup("unbounded following"); +} +| CURRENT_P ROW + { + $$ = mm_strdup("current row"); +} +| a_expr PRECEDING + { + $$ = cat_str(2,$1,mm_strdup("preceding")); +} +| a_expr FOLLOWING + { + $$ = cat_str(2,$1,mm_strdup("following")); +} +; + + + opt_window_exclusion_clause: + EXCLUDE CURRENT_P ROW + { + $$ = mm_strdup("exclude current row"); +} +| EXCLUDE GROUP_P + { + $$ = mm_strdup("exclude group"); +} +| EXCLUDE TIES + { + $$ = mm_strdup("exclude ties"); +} +| EXCLUDE NO OTHERS + { + $$ = mm_strdup("exclude no others"); +} +| + { + $$=EMPTY; } +; + + + row: + ROW '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("row ("),$3,mm_strdup(")")); +} +| ROW '(' ')' + { + $$ = mm_strdup("row ( )"); +} +| '(' expr_list ',' a_expr ')' + { + $$ = cat_str(5,mm_strdup("("),$2,mm_strdup(","),$4,mm_strdup(")")); +} +; + + + explicit_row: + ROW '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("row ("),$3,mm_strdup(")")); +} +| ROW '(' ')' + { + $$ = mm_strdup("row ( )"); +} +; + + + implicit_row: + '(' expr_list ',' a_expr ')' + { + $$ = cat_str(5,mm_strdup("("),$2,mm_strdup(","),$4,mm_strdup(")")); +} +; + + + sub_type: + ANY + { + $$ = mm_strdup("any"); +} +| SOME + { + $$ = mm_strdup("some"); +} +| ALL + { + $$ = mm_strdup("all"); +} +; + + + all_Op: + Op + { + $$ = $1; +} +| MathOp + { + $$ = $1; +} +; + + + MathOp: + '+' + { + $$ = mm_strdup("+"); +} +| '-' + { + $$ = mm_strdup("-"); +} +| '*' + { + $$ = mm_strdup("*"); +} +| '/' + { + $$ = mm_strdup("/"); +} +| '%' + { + $$ = mm_strdup("%"); +} +| '^' + { + $$ = mm_strdup("^"); +} +| '<' + { + $$ = mm_strdup("<"); +} +| '>' + { + $$ = mm_strdup(">"); +} +| '=' + { + $$ = mm_strdup("="); +} +| LESS_EQUALS + { + $$ = mm_strdup("<="); +} +| GREATER_EQUALS + { + $$ = mm_strdup(">="); +} +| NOT_EQUALS + { + $$ = mm_strdup("<>"); +} +; + + + qual_Op: + Op + { + $$ = $1; +} +| OPERATOR '(' any_operator ')' + { + $$ = cat_str(3,mm_strdup("operator ("),$3,mm_strdup(")")); +} +; + + + qual_all_Op: + all_Op + { + $$ = $1; +} +| OPERATOR '(' any_operator ')' + { + $$ = cat_str(3,mm_strdup("operator ("),$3,mm_strdup(")")); +} +; + + + subquery_Op: + all_Op + { + $$ = $1; +} +| OPERATOR '(' any_operator ')' + { + $$ = cat_str(3,mm_strdup("operator ("),$3,mm_strdup(")")); +} +| LIKE + { + $$ = mm_strdup("like"); +} +| NOT_LA LIKE + { + $$ = mm_strdup("not like"); +} +| ILIKE + { + $$ = mm_strdup("ilike"); +} +| NOT_LA ILIKE + { + $$ = mm_strdup("not ilike"); +} +; + + + expr_list: + a_expr + { + $$ = $1; +} +| expr_list ',' a_expr + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + func_arg_list: + func_arg_expr + { + $$ = $1; +} +| func_arg_list ',' func_arg_expr + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + func_arg_expr: + a_expr + { + $$ = $1; +} +| param_name COLON_EQUALS a_expr + { + $$ = cat_str(3,$1,mm_strdup(":="),$3); +} +| param_name EQUALS_GREATER a_expr + { + $$ = cat_str(3,$1,mm_strdup("=>"),$3); +} +; + + + func_arg_list_opt: + func_arg_list + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + type_list: + Typename + { + $$ = $1; +} +| type_list ',' Typename + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + array_expr: + '[' expr_list ']' + { + $$ = cat_str(3,mm_strdup("["),$2,mm_strdup("]")); +} +| '[' array_expr_list ']' + { + $$ = cat_str(3,mm_strdup("["),$2,mm_strdup("]")); +} +| '[' ']' + { + $$ = mm_strdup("[ ]"); +} +; + + + array_expr_list: + array_expr + { + $$ = $1; +} +| array_expr_list ',' array_expr + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + extract_list: + extract_arg FROM a_expr + { + $$ = cat_str(3,$1,mm_strdup("from"),$3); +} +; + + + extract_arg: + ecpg_ident + { + $$ = $1; +} +| YEAR_P + { + $$ = mm_strdup("year"); +} +| MONTH_P + { + $$ = mm_strdup("month"); +} +| DAY_P + { + $$ = mm_strdup("day"); +} +| HOUR_P + { + $$ = mm_strdup("hour"); +} +| MINUTE_P + { + $$ = mm_strdup("minute"); +} +| SECOND_P + { + $$ = mm_strdup("second"); +} +| ecpg_sconst + { + $$ = $1; +} +; + + + unicode_normal_form: + NFC + { + $$ = mm_strdup("nfc"); +} +| NFD + { + $$ = mm_strdup("nfd"); +} +| NFKC + { + $$ = mm_strdup("nfkc"); +} +| NFKD + { + $$ = mm_strdup("nfkd"); +} +; + + + overlay_list: + a_expr PLACING a_expr FROM a_expr FOR a_expr + { + $$ = cat_str(7,$1,mm_strdup("placing"),$3,mm_strdup("from"),$5,mm_strdup("for"),$7); +} +| a_expr PLACING a_expr FROM a_expr + { + $$ = cat_str(5,$1,mm_strdup("placing"),$3,mm_strdup("from"),$5); +} +; + + + position_list: + b_expr IN_P b_expr + { + $$ = cat_str(3,$1,mm_strdup("in"),$3); +} +; + + + substr_list: + a_expr FROM a_expr FOR a_expr + { + $$ = cat_str(5,$1,mm_strdup("from"),$3,mm_strdup("for"),$5); +} +| a_expr FOR a_expr FROM a_expr + { + $$ = cat_str(5,$1,mm_strdup("for"),$3,mm_strdup("from"),$5); +} +| a_expr FROM a_expr + { + $$ = cat_str(3,$1,mm_strdup("from"),$3); +} +| a_expr FOR a_expr + { + $$ = cat_str(3,$1,mm_strdup("for"),$3); +} +| a_expr SIMILAR a_expr ESCAPE a_expr + { + $$ = cat_str(5,$1,mm_strdup("similar"),$3,mm_strdup("escape"),$5); +} +; + + + trim_list: + a_expr FROM expr_list + { + $$ = cat_str(3,$1,mm_strdup("from"),$3); +} +| FROM expr_list + { + $$ = cat_str(2,mm_strdup("from"),$2); +} +| expr_list + { + $$ = $1; +} +; + + + in_expr: + select_with_parens + { + $$ = $1; +} +| '(' expr_list ')' + { + $$ = cat_str(3,mm_strdup("("),$2,mm_strdup(")")); +} +; + + + case_expr: + CASE case_arg when_clause_list case_default END_P + { + $$ = cat_str(5,mm_strdup("case"),$2,$3,$4,mm_strdup("end")); +} +; + + + when_clause_list: + when_clause + { + $$ = $1; +} +| when_clause_list when_clause + { + $$ = cat_str(2,$1,$2); +} +; + + + when_clause: + WHEN a_expr THEN a_expr + { + $$ = cat_str(4,mm_strdup("when"),$2,mm_strdup("then"),$4); +} +; + + + case_default: + ELSE a_expr + { + $$ = cat_str(2,mm_strdup("else"),$2); +} +| + { + $$=EMPTY; } +; + + + case_arg: + a_expr + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + columnref: + ColId + { + $$ = $1; +} +| ColId indirection + { + $$ = cat_str(2,$1,$2); +} +; + + + indirection_el: + '.' attr_name + { + $$ = cat_str(2,mm_strdup("."),$2); +} +| '.' '*' + { + $$ = mm_strdup(". *"); +} +| '[' a_expr ']' + { + $$ = cat_str(3,mm_strdup("["),$2,mm_strdup("]")); +} +| '[' opt_slice_bound ':' opt_slice_bound ']' + { + $$ = cat_str(5,mm_strdup("["),$2,mm_strdup(":"),$4,mm_strdup("]")); +} +; + + + opt_slice_bound: + a_expr + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + indirection: + indirection_el + { + $$ = $1; +} +| indirection indirection_el + { + $$ = cat_str(2,$1,$2); +} +; + + + opt_indirection: + + { + $$=EMPTY; } +| opt_indirection indirection_el + { + $$ = cat_str(2,$1,$2); +} +; + + + opt_asymmetric: + ASYMMETRIC + { + $$ = mm_strdup("asymmetric"); +} +| + { + $$=EMPTY; } +; + + + opt_target_list: + target_list + { + $$ = $1; +} +| + { + $$=EMPTY; } +; + + + target_list: + target_el + { + $$ = $1; +} +| target_list ',' target_el + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + target_el: + a_expr AS ColLabel + { + $$ = cat_str(3,$1,mm_strdup("as"),$3); +} +| a_expr BareColLabel + { + $$ = cat_str(2,$1,$2); +} +| a_expr + { + $$ = $1; +} +| '*' + { + $$ = mm_strdup("*"); +} +; + + + qualified_name_list: + qualified_name + { + $$ = $1; +} +| qualified_name_list ',' qualified_name + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + qualified_name: + ColId + { + $$ = $1; +} +| ColId indirection + { + $$ = cat_str(2,$1,$2); +} +; + + + name_list: + name + { + $$ = $1; +} +| name_list ',' name + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + name: + ColId + { + $$ = $1; +} +; + + + attr_name: + ColLabel + { + $$ = $1; +} +; + + + file_name: + ecpg_sconst + { + $$ = $1; +} +; + + + func_name: + type_function_name + { + $$ = $1; +} +| ColId indirection + { + $$ = cat_str(2,$1,$2); +} +; + + + AexprConst: + Iconst + { + $$ = $1; +} +| ecpg_fconst + { + $$ = $1; +} +| ecpg_sconst + { + $$ = $1; +} +| ecpg_bconst + { + $$ = $1; +} +| ecpg_xconst + { + $$ = $1; +} +| func_name ecpg_sconst + { + $$ = cat_str(2,$1,$2); +} +| func_name '(' func_arg_list opt_sort_clause ')' ecpg_sconst + { + $$ = cat_str(6,$1,mm_strdup("("),$3,$4,mm_strdup(")"),$6); +} +| ConstTypename ecpg_sconst + { + $$ = cat_str(2,$1,$2); +} +| ConstInterval ecpg_sconst opt_interval + { + $$ = cat_str(3,$1,$2,$3); +} +| ConstInterval '(' Iconst ')' ecpg_sconst + { + $$ = cat_str(5,$1,mm_strdup("("),$3,mm_strdup(")"),$5); +} +| TRUE_P + { + $$ = mm_strdup("true"); +} +| FALSE_P + { + $$ = mm_strdup("false"); +} +| NULL_P + { + $$ = mm_strdup("null"); +} + | civar { $$ = $1; } + | civarind { $$ = $1; } +; + + + Iconst: + ICONST + { $$ = make_name(); } +; + + + SignedIconst: + Iconst + { + $$ = $1; +} + | civar { $$ = $1; } +| '+' Iconst + { + $$ = cat_str(2,mm_strdup("+"),$2); +} +| '-' Iconst + { + $$ = cat_str(2,mm_strdup("-"),$2); +} +; + + + RoleId: + RoleSpec + { + $$ = $1; +} +; + + + RoleSpec: + NonReservedWord + { + $$ = $1; +} +| CURRENT_ROLE + { + $$ = mm_strdup("current_role"); +} +| CURRENT_USER + { + $$ = mm_strdup("current_user"); +} +| SESSION_USER + { + $$ = mm_strdup("session_user"); +} +; + + + role_list: + RoleSpec + { + $$ = $1; +} +| role_list ',' RoleSpec + { + $$ = cat_str(3,$1,mm_strdup(","),$3); +} +; + + + NonReservedWord: + ecpg_ident + { + $$ = $1; +} +| unreserved_keyword + { + $$ = $1; +} +| col_name_keyword + { + $$ = $1; +} +| type_func_name_keyword + { + $$ = $1; +} +; + + + BareColLabel: + ecpg_ident + { + $$ = $1; +} +| bare_label_keyword + { + $$ = $1; +} +; + + + unreserved_keyword: + ABORT_P + { + $$ = mm_strdup("abort"); +} +| ABSOLUTE_P + { + $$ = mm_strdup("absolute"); +} +| ACCESS + { + $$ = mm_strdup("access"); +} +| ACTION + { + $$ = mm_strdup("action"); +} +| ADD_P + { + $$ = mm_strdup("add"); +} +| ADMIN + { + $$ = mm_strdup("admin"); +} +| AFTER + { + $$ = mm_strdup("after"); +} +| AGGREGATE + { + $$ = mm_strdup("aggregate"); +} +| ALSO + { + $$ = mm_strdup("also"); +} +| ALTER + { + $$ = mm_strdup("alter"); +} +| ALWAYS + { + $$ = mm_strdup("always"); +} +| ASENSITIVE + { + $$ = mm_strdup("asensitive"); +} +| ASSERTION + { + $$ = mm_strdup("assertion"); +} +| ASSIGNMENT + { + $$ = mm_strdup("assignment"); +} +| AT + { + $$ = mm_strdup("at"); +} +| ATOMIC + { + $$ = mm_strdup("atomic"); +} +| ATTACH + { + $$ = mm_strdup("attach"); +} +| ATTRIBUTE + { + $$ = mm_strdup("attribute"); +} +| BACKWARD + { + $$ = mm_strdup("backward"); +} +| BEFORE + { + $$ = mm_strdup("before"); +} +| BEGIN_P + { + $$ = mm_strdup("begin"); +} +| BREADTH + { + $$ = mm_strdup("breadth"); +} +| BY + { + $$ = mm_strdup("by"); +} +| CACHE + { + $$ = mm_strdup("cache"); +} +| CALL + { + $$ = mm_strdup("call"); +} +| CALLED + { + $$ = mm_strdup("called"); +} +| CASCADE + { + $$ = mm_strdup("cascade"); +} +| CASCADED + { + $$ = mm_strdup("cascaded"); +} +| CATALOG_P + { + $$ = mm_strdup("catalog"); +} +| CHAIN + { + $$ = mm_strdup("chain"); +} +| CHARACTERISTICS + { + $$ = mm_strdup("characteristics"); +} +| CHECKPOINT + { + $$ = mm_strdup("checkpoint"); +} +| CLASS + { + $$ = mm_strdup("class"); +} +| CLOSE + { + $$ = mm_strdup("close"); +} +| CLUSTER + { + $$ = mm_strdup("cluster"); +} +| COLUMNS + { + $$ = mm_strdup("columns"); +} +| COMMENT + { + $$ = mm_strdup("comment"); +} +| COMMENTS + { + $$ = mm_strdup("comments"); +} +| COMMIT + { + $$ = mm_strdup("commit"); +} +| COMMITTED + { + $$ = mm_strdup("committed"); +} +| COMPRESSION + { + $$ = mm_strdup("compression"); +} +| CONFIGURATION + { + $$ = mm_strdup("configuration"); +} +| CONFLICT + { + $$ = mm_strdup("conflict"); +} +| CONSTRAINTS + { + $$ = mm_strdup("constraints"); +} +| CONTENT_P + { + $$ = mm_strdup("content"); +} +| CONTINUE_P + { + $$ = mm_strdup("continue"); +} +| CONVERSION_P + { + $$ = mm_strdup("conversion"); +} +| COPY + { + $$ = mm_strdup("copy"); +} +| COST + { + $$ = mm_strdup("cost"); +} +| CSV + { + $$ = mm_strdup("csv"); +} +| CUBE + { + $$ = mm_strdup("cube"); +} +| CURSOR + { + $$ = mm_strdup("cursor"); +} +| CYCLE + { + $$ = mm_strdup("cycle"); +} +| DATA_P + { + $$ = mm_strdup("data"); +} +| DATABASE + { + $$ = mm_strdup("database"); +} +| DEALLOCATE + { + $$ = mm_strdup("deallocate"); +} +| DECLARE + { + $$ = mm_strdup("declare"); +} +| DEFAULTS + { + $$ = mm_strdup("defaults"); +} +| DEFERRED + { + $$ = mm_strdup("deferred"); +} +| DEFINER + { + $$ = mm_strdup("definer"); +} +| DELETE_P + { + $$ = mm_strdup("delete"); +} +| DELIMITER + { + $$ = mm_strdup("delimiter"); +} +| DELIMITERS + { + $$ = mm_strdup("delimiters"); +} +| DEPENDS + { + $$ = mm_strdup("depends"); +} +| DEPTH + { + $$ = mm_strdup("depth"); +} +| DETACH + { + $$ = mm_strdup("detach"); +} +| DICTIONARY + { + $$ = mm_strdup("dictionary"); +} +| DISABLE_P + { + $$ = mm_strdup("disable"); +} +| DISCARD + { + $$ = mm_strdup("discard"); +} +| DOCUMENT_P + { + $$ = mm_strdup("document"); +} +| DOMAIN_P + { + $$ = mm_strdup("domain"); +} +| DOUBLE_P + { + $$ = mm_strdup("double"); +} +| DROP + { + $$ = mm_strdup("drop"); +} +| EACH + { + $$ = mm_strdup("each"); +} +| ENABLE_P + { + $$ = mm_strdup("enable"); +} +| ENCODING + { + $$ = mm_strdup("encoding"); +} +| ENCRYPTED + { + $$ = mm_strdup("encrypted"); +} +| ENUM_P + { + $$ = mm_strdup("enum"); +} +| ESCAPE + { + $$ = mm_strdup("escape"); +} +| EVENT + { + $$ = mm_strdup("event"); +} +| EXCLUDE + { + $$ = mm_strdup("exclude"); +} +| EXCLUDING + { + $$ = mm_strdup("excluding"); +} +| EXCLUSIVE + { + $$ = mm_strdup("exclusive"); +} +| EXECUTE + { + $$ = mm_strdup("execute"); +} +| EXPLAIN + { + $$ = mm_strdup("explain"); +} +| EXPRESSION + { + $$ = mm_strdup("expression"); +} +| EXTENSION + { + $$ = mm_strdup("extension"); +} +| EXTERNAL + { + $$ = mm_strdup("external"); +} +| FAMILY + { + $$ = mm_strdup("family"); +} +| FILTER + { + $$ = mm_strdup("filter"); +} +| FINALIZE + { + $$ = mm_strdup("finalize"); +} +| FIRST_P + { + $$ = mm_strdup("first"); +} +| FOLLOWING + { + $$ = mm_strdup("following"); +} +| FORCE + { + $$ = mm_strdup("force"); +} +| FORWARD + { + $$ = mm_strdup("forward"); +} +| FUNCTION + { + $$ = mm_strdup("function"); +} +| FUNCTIONS + { + $$ = mm_strdup("functions"); +} +| GENERATED + { + $$ = mm_strdup("generated"); +} +| GLOBAL + { + $$ = mm_strdup("global"); +} +| GRANTED + { + $$ = mm_strdup("granted"); +} +| GROUPS + { + $$ = mm_strdup("groups"); +} +| HANDLER + { + $$ = mm_strdup("handler"); +} +| HEADER_P + { + $$ = mm_strdup("header"); +} +| HOLD + { + $$ = mm_strdup("hold"); +} +| IDENTITY_P + { + $$ = mm_strdup("identity"); +} +| IF_P + { + $$ = mm_strdup("if"); +} +| IMMEDIATE + { + $$ = mm_strdup("immediate"); +} +| IMMUTABLE + { + $$ = mm_strdup("immutable"); +} +| IMPLICIT_P + { + $$ = mm_strdup("implicit"); +} +| IMPORT_P + { + $$ = mm_strdup("import"); +} +| INCLUDE + { + $$ = mm_strdup("include"); +} +| INCLUDING + { + $$ = mm_strdup("including"); +} +| INCREMENT + { + $$ = mm_strdup("increment"); +} +| INDEX + { + $$ = mm_strdup("index"); +} +| INDEXES + { + $$ = mm_strdup("indexes"); +} +| INHERIT + { + $$ = mm_strdup("inherit"); +} +| INHERITS + { + $$ = mm_strdup("inherits"); +} +| INLINE_P + { + $$ = mm_strdup("inline"); +} +| INSENSITIVE + { + $$ = mm_strdup("insensitive"); +} +| INSERT + { + $$ = mm_strdup("insert"); +} +| INSTEAD + { + $$ = mm_strdup("instead"); +} +| INVOKER + { + $$ = mm_strdup("invoker"); +} +| ISOLATION + { + $$ = mm_strdup("isolation"); +} +| KEY + { + $$ = mm_strdup("key"); +} +| LABEL + { + $$ = mm_strdup("label"); +} +| LANGUAGE + { + $$ = mm_strdup("language"); +} +| LARGE_P + { + $$ = mm_strdup("large"); +} +| LAST_P + { + $$ = mm_strdup("last"); +} +| LEAKPROOF + { + $$ = mm_strdup("leakproof"); +} +| LEVEL + { + $$ = mm_strdup("level"); +} +| LISTEN + { + $$ = mm_strdup("listen"); +} +| LOAD + { + $$ = mm_strdup("load"); +} +| LOCAL + { + $$ = mm_strdup("local"); +} +| LOCATION + { + $$ = mm_strdup("location"); +} +| LOCK_P + { + $$ = mm_strdup("lock"); +} +| LOCKED + { + $$ = mm_strdup("locked"); +} +| LOGGED + { + $$ = mm_strdup("logged"); +} +| MAPPING + { + $$ = mm_strdup("mapping"); +} +| MATCH + { + $$ = mm_strdup("match"); +} +| MATERIALIZED + { + $$ = mm_strdup("materialized"); +} +| MAXVALUE + { + $$ = mm_strdup("maxvalue"); +} +| METHOD + { + $$ = mm_strdup("method"); +} +| MINVALUE + { + $$ = mm_strdup("minvalue"); +} +| MODE + { + $$ = mm_strdup("mode"); +} +| MOVE + { + $$ = mm_strdup("move"); +} +| NAME_P + { + $$ = mm_strdup("name"); +} +| NAMES + { + $$ = mm_strdup("names"); +} +| NEW + { + $$ = mm_strdup("new"); +} +| NEXT + { + $$ = mm_strdup("next"); +} +| NFC + { + $$ = mm_strdup("nfc"); +} +| NFD + { + $$ = mm_strdup("nfd"); +} +| NFKC + { + $$ = mm_strdup("nfkc"); +} +| NFKD + { + $$ = mm_strdup("nfkd"); +} +| NO + { + $$ = mm_strdup("no"); +} +| NORMALIZED + { + $$ = mm_strdup("normalized"); +} +| NOTHING + { + $$ = mm_strdup("nothing"); +} +| NOTIFY + { + $$ = mm_strdup("notify"); +} +| NOWAIT + { + $$ = mm_strdup("nowait"); +} +| NULLS_P + { + $$ = mm_strdup("nulls"); +} +| OBJECT_P + { + $$ = mm_strdup("object"); +} +| OF + { + $$ = mm_strdup("of"); +} +| OFF + { + $$ = mm_strdup("off"); +} +| OIDS + { + $$ = mm_strdup("oids"); +} +| OLD + { + $$ = mm_strdup("old"); +} +| OPERATOR + { + $$ = mm_strdup("operator"); +} +| OPTION + { + $$ = mm_strdup("option"); +} +| OPTIONS + { + $$ = mm_strdup("options"); +} +| ORDINALITY + { + $$ = mm_strdup("ordinality"); +} +| OTHERS + { + $$ = mm_strdup("others"); +} +| OVER + { + $$ = mm_strdup("over"); +} +| OVERRIDING + { + $$ = mm_strdup("overriding"); +} +| OWNED + { + $$ = mm_strdup("owned"); +} +| OWNER + { + $$ = mm_strdup("owner"); +} +| PARALLEL + { + $$ = mm_strdup("parallel"); +} +| PARSER + { + $$ = mm_strdup("parser"); +} +| PARTIAL + { + $$ = mm_strdup("partial"); +} +| PARTITION + { + $$ = mm_strdup("partition"); +} +| PASSING + { + $$ = mm_strdup("passing"); +} +| PASSWORD + { + $$ = mm_strdup("password"); +} +| PLANS + { + $$ = mm_strdup("plans"); +} +| POLICY + { + $$ = mm_strdup("policy"); +} +| PRECEDING + { + $$ = mm_strdup("preceding"); +} +| PREPARE + { + $$ = mm_strdup("prepare"); +} +| PREPARED + { + $$ = mm_strdup("prepared"); +} +| PRESERVE + { + $$ = mm_strdup("preserve"); +} +| PRIOR + { + $$ = mm_strdup("prior"); +} +| PRIVILEGES + { + $$ = mm_strdup("privileges"); +} +| PROCEDURAL + { + $$ = mm_strdup("procedural"); +} +| PROCEDURE + { + $$ = mm_strdup("procedure"); +} +| PROCEDURES + { + $$ = mm_strdup("procedures"); +} +| PROGRAM + { + $$ = mm_strdup("program"); +} +| PUBLICATION + { + $$ = mm_strdup("publication"); +} +| QUOTE + { + $$ = mm_strdup("quote"); +} +| RANGE + { + $$ = mm_strdup("range"); +} +| READ + { + $$ = mm_strdup("read"); +} +| REASSIGN + { + $$ = mm_strdup("reassign"); +} +| RECHECK + { + $$ = mm_strdup("recheck"); +} +| RECURSIVE + { + $$ = mm_strdup("recursive"); +} +| REF + { + $$ = mm_strdup("ref"); +} +| REFERENCING + { + $$ = mm_strdup("referencing"); +} +| REFRESH + { + $$ = mm_strdup("refresh"); +} +| REINDEX + { + $$ = mm_strdup("reindex"); +} +| RELATIVE_P + { + $$ = mm_strdup("relative"); +} +| RELEASE + { + $$ = mm_strdup("release"); +} +| RENAME + { + $$ = mm_strdup("rename"); +} +| REPEATABLE + { + $$ = mm_strdup("repeatable"); +} +| REPLACE + { + $$ = mm_strdup("replace"); +} +| REPLICA + { + $$ = mm_strdup("replica"); +} +| RESET + { + $$ = mm_strdup("reset"); +} +| RESTART + { + $$ = mm_strdup("restart"); +} +| RESTRICT + { + $$ = mm_strdup("restrict"); +} +| RETURN + { + $$ = mm_strdup("return"); +} +| RETURNS + { + $$ = mm_strdup("returns"); +} +| REVOKE + { + $$ = mm_strdup("revoke"); +} +| ROLE + { + $$ = mm_strdup("role"); +} +| ROLLBACK + { + $$ = mm_strdup("rollback"); +} +| ROLLUP + { + $$ = mm_strdup("rollup"); +} +| ROUTINE + { + $$ = mm_strdup("routine"); +} +| ROUTINES + { + $$ = mm_strdup("routines"); +} +| ROWS + { + $$ = mm_strdup("rows"); +} +| RULE + { + $$ = mm_strdup("rule"); +} +| SAVEPOINT + { + $$ = mm_strdup("savepoint"); +} +| SCHEMA + { + $$ = mm_strdup("schema"); +} +| SCHEMAS + { + $$ = mm_strdup("schemas"); +} +| SCROLL + { + $$ = mm_strdup("scroll"); +} +| SEARCH + { + $$ = mm_strdup("search"); +} +| SECURITY + { + $$ = mm_strdup("security"); +} +| SEQUENCE + { + $$ = mm_strdup("sequence"); +} +| SEQUENCES + { + $$ = mm_strdup("sequences"); +} +| SERIALIZABLE + { + $$ = mm_strdup("serializable"); +} +| SERVER + { + $$ = mm_strdup("server"); +} +| SESSION + { + $$ = mm_strdup("session"); +} +| SET + { + $$ = mm_strdup("set"); +} +| SETS + { + $$ = mm_strdup("sets"); +} +| SHARE + { + $$ = mm_strdup("share"); +} +| SHOW + { + $$ = mm_strdup("show"); +} +| SIMPLE + { + $$ = mm_strdup("simple"); +} +| SKIP + { + $$ = mm_strdup("skip"); +} +| SNAPSHOT + { + $$ = mm_strdup("snapshot"); +} +| SQL_P + { + $$ = mm_strdup("sql"); +} +| STABLE + { + $$ = mm_strdup("stable"); +} +| STANDALONE_P + { + $$ = mm_strdup("standalone"); +} +| START + { + $$ = mm_strdup("start"); +} +| STATEMENT + { + $$ = mm_strdup("statement"); +} +| STATISTICS + { + $$ = mm_strdup("statistics"); +} +| STDIN + { + $$ = mm_strdup("stdin"); +} +| STDOUT + { + $$ = mm_strdup("stdout"); +} +| STORAGE + { + $$ = mm_strdup("storage"); +} +| STORED + { + $$ = mm_strdup("stored"); +} +| STRICT_P + { + $$ = mm_strdup("strict"); +} +| STRIP_P + { + $$ = mm_strdup("strip"); +} +| SUBSCRIPTION + { + $$ = mm_strdup("subscription"); +} +| SUPPORT + { + $$ = mm_strdup("support"); +} +| SYSID + { + $$ = mm_strdup("sysid"); +} +| SYSTEM_P + { + $$ = mm_strdup("system"); +} +| TABLES + { + $$ = mm_strdup("tables"); +} +| TABLESPACE + { + $$ = mm_strdup("tablespace"); +} +| TEMP + { + $$ = mm_strdup("temp"); +} +| TEMPLATE + { + $$ = mm_strdup("template"); +} +| TEMPORARY + { + $$ = mm_strdup("temporary"); +} +| TEXT_P + { + $$ = mm_strdup("text"); +} +| TIES + { + $$ = mm_strdup("ties"); +} +| TRANSACTION + { + $$ = mm_strdup("transaction"); +} +| TRANSFORM + { + $$ = mm_strdup("transform"); +} +| TRIGGER + { + $$ = mm_strdup("trigger"); +} +| TRUNCATE + { + $$ = mm_strdup("truncate"); +} +| TRUSTED + { + $$ = mm_strdup("trusted"); +} +| TYPE_P + { + $$ = mm_strdup("type"); +} +| TYPES_P + { + $$ = mm_strdup("types"); +} +| UESCAPE + { + $$ = mm_strdup("uescape"); +} +| UNBOUNDED + { + $$ = mm_strdup("unbounded"); +} +| UNCOMMITTED + { + $$ = mm_strdup("uncommitted"); +} +| UNENCRYPTED + { + $$ = mm_strdup("unencrypted"); +} +| UNKNOWN + { + $$ = mm_strdup("unknown"); +} +| UNLISTEN + { + $$ = mm_strdup("unlisten"); +} +| UNLOGGED + { + $$ = mm_strdup("unlogged"); +} +| UNTIL + { + $$ = mm_strdup("until"); +} +| UPDATE + { + $$ = mm_strdup("update"); +} +| VACUUM + { + $$ = mm_strdup("vacuum"); +} +| VALID + { + $$ = mm_strdup("valid"); +} +| VALIDATE + { + $$ = mm_strdup("validate"); +} +| VALIDATOR + { + $$ = mm_strdup("validator"); +} +| VALUE_P + { + $$ = mm_strdup("value"); +} +| VARYING + { + $$ = mm_strdup("varying"); +} +| VERSION_P + { + $$ = mm_strdup("version"); +} +| VIEW + { + $$ = mm_strdup("view"); +} +| VIEWS + { + $$ = mm_strdup("views"); +} +| VOLATILE + { + $$ = mm_strdup("volatile"); +} +| WHITESPACE_P + { + $$ = mm_strdup("whitespace"); +} +| WITHIN + { + $$ = mm_strdup("within"); +} +| WITHOUT + { + $$ = mm_strdup("without"); +} +| WORK + { + $$ = mm_strdup("work"); +} +| WRAPPER + { + $$ = mm_strdup("wrapper"); +} +| WRITE + { + $$ = mm_strdup("write"); +} +| XML_P + { + $$ = mm_strdup("xml"); +} +| YES_P + { + $$ = mm_strdup("yes"); +} +| ZONE + { + $$ = mm_strdup("zone"); +} +; + + + col_name_keyword: + BETWEEN + { + $$ = mm_strdup("between"); +} +| BIGINT + { + $$ = mm_strdup("bigint"); +} +| BIT + { + $$ = mm_strdup("bit"); +} +| BOOLEAN_P + { + $$ = mm_strdup("boolean"); +} +| CHARACTER + { + $$ = mm_strdup("character"); +} +| COALESCE + { + $$ = mm_strdup("coalesce"); +} +| DEC + { + $$ = mm_strdup("dec"); +} +| DECIMAL_P + { + $$ = mm_strdup("decimal"); +} +| EXISTS + { + $$ = mm_strdup("exists"); +} +| EXTRACT + { + $$ = mm_strdup("extract"); +} +| FLOAT_P + { + $$ = mm_strdup("float"); +} +| GREATEST + { + $$ = mm_strdup("greatest"); +} +| GROUPING + { + $$ = mm_strdup("grouping"); +} +| INOUT + { + $$ = mm_strdup("inout"); +} +| INTEGER + { + $$ = mm_strdup("integer"); +} +| INTERVAL + { + $$ = mm_strdup("interval"); +} +| LEAST + { + $$ = mm_strdup("least"); +} +| NATIONAL + { + $$ = mm_strdup("national"); +} +| NCHAR + { + $$ = mm_strdup("nchar"); +} +| NONE + { + $$ = mm_strdup("none"); +} +| NORMALIZE + { + $$ = mm_strdup("normalize"); +} +| NULLIF + { + $$ = mm_strdup("nullif"); +} +| NUMERIC + { + $$ = mm_strdup("numeric"); +} +| OUT_P + { + $$ = mm_strdup("out"); +} +| OVERLAY + { + $$ = mm_strdup("overlay"); +} +| POSITION + { + $$ = mm_strdup("position"); +} +| PRECISION + { + $$ = mm_strdup("precision"); +} +| REAL + { + $$ = mm_strdup("real"); +} +| ROW + { + $$ = mm_strdup("row"); +} +| SETOF + { + $$ = mm_strdup("setof"); +} +| SMALLINT + { + $$ = mm_strdup("smallint"); +} +| SUBSTRING + { + $$ = mm_strdup("substring"); +} +| TIME + { + $$ = mm_strdup("time"); +} +| TIMESTAMP + { + $$ = mm_strdup("timestamp"); +} +| TREAT + { + $$ = mm_strdup("treat"); +} +| TRIM + { + $$ = mm_strdup("trim"); +} +| VARCHAR + { + $$ = mm_strdup("varchar"); +} +| XMLATTRIBUTES + { + $$ = mm_strdup("xmlattributes"); +} +| XMLCONCAT + { + $$ = mm_strdup("xmlconcat"); +} +| XMLELEMENT + { + $$ = mm_strdup("xmlelement"); +} +| XMLEXISTS + { + $$ = mm_strdup("xmlexists"); +} +| XMLFOREST + { + $$ = mm_strdup("xmlforest"); +} +| XMLNAMESPACES + { + $$ = mm_strdup("xmlnamespaces"); +} +| XMLPARSE + { + $$ = mm_strdup("xmlparse"); +} +| XMLPI + { + $$ = mm_strdup("xmlpi"); +} +| XMLROOT + { + $$ = mm_strdup("xmlroot"); +} +| XMLSERIALIZE + { + $$ = mm_strdup("xmlserialize"); +} +| XMLTABLE + { + $$ = mm_strdup("xmltable"); +} +; + + + type_func_name_keyword: + AUTHORIZATION + { + $$ = mm_strdup("authorization"); +} +| BINARY + { + $$ = mm_strdup("binary"); +} +| COLLATION + { + $$ = mm_strdup("collation"); +} +| CONCURRENTLY + { + $$ = mm_strdup("concurrently"); +} +| CROSS + { + $$ = mm_strdup("cross"); +} +| CURRENT_SCHEMA + { + $$ = mm_strdup("current_schema"); +} +| FREEZE + { + $$ = mm_strdup("freeze"); +} +| FULL + { + $$ = mm_strdup("full"); +} +| ILIKE + { + $$ = mm_strdup("ilike"); +} +| INNER_P + { + $$ = mm_strdup("inner"); +} +| IS + { + $$ = mm_strdup("is"); +} +| ISNULL + { + $$ = mm_strdup("isnull"); +} +| JOIN + { + $$ = mm_strdup("join"); +} +| LEFT + { + $$ = mm_strdup("left"); +} +| LIKE + { + $$ = mm_strdup("like"); +} +| NATURAL + { + $$ = mm_strdup("natural"); +} +| NOTNULL + { + $$ = mm_strdup("notnull"); +} +| OUTER_P + { + $$ = mm_strdup("outer"); +} +| OVERLAPS + { + $$ = mm_strdup("overlaps"); +} +| RIGHT + { + $$ = mm_strdup("right"); +} +| SIMILAR + { + $$ = mm_strdup("similar"); +} +| TABLESAMPLE + { + $$ = mm_strdup("tablesample"); +} +| VERBOSE + { + $$ = mm_strdup("verbose"); +} +; + + + reserved_keyword: + ALL + { + $$ = mm_strdup("all"); +} +| ANALYSE + { + $$ = mm_strdup("analyse"); +} +| ANALYZE + { + $$ = mm_strdup("analyze"); +} +| AND + { + $$ = mm_strdup("and"); +} +| ANY + { + $$ = mm_strdup("any"); +} +| ARRAY + { + $$ = mm_strdup("array"); +} +| AS + { + $$ = mm_strdup("as"); +} +| ASC + { + $$ = mm_strdup("asc"); +} +| ASYMMETRIC + { + $$ = mm_strdup("asymmetric"); +} +| BOTH + { + $$ = mm_strdup("both"); +} +| CASE + { + $$ = mm_strdup("case"); +} +| CAST + { + $$ = mm_strdup("cast"); +} +| CHECK + { + $$ = mm_strdup("check"); +} +| COLLATE + { + $$ = mm_strdup("collate"); +} +| COLUMN + { + $$ = mm_strdup("column"); +} +| CONSTRAINT + { + $$ = mm_strdup("constraint"); +} +| CREATE + { + $$ = mm_strdup("create"); +} +| CURRENT_CATALOG + { + $$ = mm_strdup("current_catalog"); +} +| CURRENT_DATE + { + $$ = mm_strdup("current_date"); +} +| CURRENT_ROLE + { + $$ = mm_strdup("current_role"); +} +| CURRENT_TIME + { + $$ = mm_strdup("current_time"); +} +| CURRENT_TIMESTAMP + { + $$ = mm_strdup("current_timestamp"); +} +| CURRENT_USER + { + $$ = mm_strdup("current_user"); +} +| DEFAULT + { + $$ = mm_strdup("default"); +} +| DEFERRABLE + { + $$ = mm_strdup("deferrable"); +} +| DESC + { + $$ = mm_strdup("desc"); +} +| DISTINCT + { + $$ = mm_strdup("distinct"); +} +| DO + { + $$ = mm_strdup("do"); +} +| ELSE + { + $$ = mm_strdup("else"); +} +| END_P + { + $$ = mm_strdup("end"); +} +| EXCEPT + { + $$ = mm_strdup("except"); +} +| FALSE_P + { + $$ = mm_strdup("false"); +} +| FETCH + { + $$ = mm_strdup("fetch"); +} +| FOR + { + $$ = mm_strdup("for"); +} +| FOREIGN + { + $$ = mm_strdup("foreign"); +} +| FROM + { + $$ = mm_strdup("from"); +} +| GRANT + { + $$ = mm_strdup("grant"); +} +| GROUP_P + { + $$ = mm_strdup("group"); +} +| HAVING + { + $$ = mm_strdup("having"); +} +| IN_P + { + $$ = mm_strdup("in"); +} +| INITIALLY + { + $$ = mm_strdup("initially"); +} +| INTERSECT + { + $$ = mm_strdup("intersect"); +} +| INTO + { + $$ = mm_strdup("into"); +} +| LATERAL_P + { + $$ = mm_strdup("lateral"); +} +| LEADING + { + $$ = mm_strdup("leading"); +} +| LIMIT + { + $$ = mm_strdup("limit"); +} +| LOCALTIME + { + $$ = mm_strdup("localtime"); +} +| LOCALTIMESTAMP + { + $$ = mm_strdup("localtimestamp"); +} +| NOT + { + $$ = mm_strdup("not"); +} +| NULL_P + { + $$ = mm_strdup("null"); +} +| OFFSET + { + $$ = mm_strdup("offset"); +} +| ON + { + $$ = mm_strdup("on"); +} +| ONLY + { + $$ = mm_strdup("only"); +} +| OR + { + $$ = mm_strdup("or"); +} +| ORDER + { + $$ = mm_strdup("order"); +} +| PLACING + { + $$ = mm_strdup("placing"); +} +| PRIMARY + { + $$ = mm_strdup("primary"); +} +| REFERENCES + { + $$ = mm_strdup("references"); +} +| RETURNING + { + $$ = mm_strdup("returning"); +} +| SELECT + { + $$ = mm_strdup("select"); +} +| SESSION_USER + { + $$ = mm_strdup("session_user"); +} +| SOME + { + $$ = mm_strdup("some"); +} +| SYMMETRIC + { + $$ = mm_strdup("symmetric"); +} +| TABLE + { + $$ = mm_strdup("table"); +} +| THEN + { + $$ = mm_strdup("then"); +} +| TRAILING + { + $$ = mm_strdup("trailing"); +} +| TRUE_P + { + $$ = mm_strdup("true"); +} +| UNIQUE + { + $$ = mm_strdup("unique"); +} +| USER + { + $$ = mm_strdup("user"); +} +| USING + { + $$ = mm_strdup("using"); +} +| VARIADIC + { + $$ = mm_strdup("variadic"); +} +| WHEN + { + $$ = mm_strdup("when"); +} +| WHERE + { + $$ = mm_strdup("where"); +} +| WINDOW + { + $$ = mm_strdup("window"); +} +| WITH + { + $$ = mm_strdup("with"); +} +; + + + bare_label_keyword: + ABORT_P + { + $$ = mm_strdup("abort"); +} +| ABSOLUTE_P + { + $$ = mm_strdup("absolute"); +} +| ACCESS + { + $$ = mm_strdup("access"); +} +| ACTION + { + $$ = mm_strdup("action"); +} +| ADD_P + { + $$ = mm_strdup("add"); +} +| ADMIN + { + $$ = mm_strdup("admin"); +} +| AFTER + { + $$ = mm_strdup("after"); +} +| AGGREGATE + { + $$ = mm_strdup("aggregate"); +} +| ALL + { + $$ = mm_strdup("all"); +} +| ALSO + { + $$ = mm_strdup("also"); +} +| ALTER + { + $$ = mm_strdup("alter"); +} +| ALWAYS + { + $$ = mm_strdup("always"); +} +| ANALYSE + { + $$ = mm_strdup("analyse"); +} +| ANALYZE + { + $$ = mm_strdup("analyze"); +} +| AND + { + $$ = mm_strdup("and"); +} +| ANY + { + $$ = mm_strdup("any"); +} +| ASC + { + $$ = mm_strdup("asc"); +} +| ASENSITIVE + { + $$ = mm_strdup("asensitive"); +} +| ASSERTION + { + $$ = mm_strdup("assertion"); +} +| ASSIGNMENT + { + $$ = mm_strdup("assignment"); +} +| ASYMMETRIC + { + $$ = mm_strdup("asymmetric"); +} +| AT + { + $$ = mm_strdup("at"); +} +| ATOMIC + { + $$ = mm_strdup("atomic"); +} +| ATTACH + { + $$ = mm_strdup("attach"); +} +| ATTRIBUTE + { + $$ = mm_strdup("attribute"); +} +| AUTHORIZATION + { + $$ = mm_strdup("authorization"); +} +| BACKWARD + { + $$ = mm_strdup("backward"); +} +| BEFORE + { + $$ = mm_strdup("before"); +} +| BEGIN_P + { + $$ = mm_strdup("begin"); +} +| BETWEEN + { + $$ = mm_strdup("between"); +} +| BIGINT + { + $$ = mm_strdup("bigint"); +} +| BINARY + { + $$ = mm_strdup("binary"); +} +| BIT + { + $$ = mm_strdup("bit"); +} +| BOOLEAN_P + { + $$ = mm_strdup("boolean"); +} +| BOTH + { + $$ = mm_strdup("both"); +} +| BREADTH + { + $$ = mm_strdup("breadth"); +} +| BY + { + $$ = mm_strdup("by"); +} +| CACHE + { + $$ = mm_strdup("cache"); +} +| CALL + { + $$ = mm_strdup("call"); +} +| CALLED + { + $$ = mm_strdup("called"); +} +| CASCADE + { + $$ = mm_strdup("cascade"); +} +| CASCADED + { + $$ = mm_strdup("cascaded"); +} +| CASE + { + $$ = mm_strdup("case"); +} +| CAST + { + $$ = mm_strdup("cast"); +} +| CATALOG_P + { + $$ = mm_strdup("catalog"); +} +| CHAIN + { + $$ = mm_strdup("chain"); +} +| CHARACTERISTICS + { + $$ = mm_strdup("characteristics"); +} +| CHECK + { + $$ = mm_strdup("check"); +} +| CHECKPOINT + { + $$ = mm_strdup("checkpoint"); +} +| CLASS + { + $$ = mm_strdup("class"); +} +| CLOSE + { + $$ = mm_strdup("close"); +} +| CLUSTER + { + $$ = mm_strdup("cluster"); +} +| COALESCE + { + $$ = mm_strdup("coalesce"); +} +| COLLATE + { + $$ = mm_strdup("collate"); +} +| COLLATION + { + $$ = mm_strdup("collation"); +} +| COLUMN + { + $$ = mm_strdup("column"); +} +| COLUMNS + { + $$ = mm_strdup("columns"); +} +| COMMENT + { + $$ = mm_strdup("comment"); +} +| COMMENTS + { + $$ = mm_strdup("comments"); +} +| COMMIT + { + $$ = mm_strdup("commit"); +} +| COMMITTED + { + $$ = mm_strdup("committed"); +} +| COMPRESSION + { + $$ = mm_strdup("compression"); +} +| CONCURRENTLY + { + $$ = mm_strdup("concurrently"); +} +| CONFIGURATION + { + $$ = mm_strdup("configuration"); +} +| CONFLICT + { + $$ = mm_strdup("conflict"); +} +| CONNECTION + { + $$ = mm_strdup("connection"); +} +| CONSTRAINT + { + $$ = mm_strdup("constraint"); +} +| CONSTRAINTS + { + $$ = mm_strdup("constraints"); +} +| CONTENT_P + { + $$ = mm_strdup("content"); +} +| CONTINUE_P + { + $$ = mm_strdup("continue"); +} +| CONVERSION_P + { + $$ = mm_strdup("conversion"); +} +| COPY + { + $$ = mm_strdup("copy"); +} +| COST + { + $$ = mm_strdup("cost"); +} +| CROSS + { + $$ = mm_strdup("cross"); +} +| CSV + { + $$ = mm_strdup("csv"); +} +| CUBE + { + $$ = mm_strdup("cube"); +} +| CURRENT_P + { + $$ = mm_strdup("current"); +} +| CURRENT_CATALOG + { + $$ = mm_strdup("current_catalog"); +} +| CURRENT_DATE + { + $$ = mm_strdup("current_date"); +} +| CURRENT_ROLE + { + $$ = mm_strdup("current_role"); +} +| CURRENT_SCHEMA + { + $$ = mm_strdup("current_schema"); +} +| CURRENT_TIME + { + $$ = mm_strdup("current_time"); +} +| CURRENT_TIMESTAMP + { + $$ = mm_strdup("current_timestamp"); +} +| CURRENT_USER + { + $$ = mm_strdup("current_user"); +} +| CURSOR + { + $$ = mm_strdup("cursor"); +} +| CYCLE + { + $$ = mm_strdup("cycle"); +} +| DATA_P + { + $$ = mm_strdup("data"); +} +| DATABASE + { + $$ = mm_strdup("database"); +} +| DEALLOCATE + { + $$ = mm_strdup("deallocate"); +} +| DEC + { + $$ = mm_strdup("dec"); +} +| DECIMAL_P + { + $$ = mm_strdup("decimal"); +} +| DECLARE + { + $$ = mm_strdup("declare"); +} +| DEFAULT + { + $$ = mm_strdup("default"); +} +| DEFAULTS + { + $$ = mm_strdup("defaults"); +} +| DEFERRABLE + { + $$ = mm_strdup("deferrable"); +} +| DEFERRED + { + $$ = mm_strdup("deferred"); +} +| DEFINER + { + $$ = mm_strdup("definer"); +} +| DELETE_P + { + $$ = mm_strdup("delete"); +} +| DELIMITER + { + $$ = mm_strdup("delimiter"); +} +| DELIMITERS + { + $$ = mm_strdup("delimiters"); +} +| DEPENDS + { + $$ = mm_strdup("depends"); +} +| DEPTH + { + $$ = mm_strdup("depth"); +} +| DESC + { + $$ = mm_strdup("desc"); +} +| DETACH + { + $$ = mm_strdup("detach"); +} +| DICTIONARY + { + $$ = mm_strdup("dictionary"); +} +| DISABLE_P + { + $$ = mm_strdup("disable"); +} +| DISCARD + { + $$ = mm_strdup("discard"); +} +| DISTINCT + { + $$ = mm_strdup("distinct"); +} +| DO + { + $$ = mm_strdup("do"); +} +| DOCUMENT_P + { + $$ = mm_strdup("document"); +} +| DOMAIN_P + { + $$ = mm_strdup("domain"); +} +| DOUBLE_P + { + $$ = mm_strdup("double"); +} +| DROP + { + $$ = mm_strdup("drop"); +} +| EACH + { + $$ = mm_strdup("each"); +} +| ELSE + { + $$ = mm_strdup("else"); +} +| ENABLE_P + { + $$ = mm_strdup("enable"); +} +| ENCODING + { + $$ = mm_strdup("encoding"); +} +| ENCRYPTED + { + $$ = mm_strdup("encrypted"); +} +| END_P + { + $$ = mm_strdup("end"); +} +| ENUM_P + { + $$ = mm_strdup("enum"); +} +| ESCAPE + { + $$ = mm_strdup("escape"); +} +| EVENT + { + $$ = mm_strdup("event"); +} +| EXCLUDE + { + $$ = mm_strdup("exclude"); +} +| EXCLUDING + { + $$ = mm_strdup("excluding"); +} +| EXCLUSIVE + { + $$ = mm_strdup("exclusive"); +} +| EXECUTE + { + $$ = mm_strdup("execute"); +} +| EXISTS + { + $$ = mm_strdup("exists"); +} +| EXPLAIN + { + $$ = mm_strdup("explain"); +} +| EXPRESSION + { + $$ = mm_strdup("expression"); +} +| EXTENSION + { + $$ = mm_strdup("extension"); +} +| EXTERNAL + { + $$ = mm_strdup("external"); +} +| EXTRACT + { + $$ = mm_strdup("extract"); +} +| FALSE_P + { + $$ = mm_strdup("false"); +} +| FAMILY + { + $$ = mm_strdup("family"); +} +| FINALIZE + { + $$ = mm_strdup("finalize"); +} +| FIRST_P + { + $$ = mm_strdup("first"); +} +| FLOAT_P + { + $$ = mm_strdup("float"); +} +| FOLLOWING + { + $$ = mm_strdup("following"); +} +| FORCE + { + $$ = mm_strdup("force"); +} +| FOREIGN + { + $$ = mm_strdup("foreign"); +} +| FORWARD + { + $$ = mm_strdup("forward"); +} +| FREEZE + { + $$ = mm_strdup("freeze"); +} +| FULL + { + $$ = mm_strdup("full"); +} +| FUNCTION + { + $$ = mm_strdup("function"); +} +| FUNCTIONS + { + $$ = mm_strdup("functions"); +} +| GENERATED + { + $$ = mm_strdup("generated"); +} +| GLOBAL + { + $$ = mm_strdup("global"); +} +| GRANTED + { + $$ = mm_strdup("granted"); +} +| GREATEST + { + $$ = mm_strdup("greatest"); +} +| GROUPING + { + $$ = mm_strdup("grouping"); +} +| GROUPS + { + $$ = mm_strdup("groups"); +} +| HANDLER + { + $$ = mm_strdup("handler"); +} +| HEADER_P + { + $$ = mm_strdup("header"); +} +| HOLD + { + $$ = mm_strdup("hold"); +} +| IDENTITY_P + { + $$ = mm_strdup("identity"); +} +| IF_P + { + $$ = mm_strdup("if"); +} +| ILIKE + { + $$ = mm_strdup("ilike"); +} +| IMMEDIATE + { + $$ = mm_strdup("immediate"); +} +| IMMUTABLE + { + $$ = mm_strdup("immutable"); +} +| IMPLICIT_P + { + $$ = mm_strdup("implicit"); +} +| IMPORT_P + { + $$ = mm_strdup("import"); +} +| IN_P + { + $$ = mm_strdup("in"); +} +| INCLUDE + { + $$ = mm_strdup("include"); +} +| INCLUDING + { + $$ = mm_strdup("including"); +} +| INCREMENT + { + $$ = mm_strdup("increment"); +} +| INDEX + { + $$ = mm_strdup("index"); +} +| INDEXES + { + $$ = mm_strdup("indexes"); +} +| INHERIT + { + $$ = mm_strdup("inherit"); +} +| INHERITS + { + $$ = mm_strdup("inherits"); +} +| INITIALLY + { + $$ = mm_strdup("initially"); +} +| INLINE_P + { + $$ = mm_strdup("inline"); +} +| INNER_P + { + $$ = mm_strdup("inner"); +} +| INOUT + { + $$ = mm_strdup("inout"); +} +| INPUT_P + { + $$ = mm_strdup("input"); +} +| INSENSITIVE + { + $$ = mm_strdup("insensitive"); +} +| INSERT + { + $$ = mm_strdup("insert"); +} +| INSTEAD + { + $$ = mm_strdup("instead"); +} +| INT_P + { + $$ = mm_strdup("int"); +} +| INTEGER + { + $$ = mm_strdup("integer"); +} +| INTERVAL + { + $$ = mm_strdup("interval"); +} +| INVOKER + { + $$ = mm_strdup("invoker"); +} +| IS + { + $$ = mm_strdup("is"); +} +| ISOLATION + { + $$ = mm_strdup("isolation"); +} +| JOIN + { + $$ = mm_strdup("join"); +} +| KEY + { + $$ = mm_strdup("key"); +} +| LABEL + { + $$ = mm_strdup("label"); +} +| LANGUAGE + { + $$ = mm_strdup("language"); +} +| LARGE_P + { + $$ = mm_strdup("large"); +} +| LAST_P + { + $$ = mm_strdup("last"); +} +| LATERAL_P + { + $$ = mm_strdup("lateral"); +} +| LEADING + { + $$ = mm_strdup("leading"); +} +| LEAKPROOF + { + $$ = mm_strdup("leakproof"); +} +| LEAST + { + $$ = mm_strdup("least"); +} +| LEFT + { + $$ = mm_strdup("left"); +} +| LEVEL + { + $$ = mm_strdup("level"); +} +| LIKE + { + $$ = mm_strdup("like"); +} +| LISTEN + { + $$ = mm_strdup("listen"); +} +| LOAD + { + $$ = mm_strdup("load"); +} +| LOCAL + { + $$ = mm_strdup("local"); +} +| LOCALTIME + { + $$ = mm_strdup("localtime"); +} +| LOCALTIMESTAMP + { + $$ = mm_strdup("localtimestamp"); +} +| LOCATION + { + $$ = mm_strdup("location"); +} +| LOCK_P + { + $$ = mm_strdup("lock"); +} +| LOCKED + { + $$ = mm_strdup("locked"); +} +| LOGGED + { + $$ = mm_strdup("logged"); +} +| MAPPING + { + $$ = mm_strdup("mapping"); +} +| MATCH + { + $$ = mm_strdup("match"); +} +| MATERIALIZED + { + $$ = mm_strdup("materialized"); +} +| MAXVALUE + { + $$ = mm_strdup("maxvalue"); +} +| METHOD + { + $$ = mm_strdup("method"); +} +| MINVALUE + { + $$ = mm_strdup("minvalue"); +} +| MODE + { + $$ = mm_strdup("mode"); +} +| MOVE + { + $$ = mm_strdup("move"); +} +| NAME_P + { + $$ = mm_strdup("name"); +} +| NAMES + { + $$ = mm_strdup("names"); +} +| NATIONAL + { + $$ = mm_strdup("national"); +} +| NATURAL + { + $$ = mm_strdup("natural"); +} +| NCHAR + { + $$ = mm_strdup("nchar"); +} +| NEW + { + $$ = mm_strdup("new"); +} +| NEXT + { + $$ = mm_strdup("next"); +} +| NFC + { + $$ = mm_strdup("nfc"); +} +| NFD + { + $$ = mm_strdup("nfd"); +} +| NFKC + { + $$ = mm_strdup("nfkc"); +} +| NFKD + { + $$ = mm_strdup("nfkd"); +} +| NO + { + $$ = mm_strdup("no"); +} +| NONE + { + $$ = mm_strdup("none"); +} +| NORMALIZE + { + $$ = mm_strdup("normalize"); +} +| NORMALIZED + { + $$ = mm_strdup("normalized"); +} +| NOT + { + $$ = mm_strdup("not"); +} +| NOTHING + { + $$ = mm_strdup("nothing"); +} +| NOTIFY + { + $$ = mm_strdup("notify"); +} +| NOWAIT + { + $$ = mm_strdup("nowait"); +} +| NULL_P + { + $$ = mm_strdup("null"); +} +| NULLIF + { + $$ = mm_strdup("nullif"); +} +| NULLS_P + { + $$ = mm_strdup("nulls"); +} +| NUMERIC + { + $$ = mm_strdup("numeric"); +} +| OBJECT_P + { + $$ = mm_strdup("object"); +} +| OF + { + $$ = mm_strdup("of"); +} +| OFF + { + $$ = mm_strdup("off"); +} +| OIDS + { + $$ = mm_strdup("oids"); +} +| OLD + { + $$ = mm_strdup("old"); +} +| ONLY + { + $$ = mm_strdup("only"); +} +| OPERATOR + { + $$ = mm_strdup("operator"); +} +| OPTION + { + $$ = mm_strdup("option"); +} +| OPTIONS + { + $$ = mm_strdup("options"); +} +| OR + { + $$ = mm_strdup("or"); +} +| ORDINALITY + { + $$ = mm_strdup("ordinality"); +} +| OTHERS + { + $$ = mm_strdup("others"); +} +| OUT_P + { + $$ = mm_strdup("out"); +} +| OUTER_P + { + $$ = mm_strdup("outer"); +} +| OVERLAY + { + $$ = mm_strdup("overlay"); +} +| OVERRIDING + { + $$ = mm_strdup("overriding"); +} +| OWNED + { + $$ = mm_strdup("owned"); +} +| OWNER + { + $$ = mm_strdup("owner"); +} +| PARALLEL + { + $$ = mm_strdup("parallel"); +} +| PARSER + { + $$ = mm_strdup("parser"); +} +| PARTIAL + { + $$ = mm_strdup("partial"); +} +| PARTITION + { + $$ = mm_strdup("partition"); +} +| PASSING + { + $$ = mm_strdup("passing"); +} +| PASSWORD + { + $$ = mm_strdup("password"); +} +| PLACING + { + $$ = mm_strdup("placing"); +} +| PLANS + { + $$ = mm_strdup("plans"); +} +| POLICY + { + $$ = mm_strdup("policy"); +} +| POSITION + { + $$ = mm_strdup("position"); +} +| PRECEDING + { + $$ = mm_strdup("preceding"); +} +| PREPARE + { + $$ = mm_strdup("prepare"); +} +| PREPARED + { + $$ = mm_strdup("prepared"); +} +| PRESERVE + { + $$ = mm_strdup("preserve"); +} +| PRIMARY + { + $$ = mm_strdup("primary"); +} +| PRIOR + { + $$ = mm_strdup("prior"); +} +| PRIVILEGES + { + $$ = mm_strdup("privileges"); +} +| PROCEDURAL + { + $$ = mm_strdup("procedural"); +} +| PROCEDURE + { + $$ = mm_strdup("procedure"); +} +| PROCEDURES + { + $$ = mm_strdup("procedures"); +} +| PROGRAM + { + $$ = mm_strdup("program"); +} +| PUBLICATION + { + $$ = mm_strdup("publication"); +} +| QUOTE + { + $$ = mm_strdup("quote"); +} +| RANGE + { + $$ = mm_strdup("range"); +} +| READ + { + $$ = mm_strdup("read"); +} +| REAL + { + $$ = mm_strdup("real"); +} +| REASSIGN + { + $$ = mm_strdup("reassign"); +} +| RECHECK + { + $$ = mm_strdup("recheck"); +} +| RECURSIVE + { + $$ = mm_strdup("recursive"); +} +| REF + { + $$ = mm_strdup("ref"); +} +| REFERENCES + { + $$ = mm_strdup("references"); +} +| REFERENCING + { + $$ = mm_strdup("referencing"); +} +| REFRESH + { + $$ = mm_strdup("refresh"); +} +| REINDEX + { + $$ = mm_strdup("reindex"); +} +| RELATIVE_P + { + $$ = mm_strdup("relative"); +} +| RELEASE + { + $$ = mm_strdup("release"); +} +| RENAME + { + $$ = mm_strdup("rename"); +} +| REPEATABLE + { + $$ = mm_strdup("repeatable"); +} +| REPLACE + { + $$ = mm_strdup("replace"); +} +| REPLICA + { + $$ = mm_strdup("replica"); +} +| RESET + { + $$ = mm_strdup("reset"); +} +| RESTART + { + $$ = mm_strdup("restart"); +} +| RESTRICT + { + $$ = mm_strdup("restrict"); +} +| RETURN + { + $$ = mm_strdup("return"); +} +| RETURNS + { + $$ = mm_strdup("returns"); +} +| REVOKE + { + $$ = mm_strdup("revoke"); +} +| RIGHT + { + $$ = mm_strdup("right"); +} +| ROLE + { + $$ = mm_strdup("role"); +} +| ROLLBACK + { + $$ = mm_strdup("rollback"); +} +| ROLLUP + { + $$ = mm_strdup("rollup"); +} +| ROUTINE + { + $$ = mm_strdup("routine"); +} +| ROUTINES + { + $$ = mm_strdup("routines"); +} +| ROW + { + $$ = mm_strdup("row"); +} +| ROWS + { + $$ = mm_strdup("rows"); +} +| RULE + { + $$ = mm_strdup("rule"); +} +| SAVEPOINT + { + $$ = mm_strdup("savepoint"); +} +| SCHEMA + { + $$ = mm_strdup("schema"); +} +| SCHEMAS + { + $$ = mm_strdup("schemas"); +} +| SCROLL + { + $$ = mm_strdup("scroll"); +} +| SEARCH + { + $$ = mm_strdup("search"); +} +| SECURITY + { + $$ = mm_strdup("security"); +} +| SELECT + { + $$ = mm_strdup("select"); +} +| SEQUENCE + { + $$ = mm_strdup("sequence"); +} +| SEQUENCES + { + $$ = mm_strdup("sequences"); +} +| SERIALIZABLE + { + $$ = mm_strdup("serializable"); +} +| SERVER + { + $$ = mm_strdup("server"); +} +| SESSION + { + $$ = mm_strdup("session"); +} +| SESSION_USER + { + $$ = mm_strdup("session_user"); +} +| SET + { + $$ = mm_strdup("set"); +} +| SETOF + { + $$ = mm_strdup("setof"); +} +| SETS + { + $$ = mm_strdup("sets"); +} +| SHARE + { + $$ = mm_strdup("share"); +} +| SHOW + { + $$ = mm_strdup("show"); +} +| SIMILAR + { + $$ = mm_strdup("similar"); +} +| SIMPLE + { + $$ = mm_strdup("simple"); +} +| SKIP + { + $$ = mm_strdup("skip"); +} +| SMALLINT + { + $$ = mm_strdup("smallint"); +} +| SNAPSHOT + { + $$ = mm_strdup("snapshot"); +} +| SOME + { + $$ = mm_strdup("some"); +} +| SQL_P + { + $$ = mm_strdup("sql"); +} +| STABLE + { + $$ = mm_strdup("stable"); +} +| STANDALONE_P + { + $$ = mm_strdup("standalone"); +} +| START + { + $$ = mm_strdup("start"); +} +| STATEMENT + { + $$ = mm_strdup("statement"); +} +| STATISTICS + { + $$ = mm_strdup("statistics"); +} +| STDIN + { + $$ = mm_strdup("stdin"); +} +| STDOUT + { + $$ = mm_strdup("stdout"); +} +| STORAGE + { + $$ = mm_strdup("storage"); +} +| STORED + { + $$ = mm_strdup("stored"); +} +| STRICT_P + { + $$ = mm_strdup("strict"); +} +| STRIP_P + { + $$ = mm_strdup("strip"); +} +| SUBSCRIPTION + { + $$ = mm_strdup("subscription"); +} +| SUBSTRING + { + $$ = mm_strdup("substring"); +} +| SUPPORT + { + $$ = mm_strdup("support"); +} +| SYMMETRIC + { + $$ = mm_strdup("symmetric"); +} +| SYSID + { + $$ = mm_strdup("sysid"); +} +| SYSTEM_P + { + $$ = mm_strdup("system"); +} +| TABLE + { + $$ = mm_strdup("table"); +} +| TABLES + { + $$ = mm_strdup("tables"); +} +| TABLESAMPLE + { + $$ = mm_strdup("tablesample"); +} +| TABLESPACE + { + $$ = mm_strdup("tablespace"); +} +| TEMP + { + $$ = mm_strdup("temp"); +} +| TEMPLATE + { + $$ = mm_strdup("template"); +} +| TEMPORARY + { + $$ = mm_strdup("temporary"); +} +| TEXT_P + { + $$ = mm_strdup("text"); +} +| THEN + { + $$ = mm_strdup("then"); +} +| TIES + { + $$ = mm_strdup("ties"); +} +| TIME + { + $$ = mm_strdup("time"); +} +| TIMESTAMP + { + $$ = mm_strdup("timestamp"); +} +| TRAILING + { + $$ = mm_strdup("trailing"); +} +| TRANSACTION + { + $$ = mm_strdup("transaction"); +} +| TRANSFORM + { + $$ = mm_strdup("transform"); +} +| TREAT + { + $$ = mm_strdup("treat"); +} +| TRIGGER + { + $$ = mm_strdup("trigger"); +} +| TRIM + { + $$ = mm_strdup("trim"); +} +| TRUE_P + { + $$ = mm_strdup("true"); +} +| TRUNCATE + { + $$ = mm_strdup("truncate"); +} +| TRUSTED + { + $$ = mm_strdup("trusted"); +} +| TYPE_P + { + $$ = mm_strdup("type"); +} +| TYPES_P + { + $$ = mm_strdup("types"); +} +| UESCAPE + { + $$ = mm_strdup("uescape"); +} +| UNBOUNDED + { + $$ = mm_strdup("unbounded"); +} +| UNCOMMITTED + { + $$ = mm_strdup("uncommitted"); +} +| UNENCRYPTED + { + $$ = mm_strdup("unencrypted"); +} +| UNIQUE + { + $$ = mm_strdup("unique"); +} +| UNKNOWN + { + $$ = mm_strdup("unknown"); +} +| UNLISTEN + { + $$ = mm_strdup("unlisten"); +} +| UNLOGGED + { + $$ = mm_strdup("unlogged"); +} +| UNTIL + { + $$ = mm_strdup("until"); +} +| UPDATE + { + $$ = mm_strdup("update"); +} +| USER + { + $$ = mm_strdup("user"); +} +| USING + { + $$ = mm_strdup("using"); +} +| VACUUM + { + $$ = mm_strdup("vacuum"); +} +| VALID + { + $$ = mm_strdup("valid"); +} +| VALIDATE + { + $$ = mm_strdup("validate"); +} +| VALIDATOR + { + $$ = mm_strdup("validator"); +} +| VALUE_P + { + $$ = mm_strdup("value"); +} +| VALUES + { + $$ = mm_strdup("values"); +} +| VARCHAR + { + $$ = mm_strdup("varchar"); +} +| VARIADIC + { + $$ = mm_strdup("variadic"); +} +| VERBOSE + { + $$ = mm_strdup("verbose"); +} +| VERSION_P + { + $$ = mm_strdup("version"); +} +| VIEW + { + $$ = mm_strdup("view"); +} +| VIEWS + { + $$ = mm_strdup("views"); +} +| VOLATILE + { + $$ = mm_strdup("volatile"); +} +| WHEN + { + $$ = mm_strdup("when"); +} +| WHITESPACE_P + { + $$ = mm_strdup("whitespace"); +} +| WORK + { + $$ = mm_strdup("work"); +} +| WRAPPER + { + $$ = mm_strdup("wrapper"); +} +| WRITE + { + $$ = mm_strdup("write"); +} +| XML_P + { + $$ = mm_strdup("xml"); +} +| XMLATTRIBUTES + { + $$ = mm_strdup("xmlattributes"); +} +| XMLCONCAT + { + $$ = mm_strdup("xmlconcat"); +} +| XMLELEMENT + { + $$ = mm_strdup("xmlelement"); +} +| XMLEXISTS + { + $$ = mm_strdup("xmlexists"); +} +| XMLFOREST + { + $$ = mm_strdup("xmlforest"); +} +| XMLNAMESPACES + { + $$ = mm_strdup("xmlnamespaces"); +} +| XMLPARSE + { + $$ = mm_strdup("xmlparse"); +} +| XMLPI + { + $$ = mm_strdup("xmlpi"); +} +| XMLROOT + { + $$ = mm_strdup("xmlroot"); +} +| XMLSERIALIZE + { + $$ = mm_strdup("xmlserialize"); +} +| XMLTABLE + { + $$ = mm_strdup("xmltable"); +} +| YES_P + { + $$ = mm_strdup("yes"); +} +| ZONE + { + $$ = mm_strdup("zone"); +} +; + + +/* trailer */ +/* src/interfaces/ecpg/preproc/ecpg.trailer */ + +statements: /*EMPTY*/ + | statements statement + ; + +statement: ecpgstart at toplevel_stmt ';' + { + if (connection) + free(connection); + connection = NULL; + } + | ecpgstart toplevel_stmt ';' + { + if (connection) + free(connection); + connection = NULL; + } + | ecpgstart ECPGVarDeclaration + { + fprintf(base_yyout, "%s", $2); + free($2); + output_line_number(); + } + | ECPGDeclaration + | c_thing { fprintf(base_yyout, "%s", $1); free($1); } + | CPP_LINE { fprintf(base_yyout, "%s", $1); free($1); } + | '{' { braces_open++; fputs("{", base_yyout); } + | '}' + { + remove_typedefs(braces_open); + remove_variables(braces_open--); + if (braces_open == 0) + { + free(current_function); + current_function = NULL; + } + fputs("}", base_yyout); + } + ; + +CreateAsStmt: CREATE OptTemp TABLE create_as_target AS {FoundInto = 0;} SelectStmt opt_with_data + { + if (FoundInto == 1) + mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE AS cannot specify INTO"); + + $$ = cat_str(7, mm_strdup("create"), $2, mm_strdup("table"), $4, mm_strdup("as"), $7, $8); + } + | CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS {FoundInto = 0;} SelectStmt opt_with_data + { + if (FoundInto == 1) + mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE AS cannot specify INTO"); + + $$ = cat_str(7, mm_strdup("create"), $2, mm_strdup("table if not exists"), $7, mm_strdup("as"), $10, $11); + } + ; + +at: AT connection_object + { + connection = $2; + /* + * Do we have a variable as connection target? Remove the variable + * from the variable list or else it will be used twice. + */ + if (argsinsert != NULL) + argsinsert = NULL; + } + ; + +/* + * the exec sql connect statement: connect to the given database + */ +ECPGConnect: SQL_CONNECT TO connection_target opt_connection_name opt_user + { $$ = cat_str(5, $3, mm_strdup(","), $5, mm_strdup(","), $4); } + | SQL_CONNECT TO DEFAULT + { $$ = mm_strdup("NULL, NULL, NULL, \"DEFAULT\""); } + /* also allow ORACLE syntax */ + | SQL_CONNECT ora_user + { $$ = cat_str(3, mm_strdup("NULL,"), $2, mm_strdup(", NULL")); } + | DATABASE connection_target + { $$ = cat2_str($2, mm_strdup(", NULL, NULL, NULL")); } + ; + +connection_target: opt_database_name opt_server opt_port + { + /* old style: dbname[@server][:port] */ + if (strlen($2) > 0 && *($2) != '@') + mmerror(PARSE_ERROR, ET_ERROR, "expected \"@\", found \"%s\"", $2); + + /* C strings need to be handled differently */ + if ($1[0] == '\"') + $$ = $1; + else + $$ = make3_str(mm_strdup("\""), make3_str($1, $2, $3), mm_strdup("\"")); + } + | db_prefix ':' server opt_port '/' opt_database_name opt_options + { + /* new style: :postgresql://server[:port][/dbname] */ + if (strncmp($1, "unix:postgresql", strlen("unix:postgresql")) != 0 && strncmp($1, "tcp:postgresql", strlen("tcp:postgresql")) != 0) + mmerror(PARSE_ERROR, ET_ERROR, "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported"); + + if (strncmp($3, "//", strlen("//")) != 0) + mmerror(PARSE_ERROR, ET_ERROR, "expected \"://\", found \"%s\"", $3); + + if (strncmp($1, "unix", strlen("unix")) == 0 && + strncmp($3 + strlen("//"), "localhost", strlen("localhost")) != 0 && + strncmp($3 + strlen("//"), "127.0.0.1", strlen("127.0.0.1")) != 0) + mmerror(PARSE_ERROR, ET_ERROR, "Unix-domain sockets only work on \"localhost\" but not on \"%s\"", $3 + strlen("//")); + + $$ = make3_str(make3_str(mm_strdup("\""), $1, mm_strdup(":")), $3, make3_str(make3_str($4, mm_strdup("/"), $6), $7, mm_strdup("\""))); + } + | char_variable + { + $$ = $1; + } + | ecpg_sconst + { + /* We can only process double quoted strings not single quotes ones, + * so we change the quotes. + * Note, that the rule for ecpg_sconst adds these single quotes. */ + $1[0] = '\"'; + $1[strlen($1)-1] = '\"'; + $$ = $1; + } + ; + +opt_database_name: name { $$ = $1; } + | /*EMPTY*/ { $$ = EMPTY; } + ; + +db_prefix: ecpg_ident cvariable + { + if (strcmp($2, "postgresql") != 0 && strcmp($2, "postgres") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "expected \"postgresql\", found \"%s\"", $2); + + if (strcmp($1, "tcp") != 0 && strcmp($1, "unix") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "invalid connection type: %s", $1); + + $$ = make3_str($1, mm_strdup(":"), $2); + } + ; + +server: Op server_name + { + if (strcmp($1, "@") != 0 && strcmp($1, "//") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "expected \"@\" or \"://\", found \"%s\"", $1); + + $$ = make2_str($1, $2); + } + ; + +opt_server: server { $$ = $1; } + | /*EMPTY*/ { $$ = EMPTY; } + ; + +server_name: ColId { $$ = $1; } + | ColId '.' server_name { $$ = make3_str($1, mm_strdup("."), $3); } + | IP { $$ = make_name(); } + ; + +opt_port: ':' Iconst { $$ = make2_str(mm_strdup(":"), $2); } + | /*EMPTY*/ { $$ = EMPTY; } + ; + +opt_connection_name: AS connection_object { $$ = $2; } + | /*EMPTY*/ { $$ = mm_strdup("NULL"); } + ; + +opt_user: USER ora_user { $$ = $2; } + | /*EMPTY*/ { $$ = mm_strdup("NULL, NULL"); } + ; + +ora_user: user_name + { $$ = cat2_str($1, mm_strdup(", NULL")); } + | user_name '/' user_name + { $$ = cat_str(3, $1, mm_strdup(","), $3); } + | user_name SQL_IDENTIFIED BY user_name + { $$ = cat_str(3, $1, mm_strdup(","), $4); } + | user_name USING user_name + { $$ = cat_str(3, $1, mm_strdup(","), $3); } + ; + +user_name: RoleId + { + if ($1[0] == '\"') + $$ = $1; + else + $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); + } + | ecpg_sconst + { + if ($1[0] == '\"') + $$ = $1; + else + $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); + } + | civar + { + enum ECPGttype type = argsinsert->variable->type->type; + + /* if array see what's inside */ + if (type == ECPGt_array) + type = argsinsert->variable->type->u.element->type; + + /* handle varchars */ + if (type == ECPGt_varchar) + $$ = make2_str(mm_strdup(argsinsert->variable->name), mm_strdup(".arr")); + else + $$ = mm_strdup(argsinsert->variable->name); + } + ; + +char_variable: cvariable + { + /* check if we have a string variable */ + struct variable *p = find_variable($1); + enum ECPGttype type = p->type->type; + + /* If we have just one character this is not a string */ + if (atol(p->type->size) == 1) + mmerror(PARSE_ERROR, ET_ERROR, "invalid data type"); + else + { + /* if array see what's inside */ + if (type == ECPGt_array) + type = p->type->u.element->type; + + switch (type) + { + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + $$ = $1; + break; + case ECPGt_varchar: + $$ = make2_str($1, mm_strdup(".arr")); + break; + default: + mmerror(PARSE_ERROR, ET_ERROR, "invalid data type"); + $$ = $1; + break; + } + } + } + ; + +opt_options: Op connect_options + { + if (strlen($1) == 0) + mmerror(PARSE_ERROR, ET_ERROR, "incomplete statement"); + + if (strcmp($1, "?") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "unrecognized token \"%s\"", $1); + + $$ = make2_str(mm_strdup("?"), $2); + } + | /*EMPTY*/ { $$ = EMPTY; } + ; + +connect_options: ColId opt_opt_value + { + $$ = make2_str($1, $2); + } + | ColId opt_opt_value Op connect_options + { + if (strlen($3) == 0) + mmerror(PARSE_ERROR, ET_ERROR, "incomplete statement"); + + if (strcmp($3, "&") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "unrecognized token \"%s\"", $3); + + $$ = cat_str(3, make2_str($1, $2), $3, $4); + } + ; + +opt_opt_value: /*EMPTY*/ + { $$ = EMPTY; } + | '=' Iconst + { $$ = make2_str(mm_strdup("="), $2); } + | '=' ecpg_ident + { $$ = make2_str(mm_strdup("="), $2); } + | '=' civar + { $$ = make2_str(mm_strdup("="), $2); } + ; + +prepared_name: name + { + if ($1[0] == '\"' && $1[strlen($1)-1] == '\"') /* already quoted? */ + $$ = $1; + else /* not quoted => convert to lowercase */ + { + size_t i; + + for (i = 0; i< strlen($1); i++) + $1[i] = tolower((unsigned char) $1[i]); + + $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); + } + } + | char_variable { $$ = $1; } + ; + +/* + * Declare Statement + */ +ECPGDeclareStmt: DECLARE prepared_name STATEMENT + { + struct declared_list *ptr = NULL; + /* Check whether the declared name has been defined or not */ + for (ptr = g_declared_list; ptr != NULL; ptr = ptr->next) + { + if (strcmp($2, ptr->name) == 0) + { + /* re-definition is not allowed */ + mmerror(PARSE_ERROR, ET_ERROR, "name \"%s\" is already declared", ptr->name); + } + } + + /* Add a new declared name into the g_declared_list */ + ptr = NULL; + ptr = (struct declared_list *)mm_alloc(sizeof(struct declared_list)); + if (ptr) + { + /* initial definition */ + ptr -> name = $2; + if (connection) + ptr -> connection = mm_strdup(connection); + else + ptr -> connection = NULL; + + ptr -> next = g_declared_list; + g_declared_list = ptr; + } + + $$ = cat_str(3 , mm_strdup("/* declare "), mm_strdup($2), mm_strdup(" as an SQL identifier */")); + } +; + +/* + * Declare a prepared cursor. The syntax is different from the standard + * declare statement, so we create a new rule. + */ +ECPGCursorStmt: DECLARE cursor_name cursor_options CURSOR opt_hold FOR prepared_name + { + struct cursor *ptr, *this; + char *cursor_marker = $2[0] == ':' ? mm_strdup("$0") : mm_strdup($2); + int (* strcmp_fn)(const char *, const char *) = (($2[0] == ':' || $2[0] == '"') ? strcmp : pg_strcasecmp); + struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable)); + char *comment; + char *con; + + if (INFORMIX_MODE && pg_strcasecmp($2, "database") == 0) + mmfatal(PARSE_ERROR, "\"database\" cannot be used as cursor name in INFORMIX mode"); + + check_declared_list($7); + con = connection ? connection : "NULL"; + for (ptr = cur; ptr != NULL; ptr = ptr->next) + { + if (strcmp_fn($2, ptr->name) == 0) + { + /* re-definition is a bug */ + if ($2[0] == ':') + mmerror(PARSE_ERROR, ET_ERROR, "using variable \"%s\" in different declare statements is not supported", $2+1); + else + mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" is already defined", $2); + } + } + + this = (struct cursor *) mm_alloc(sizeof(struct cursor)); + + /* initial definition */ + this->next = cur; + this->name = $2; + this->function = (current_function ? mm_strdup(current_function) : NULL); + this->connection = connection ? mm_strdup(connection) : NULL; + this->command = cat_str(6, mm_strdup("declare"), cursor_marker, $3, mm_strdup("cursor"), $5, mm_strdup("for $1")); + this->argsresult = NULL; + this->argsresult_oos = NULL; + + thisquery->type = &ecpg_query; + thisquery->brace_level = 0; + thisquery->next = NULL; + thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement(, , __LINE__)") + strlen(con) + strlen($7)); + sprintf(thisquery->name, "ECPGprepared_statement(%s, %s, __LINE__)", con, $7); + + this->argsinsert = NULL; + this->argsinsert_oos = NULL; + if ($2[0] == ':') + { + struct variable *var = find_variable($2 + 1); + remove_variable_from_list(&argsinsert, var); + add_variable_to_head(&(this->argsinsert), var, &no_indicator); + } + add_variable_to_head(&(this->argsinsert), thisquery, &no_indicator); + + cur = this; + + comment = cat_str(3, mm_strdup("/*"), mm_strdup(this->command), mm_strdup("*/")); + + $$ = cat_str(2, adjust_outofscope_cursor_vars(this), + comment); + } + ; + +ECPGExecuteImmediateStmt: EXECUTE IMMEDIATE execstring + { + /* execute immediate means prepare the statement and + * immediately execute it */ + $$ = $3; + }; +/* + * variable declaration outside exec sql declare block + */ +ECPGVarDeclaration: single_vt_declaration; + +single_vt_declaration: type_declaration { $$ = $1; } + | var_declaration { $$ = $1; } + ; + +precision: NumericOnly { $$ = $1; }; + +opt_scale: ',' NumericOnly { $$ = $2; } + | /* EMPTY */ { $$ = EMPTY; } + ; + +ecpg_interval: opt_interval { $$ = $1; } + | YEAR_P TO MINUTE_P { $$ = mm_strdup("year to minute"); } + | YEAR_P TO SECOND_P { $$ = mm_strdup("year to second"); } + | DAY_P TO DAY_P { $$ = mm_strdup("day to day"); } + | MONTH_P TO MONTH_P { $$ = mm_strdup("month to month"); } + ; + +/* + * variable declaration inside exec sql declare block + */ +ECPGDeclaration: sql_startdeclare + { fputs("/* exec sql begin declare section */", base_yyout); } + var_type_declarations sql_enddeclare + { + fprintf(base_yyout, "%s/* exec sql end declare section */", $3); + free($3); + output_line_number(); + } + ; + +sql_startdeclare: ecpgstart BEGIN_P DECLARE SQL_SECTION ';' {}; + +sql_enddeclare: ecpgstart END_P DECLARE SQL_SECTION ';' {}; + +var_type_declarations: /*EMPTY*/ { $$ = EMPTY; } + | vt_declarations { $$ = $1; } + ; + +vt_declarations: single_vt_declaration { $$ = $1; } + | CPP_LINE { $$ = $1; } + | vt_declarations single_vt_declaration { $$ = cat2_str($1, $2); } + | vt_declarations CPP_LINE { $$ = cat2_str($1, $2); } + ; + +variable_declarations: var_declaration { $$ = $1; } + | variable_declarations var_declaration { $$ = cat2_str($1, $2); } + ; + +type_declaration: S_TYPEDEF + { + /* reset this variable so we see if there was */ + /* an initializer specified */ + initializer = 0; + } + var_type opt_pointer ECPGColLabelCommon opt_array_bounds ';' + { + add_typedef($5, $6.index1, $6.index2, $3.type_enum, $3.type_dimension, $3.type_index, initializer, *$4 ? 1 : 0); + + fprintf(base_yyout, "typedef %s %s %s %s;\n", $3.type_str, *$4 ? "*" : "", $5, $6.str); + output_line_number(); + $$ = mm_strdup(""); + }; + +var_declaration: storage_declaration + var_type + { + actual_type[struct_level].type_enum = $2.type_enum; + actual_type[struct_level].type_str = $2.type_str; + actual_type[struct_level].type_dimension = $2.type_dimension; + actual_type[struct_level].type_index = $2.type_index; + actual_type[struct_level].type_sizeof = $2.type_sizeof; + + actual_startline[struct_level] = hashline_number(); + } + variable_list ';' + { + $$ = cat_str(5, actual_startline[struct_level], $1, $2.type_str, $4, mm_strdup(";\n")); + } + | var_type + { + actual_type[struct_level].type_enum = $1.type_enum; + actual_type[struct_level].type_str = $1.type_str; + actual_type[struct_level].type_dimension = $1.type_dimension; + actual_type[struct_level].type_index = $1.type_index; + actual_type[struct_level].type_sizeof = $1.type_sizeof; + + actual_startline[struct_level] = hashline_number(); + } + variable_list ';' + { + $$ = cat_str(4, actual_startline[struct_level], $1.type_str, $3, mm_strdup(";\n")); + } + | struct_union_type_with_symbol ';' + { + $$ = cat2_str($1, mm_strdup(";")); + } + ; + +opt_bit_field: ':' Iconst { $$ =cat2_str(mm_strdup(":"), $2); } + | /* EMPTY */ { $$ = EMPTY; } + ; + +storage_declaration: storage_clause storage_modifier + {$$ = cat2_str ($1, $2); } + | storage_clause {$$ = $1; } + | storage_modifier {$$ = $1; } + ; + +storage_clause : S_EXTERN { $$ = mm_strdup("extern"); } + | S_STATIC { $$ = mm_strdup("static"); } + | S_REGISTER { $$ = mm_strdup("register"); } + | S_AUTO { $$ = mm_strdup("auto"); } + ; + +storage_modifier : S_CONST { $$ = mm_strdup("const"); } + | S_VOLATILE { $$ = mm_strdup("volatile"); } + ; + +var_type: simple_type + { + $$.type_enum = $1; + $$.type_str = mm_strdup(ecpg_type_name($1)); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + | struct_union_type + { + $$.type_str = $1; + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + + if (strncmp($1, "struct", sizeof("struct")-1) == 0) + { + $$.type_enum = ECPGt_struct; + $$.type_sizeof = ECPGstruct_sizeof; + } + else + { + $$.type_enum = ECPGt_union; + $$.type_sizeof = NULL; + } + } + | enum_type + { + $$.type_str = $1; + $$.type_enum = ECPGt_int; + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + | ECPGColLabelCommon '(' precision opt_scale ')' + { + if (strcmp($1, "numeric") == 0) + { + $$.type_enum = ECPGt_numeric; + $$.type_str = mm_strdup("numeric"); + } + else if (strcmp($1, "decimal") == 0) + { + $$.type_enum = ECPGt_decimal; + $$.type_str = mm_strdup("decimal"); + } + else + { + mmerror(PARSE_ERROR, ET_ERROR, "only data types numeric and decimal have precision/scale argument"); + $$.type_enum = ECPGt_numeric; + $$.type_str = mm_strdup("numeric"); + } + + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + | ECPGColLabelCommon ecpg_interval + { + if (strlen($2) != 0 && strcmp ($1, "datetime") != 0 && strcmp ($1, "interval") != 0) + mmerror (PARSE_ERROR, ET_ERROR, "interval specification not allowed here"); + + /* + * Check for type names that the SQL grammar treats as + * unreserved keywords + */ + if (strcmp($1, "varchar") == 0) + { + $$.type_enum = ECPGt_varchar; + $$.type_str = EMPTY; /*mm_strdup("varchar");*/ + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "bytea") == 0) + { + $$.type_enum = ECPGt_bytea; + $$.type_str = EMPTY; + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "float") == 0) + { + $$.type_enum = ECPGt_float; + $$.type_str = mm_strdup("float"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "double") == 0) + { + $$.type_enum = ECPGt_double; + $$.type_str = mm_strdup("double"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "numeric") == 0) + { + $$.type_enum = ECPGt_numeric; + $$.type_str = mm_strdup("numeric"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "decimal") == 0) + { + $$.type_enum = ECPGt_decimal; + $$.type_str = mm_strdup("decimal"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "date") == 0) + { + $$.type_enum = ECPGt_date; + $$.type_str = mm_strdup("date"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "timestamp") == 0) + { + $$.type_enum = ECPGt_timestamp; + $$.type_str = mm_strdup("timestamp"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "interval") == 0) + { + $$.type_enum = ECPGt_interval; + $$.type_str = mm_strdup("interval"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if (strcmp($1, "datetime") == 0) + { + $$.type_enum = ECPGt_timestamp; + $$.type_str = mm_strdup("timestamp"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else if ((strcmp($1, "string") == 0) && INFORMIX_MODE) + { + $$.type_enum = ECPGt_string; + $$.type_str = mm_strdup("char"); + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = NULL; + } + else + { + /* this is for typedef'ed types */ + struct typedefs *this = get_typedef($1); + + $$.type_str = (this->type->type_enum == ECPGt_varchar || this->type->type_enum == ECPGt_bytea) ? EMPTY : mm_strdup(this->name); + $$.type_enum = this->type->type_enum; + $$.type_dimension = this->type->type_dimension; + $$.type_index = this->type->type_index; + if (this->type->type_sizeof && strlen(this->type->type_sizeof) != 0) + $$.type_sizeof = this->type->type_sizeof; + else + $$.type_sizeof = cat_str(3, mm_strdup("sizeof("), mm_strdup(this->name), mm_strdup(")")); + + struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list); + } + } + | s_struct_union_symbol + { + /* this is for named structs/unions */ + char *name; + struct typedefs *this; + bool forward = (forward_name != NULL && strcmp($1.symbol, forward_name) == 0 && strcmp($1.su, "struct") == 0); + + name = cat2_str($1.su, $1.symbol); + /* Do we have a forward definition? */ + if (!forward) + { + /* No */ + + this = get_typedef(name); + $$.type_str = mm_strdup(this->name); + $$.type_enum = this->type->type_enum; + $$.type_dimension = this->type->type_dimension; + $$.type_index = this->type->type_index; + $$.type_sizeof = this->type->type_sizeof; + struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list); + free(name); + } + else + { + $$.type_str = name; + $$.type_enum = ECPGt_long; + $$.type_dimension = mm_strdup("-1"); + $$.type_index = mm_strdup("-1"); + $$.type_sizeof = mm_strdup(""); + struct_member_list[struct_level] = NULL; + } + } + ; + +enum_type: ENUM_P symbol enum_definition + { $$ = cat_str(3, mm_strdup("enum"), $2, $3); } + | ENUM_P enum_definition + { $$ = cat2_str(mm_strdup("enum"), $2); } + | ENUM_P symbol + { $$ = cat2_str(mm_strdup("enum"), $2); } + ; + +enum_definition: '{' c_list '}' + { $$ = cat_str(3, mm_strdup("{"), $2, mm_strdup("}")); }; + +struct_union_type_with_symbol: s_struct_union_symbol + { + struct_member_list[struct_level++] = NULL; + if (struct_level >= STRUCT_DEPTH) + mmerror(PARSE_ERROR, ET_ERROR, "too many levels in nested structure/union definition"); + forward_name = mm_strdup($1.symbol); + } + '{' variable_declarations '}' + { + struct typedefs *ptr, *this; + struct this_type su_type; + + ECPGfree_struct_member(struct_member_list[struct_level]); + struct_member_list[struct_level] = NULL; + struct_level--; + if (strncmp($1.su, "struct", sizeof("struct")-1) == 0) + su_type.type_enum = ECPGt_struct; + else + su_type.type_enum = ECPGt_union; + su_type.type_str = cat2_str($1.su, $1.symbol); + free(forward_name); + forward_name = NULL; + + /* This is essentially a typedef but needs the keyword struct/union as well. + * So we create the typedef for each struct definition with symbol */ + for (ptr = types; ptr != NULL; ptr = ptr->next) + { + if (strcmp(su_type.type_str, ptr->name) == 0) + /* re-definition is a bug */ + mmerror(PARSE_ERROR, ET_ERROR, "type \"%s\" is already defined", su_type.type_str); + } + + this = (struct typedefs *) mm_alloc(sizeof(struct typedefs)); + + /* initial definition */ + this->next = types; + this->name = mm_strdup(su_type.type_str); + this->brace_level = braces_open; + this->type = (struct this_type *) mm_alloc(sizeof(struct this_type)); + this->type->type_enum = su_type.type_enum; + this->type->type_str = mm_strdup(su_type.type_str); + this->type->type_dimension = mm_strdup("-1"); /* dimension of array */ + this->type->type_index = mm_strdup("-1"); /* length of string */ + this->type->type_sizeof = ECPGstruct_sizeof; + this->struct_member_list = struct_member_list[struct_level]; + + types = this; + $$ = cat_str(4, su_type.type_str, mm_strdup("{"), $4, mm_strdup("}")); + } + ; + +struct_union_type: struct_union_type_with_symbol { $$ = $1; } + | s_struct_union + { + struct_member_list[struct_level++] = NULL; + if (struct_level >= STRUCT_DEPTH) + mmerror(PARSE_ERROR, ET_ERROR, "too many levels in nested structure/union definition"); + } + '{' variable_declarations '}' + { + ECPGfree_struct_member(struct_member_list[struct_level]); + struct_member_list[struct_level] = NULL; + struct_level--; + $$ = cat_str(4, $1, mm_strdup("{"), $4, mm_strdup("}")); + } + ; + +s_struct_union_symbol: SQL_STRUCT symbol + { + $$.su = mm_strdup("struct"); + $$.symbol = $2; + ECPGstruct_sizeof = cat_str(3, mm_strdup("sizeof("), cat2_str(mm_strdup($$.su), mm_strdup($$.symbol)), mm_strdup(")")); + } + | UNION symbol + { + $$.su = mm_strdup("union"); + $$.symbol = $2; + } + ; + +s_struct_union: SQL_STRUCT + { + ECPGstruct_sizeof = mm_strdup(""); /* This must not be NULL to distinguish from simple types. */ + $$ = mm_strdup("struct"); + } + | UNION + { + $$ = mm_strdup("union"); + } + ; + +simple_type: unsigned_type { $$=$1; } + | opt_signed signed_type { $$=$2; } + ; + +unsigned_type: SQL_UNSIGNED SQL_SHORT { $$ = ECPGt_unsigned_short; } + | SQL_UNSIGNED SQL_SHORT INT_P { $$ = ECPGt_unsigned_short; } + | SQL_UNSIGNED { $$ = ECPGt_unsigned_int; } + | SQL_UNSIGNED INT_P { $$ = ECPGt_unsigned_int; } + | SQL_UNSIGNED SQL_LONG { $$ = ECPGt_unsigned_long; } + | SQL_UNSIGNED SQL_LONG INT_P { $$ = ECPGt_unsigned_long; } + | SQL_UNSIGNED SQL_LONG SQL_LONG { $$ = ECPGt_unsigned_long_long; } + | SQL_UNSIGNED SQL_LONG SQL_LONG INT_P { $$ = ECPGt_unsigned_long_long; } + | SQL_UNSIGNED CHAR_P { $$ = ECPGt_unsigned_char; } + ; + +signed_type: SQL_SHORT { $$ = ECPGt_short; } + | SQL_SHORT INT_P { $$ = ECPGt_short; } + | INT_P { $$ = ECPGt_int; } + | SQL_LONG { $$ = ECPGt_long; } + | SQL_LONG INT_P { $$ = ECPGt_long; } + | SQL_LONG SQL_LONG { $$ = ECPGt_long_long; } + | SQL_LONG SQL_LONG INT_P { $$ = ECPGt_long_long; } + | SQL_BOOL { $$ = ECPGt_bool; } + | CHAR_P { $$ = ECPGt_char; } + | DOUBLE_P { $$ = ECPGt_double; } + ; + +opt_signed: SQL_SIGNED + | /* EMPTY */ + ; + +variable_list: variable + { $$ = $1; } + | variable_list ',' variable + { + if (actual_type[struct_level].type_enum == ECPGt_varchar || actual_type[struct_level].type_enum == ECPGt_bytea) + $$ = cat_str(3, $1, mm_strdup(";"), $3); + else + $$ = cat_str(3, $1, mm_strdup(","), $3); + } + ; + +variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initializer + { + struct ECPGtype * type; + char *dimension = $3.index1; /* dimension of array */ + char *length = $3.index2; /* length of string */ + char *dim_str; + char *vcn; + int *varlen_type_counter; + char *struct_name; + + adjust_array(actual_type[struct_level].type_enum, &dimension, &length, actual_type[struct_level].type_dimension, actual_type[struct_level].type_index, strlen($1), false); + switch (actual_type[struct_level].type_enum) + { + case ECPGt_struct: + case ECPGt_union: + if (atoi(dimension) < 0) + type = ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, actual_type[struct_level].type_str, actual_type[struct_level].type_sizeof); + else + type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, actual_type[struct_level].type_str, actual_type[struct_level].type_sizeof), dimension); + + $$ = cat_str(5, $1, mm_strdup($2), $3.str, $4, $5); + break; + + case ECPGt_varchar: + case ECPGt_bytea: + if (actual_type[struct_level].type_enum == ECPGt_varchar) + { + varlen_type_counter = &varchar_counter; + struct_name = " struct varchar_"; + } + else + { + varlen_type_counter = &bytea_counter; + struct_name = " struct bytea_"; + } + if (atoi(dimension) < 0) + type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length, *varlen_type_counter); + else + type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, *varlen_type_counter), dimension); + + if (strcmp(dimension, "0") == 0 || abs(atoi(dimension)) == 1) + dim_str=mm_strdup(""); + else + dim_str=cat_str(3, mm_strdup("["), mm_strdup(dimension), mm_strdup("]")); + /* cannot check for atoi <= 0 because a defined constant will yield 0 here as well */ + if (atoi(length) < 0 || strcmp(length, "0") == 0) + mmerror(PARSE_ERROR, ET_ERROR, "pointers to varchar are not implemented"); + + /* make sure varchar struct name is unique by adding a unique counter to its definition */ + vcn = (char *) mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + sprintf(vcn, "%d", *varlen_type_counter); + if (strcmp(dimension, "0") == 0) + $$ = cat_str(7, make2_str(mm_strdup(struct_name), vcn), mm_strdup(" { int len; char arr["), mm_strdup(length), mm_strdup("]; } *"), mm_strdup($2), $4, $5); + else + $$ = cat_str(8, make2_str(mm_strdup(struct_name), vcn), mm_strdup(" { int len; char arr["), mm_strdup(length), mm_strdup("]; } "), mm_strdup($2), dim_str, $4, $5); + (*varlen_type_counter)++; + break; + + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + if (atoi(dimension) == -1) + { + int i = strlen($5); + + if (atoi(length) == -1 && i > 0) /* char [] = "string" */ + { + /* if we have an initializer but no string size set, let's use the initializer's length */ + free(length); + length = mm_alloc(i+sizeof("sizeof()")); + sprintf(length, "sizeof(%s)", $5+2); + } + type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length, 0); + } + else + type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, 0), dimension); + + $$ = cat_str(5, $1, mm_strdup($2), $3.str, $4, $5); + break; + + default: + if (atoi(dimension) < 0) + type = ECPGmake_simple_type(actual_type[struct_level].type_enum, mm_strdup("1"), 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, mm_strdup("1"), 0), dimension); + + $$ = cat_str(5, $1, mm_strdup($2), $3.str, $4, $5); + break; + } + + if (struct_level == 0) + new_variable($2, type, braces_open); + else + ECPGmake_struct_member($2, type, &(struct_member_list[struct_level - 1])); + + free($2); + } + ; + +opt_initializer: /*EMPTY*/ + { $$ = EMPTY; } + | '=' c_term + { + initializer = 1; + $$ = cat2_str(mm_strdup("="), $2); + } + ; + +opt_pointer: /*EMPTY*/ { $$ = EMPTY; } + | '*' { $$ = mm_strdup("*"); } + | '*' '*' { $$ = mm_strdup("**"); } + ; + +/* + * We try to simulate the correct DECLARE syntax here so we get dynamic SQL + */ +ECPGDeclare: DECLARE STATEMENT ecpg_ident + { + /* this is only supported for compatibility */ + $$ = cat_str(3, mm_strdup("/* declare statement"), $3, mm_strdup("*/")); + } + ; +/* + * the exec sql disconnect statement: disconnect from the given database + */ +ECPGDisconnect: SQL_DISCONNECT dis_name { $$ = $2; } + ; + +dis_name: connection_object { $$ = $1; } + | CURRENT_P { $$ = mm_strdup("\"CURRENT\""); } + | ALL { $$ = mm_strdup("\"ALL\""); } + | /* EMPTY */ { $$ = mm_strdup("\"CURRENT\""); } + ; + +connection_object: name { $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); } + | DEFAULT { $$ = mm_strdup("\"DEFAULT\""); } + | char_variable { $$ = $1; } + ; + +execstring: char_variable + { $$ = $1; } + | CSTRING + { $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); } + ; + +/* + * the exec sql free command to deallocate a previously + * prepared statement + */ +ECPGFree: SQL_FREE cursor_name { $$ = $2; } + | SQL_FREE ALL { $$ = mm_strdup("all"); } + ; + +/* + * open is an open cursor, at the moment this has to be removed + */ +ECPGOpen: SQL_OPEN cursor_name opt_ecpg_using + { + if ($2[0] == ':') + remove_variable_from_list(&argsinsert, find_variable($2 + 1)); + $$ = $2; + } + ; + +opt_ecpg_using: /*EMPTY*/ { $$ = EMPTY; } + | ecpg_using { $$ = $1; } + ; + +ecpg_using: USING using_list { $$ = EMPTY; } + | using_descriptor { $$ = $1; } + ; + +using_descriptor: USING SQL_P SQL_DESCRIPTOR quoted_ident_stringvar + { + add_variable_to_head(&argsinsert, descriptor_variable($4,0), &no_indicator); + $$ = EMPTY; + } + | USING SQL_DESCRIPTOR name + { + add_variable_to_head(&argsinsert, sqlda_variable($3), &no_indicator); + $$ = EMPTY; + } + ; + +into_descriptor: INTO SQL_P SQL_DESCRIPTOR quoted_ident_stringvar + { + add_variable_to_head(&argsresult, descriptor_variable($4,1), &no_indicator); + $$ = EMPTY; + } + | INTO SQL_DESCRIPTOR name + { + add_variable_to_head(&argsresult, sqlda_variable($3), &no_indicator); + $$ = EMPTY; + } + ; + +into_sqlda: INTO name + { + add_variable_to_head(&argsresult, sqlda_variable($2), &no_indicator); + $$ = EMPTY; + } + ; + +using_list: UsingValue | UsingValue ',' using_list; + +UsingValue: UsingConst + { + char *length = mm_alloc(32); + + sprintf(length, "%zu", strlen($1)); + add_variable_to_head(&argsinsert, new_variable($1, ECPGmake_simple_type(ECPGt_const, length, 0), 0), &no_indicator); + } + | civar { $$ = EMPTY; } + | civarind { $$ = EMPTY; } + ; + +UsingConst: Iconst { $$ = $1; } + | '+' Iconst { $$ = cat_str(2, mm_strdup("+"), $2); } + | '-' Iconst { $$ = cat_str(2, mm_strdup("-"), $2); } + | ecpg_fconst { $$ = $1; } + | '+' ecpg_fconst { $$ = cat_str(2, mm_strdup("+"), $2); } + | '-' ecpg_fconst { $$ = cat_str(2, mm_strdup("-"), $2); } + | ecpg_sconst { $$ = $1; } + | ecpg_bconst { $$ = $1; } + | ecpg_xconst { $$ = $1; } + ; + +/* + * We accept DESCRIBE [OUTPUT] but do nothing with DESCRIBE INPUT so far. + */ +ECPGDescribe: SQL_DESCRIBE INPUT_P prepared_name using_descriptor + { + $$.input = 1; + $$.stmt_name = $3; + } + | SQL_DESCRIBE opt_output prepared_name using_descriptor + { + struct variable *var; + var = argsinsert->variable; + remove_variable_from_list(&argsinsert, var); + add_variable_to_head(&argsresult, var, &no_indicator); + + $$.input = 0; + $$.stmt_name = $3; + } + | SQL_DESCRIBE opt_output prepared_name into_descriptor + { + $$.input = 0; + $$.stmt_name = $3; + } + | SQL_DESCRIBE INPUT_P prepared_name into_sqlda + { + $$.input = 1; + $$.stmt_name = $3; + } + | SQL_DESCRIBE opt_output prepared_name into_sqlda + { + $$.input = 0; + $$.stmt_name = $3; + } + ; + +opt_output: SQL_OUTPUT { $$ = mm_strdup("output"); } + | /* EMPTY */ { $$ = EMPTY; } + ; + +/* + * dynamic SQL: descriptor based access + * originally written by Christof Petig + * and Peter Eisentraut + */ + +/* + * allocate a descriptor + */ +ECPGAllocateDescr: SQL_ALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar + { + add_descriptor($3,connection); + $$ = $3; + } + ; + + +/* + * deallocate a descriptor + */ +ECPGDeallocateDescr: DEALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar + { + drop_descriptor($3,connection); + $$ = $3; + } + ; + +/* + * manipulate a descriptor header + */ + +ECPGGetDescriptorHeader: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar ECPGGetDescHeaderItems + { $$ = $3; } + ; + +ECPGGetDescHeaderItems: ECPGGetDescHeaderItem + | ECPGGetDescHeaderItems ',' ECPGGetDescHeaderItem + ; + +ECPGGetDescHeaderItem: cvariable '=' desc_header_item + { push_assignment($1, $3); } + ; + + +ECPGSetDescriptorHeader: SET SQL_DESCRIPTOR quoted_ident_stringvar ECPGSetDescHeaderItems + { $$ = $3; } + ; + +ECPGSetDescHeaderItems: ECPGSetDescHeaderItem + | ECPGSetDescHeaderItems ',' ECPGSetDescHeaderItem + ; + +ECPGSetDescHeaderItem: desc_header_item '=' IntConstVar + { + push_assignment($3, $1); + } + ; + +IntConstVar: Iconst + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + + sprintf(length, "%zu", strlen($1)); + new_variable($1, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + $$ = $1; + } + | cvariable + { + $$ = $1; + } + ; + +desc_header_item: SQL_COUNT { $$ = ECPGd_count; } + ; + +/* + * manipulate a descriptor + */ + +ECPGGetDescriptor: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar VALUE_P IntConstVar ECPGGetDescItems + { $$.str = $5; $$.name = $3; } + ; + +ECPGGetDescItems: ECPGGetDescItem + | ECPGGetDescItems ',' ECPGGetDescItem + ; + +ECPGGetDescItem: cvariable '=' descriptor_item { push_assignment($1, $3); }; + + +ECPGSetDescriptor: SET SQL_DESCRIPTOR quoted_ident_stringvar VALUE_P IntConstVar ECPGSetDescItems + { $$.str = $5; $$.name = $3; } + ; + +ECPGSetDescItems: ECPGSetDescItem + | ECPGSetDescItems ',' ECPGSetDescItem + ; + +ECPGSetDescItem: descriptor_item '=' AllConstVar + { + push_assignment($3, $1); + } + ; + +AllConstVar: ecpg_fconst + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + + sprintf(length, "%zu", strlen($1)); + new_variable($1, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + $$ = $1; + } + + | IntConstVar + { + $$ = $1; + } + + | '-' ecpg_fconst + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *var = cat2_str(mm_strdup("-"), $2); + + sprintf(length, "%zu", strlen(var)); + new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + $$ = var; + } + + | '-' Iconst + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *var = cat2_str(mm_strdup("-"), $2); + + sprintf(length, "%zu", strlen(var)); + new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + $$ = var; + } + + | ecpg_sconst + { + char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + char *var = $1 + 1; + + var[strlen(var) - 1] = '\0'; + sprintf(length, "%zu", strlen(var)); + new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0); + $$ = var; + } + ; + +descriptor_item: SQL_CARDINALITY { $$ = ECPGd_cardinality; } + | DATA_P { $$ = ECPGd_data; } + | SQL_DATETIME_INTERVAL_CODE { $$ = ECPGd_di_code; } + | SQL_DATETIME_INTERVAL_PRECISION { $$ = ECPGd_di_precision; } + | SQL_INDICATOR { $$ = ECPGd_indicator; } + | SQL_KEY_MEMBER { $$ = ECPGd_key_member; } + | SQL_LENGTH { $$ = ECPGd_length; } + | NAME_P { $$ = ECPGd_name; } + | SQL_NULLABLE { $$ = ECPGd_nullable; } + | SQL_OCTET_LENGTH { $$ = ECPGd_octet; } + | PRECISION { $$ = ECPGd_precision; } + | SQL_RETURNED_LENGTH { $$ = ECPGd_length; } + | SQL_RETURNED_OCTET_LENGTH { $$ = ECPGd_ret_octet; } + | SQL_SCALE { $$ = ECPGd_scale; } + | TYPE_P { $$ = ECPGd_type; } + ; + +/* + * set/reset the automatic transaction mode, this needs a different handling + * as the other set commands + */ +ECPGSetAutocommit: SET SQL_AUTOCOMMIT '=' on_off { $$ = $4; } + | SET SQL_AUTOCOMMIT TO on_off { $$ = $4; } + ; + +on_off: ON { $$ = mm_strdup("on"); } + | OFF { $$ = mm_strdup("off"); } + ; + +/* + * set the actual connection, this needs a different handling as the other + * set commands + */ +ECPGSetConnection: SET CONNECTION TO connection_object { $$ = $4; } + | SET CONNECTION '=' connection_object { $$ = $4; } + | SET CONNECTION connection_object { $$ = $3; } + ; + +/* + * define a new type for embedded SQL + */ +ECPGTypedef: TYPE_P + { + /* reset this variable so we see if there was */ + /* an initializer specified */ + initializer = 0; + } + ECPGColLabelCommon IS var_type opt_array_bounds opt_reference + { + add_typedef($3, $6.index1, $6.index2, $5.type_enum, $5.type_dimension, $5.type_index, initializer, *$7 ? 1 : 0); + + if (auto_create_c == false) + $$ = cat_str(7, mm_strdup("/* exec sql type"), mm_strdup($3), mm_strdup("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, mm_strdup("*/")); + else + $$ = cat_str(6, mm_strdup("typedef "), mm_strdup($5.type_str), *$7?mm_strdup("*"):mm_strdup(""), mm_strdup($3), mm_strdup($6.str), mm_strdup(";")); + } + ; + +opt_reference: SQL_REFERENCE { $$ = mm_strdup("reference"); } + | /*EMPTY*/ { $$ = EMPTY; } + ; + +/* + * define the type of one variable for embedded SQL + */ +ECPGVar: SQL_VAR + { + /* reset this variable so we see if there was */ + /* an initializer specified */ + initializer = 0; + } + ColLabel IS var_type opt_array_bounds opt_reference + { + struct variable *p = find_variable($3); + char *dimension = $6.index1; + char *length = $6.index2; + struct ECPGtype * type; + + if (($5.type_enum == ECPGt_struct || + $5.type_enum == ECPGt_union) && + initializer == 1) + mmerror(PARSE_ERROR, ET_ERROR, "initializer not allowed in EXEC SQL VAR command"); + else + { + adjust_array($5.type_enum, &dimension, &length, $5.type_dimension, $5.type_index, *$7?1:0, false); + + switch ($5.type_enum) + { + case ECPGt_struct: + case ECPGt_union: + if (atoi(dimension) < 0) + type = ECPGmake_struct_type(struct_member_list[struct_level], $5.type_enum, $5.type_str, $5.type_sizeof); + else + type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], $5.type_enum, $5.type_str, $5.type_sizeof), dimension); + break; + + case ECPGt_varchar: + case ECPGt_bytea: + if (atoi(dimension) == -1) + type = ECPGmake_simple_type($5.type_enum, length, 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, length, 0), dimension); + break; + + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + if (atoi(dimension) == -1) + type = ECPGmake_simple_type($5.type_enum, length, 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, length, 0), dimension); + break; + + default: + if (atoi(length) >= 0) + mmerror(PARSE_ERROR, ET_ERROR, "multidimensional arrays for simple data types are not supported"); + + if (atoi(dimension) < 0) + type = ECPGmake_simple_type($5.type_enum, mm_strdup("1"), 0); + else + type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, mm_strdup("1"), 0), dimension); + break; + } + + ECPGfree_type(p->type); + p->type = type; + } + + $$ = cat_str(7, mm_strdup("/* exec sql var"), mm_strdup($3), mm_strdup("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, mm_strdup("*/")); + } + ; + +/* + * whenever statement: decide what to do in case of error/no data found + * according to SQL standards we lack: SQLSTATE, CONSTRAINT and SQLEXCEPTION + */ +ECPGWhenever: SQL_WHENEVER SQL_SQLERROR action + { + when_error.code = $3.code; + when_error.command = $3.command; + $$ = cat_str(3, mm_strdup("/* exec sql whenever sqlerror "), $3.str, mm_strdup("; */")); + } + | SQL_WHENEVER NOT SQL_FOUND action + { + when_nf.code = $4.code; + when_nf.command = $4.command; + $$ = cat_str(3, mm_strdup("/* exec sql whenever not found "), $4.str, mm_strdup("; */")); + } + | SQL_WHENEVER SQL_SQLWARNING action + { + when_warn.code = $3.code; + when_warn.command = $3.command; + $$ = cat_str(3, mm_strdup("/* exec sql whenever sql_warning "), $3.str, mm_strdup("; */")); + } + ; + +action : CONTINUE_P + { + $$.code = W_NOTHING; + $$.command = NULL; + $$.str = mm_strdup("continue"); + } + | SQL_SQLPRINT + { + $$.code = W_SQLPRINT; + $$.command = NULL; + $$.str = mm_strdup("sqlprint"); + } + | SQL_STOP + { + $$.code = W_STOP; + $$.command = NULL; + $$.str = mm_strdup("stop"); + } + | SQL_GOTO name + { + $$.code = W_GOTO; + $$.command = mm_strdup($2); + $$.str = cat2_str(mm_strdup("goto "), $2); + } + | SQL_GO TO name + { + $$.code = W_GOTO; + $$.command = mm_strdup($3); + $$.str = cat2_str(mm_strdup("goto "), $3); + } + | DO name '(' c_args ')' + { + $$.code = W_DO; + $$.command = cat_str(4, $2, mm_strdup("("), $4, mm_strdup(")")); + $$.str = cat2_str(mm_strdup("do"), mm_strdup($$.command)); + } + | DO SQL_BREAK + { + $$.code = W_BREAK; + $$.command = NULL; + $$.str = mm_strdup("break"); + } + | DO CONTINUE_P + { + $$.code = W_CONTINUE; + $$.command = NULL; + $$.str = mm_strdup("continue"); + } + | CALL name '(' c_args ')' + { + $$.code = W_DO; + $$.command = cat_str(4, $2, mm_strdup("("), $4, mm_strdup(")")); + $$.str = cat2_str(mm_strdup("call"), mm_strdup($$.command)); + } + | CALL name + { + $$.code = W_DO; + $$.command = cat2_str($2, mm_strdup("()")); + $$.str = cat2_str(mm_strdup("call"), mm_strdup($$.command)); + } + ; + +/* some other stuff for ecpg */ + +/* additional unreserved keywords */ +ECPGKeywords: ECPGKeywords_vanames { $$ = $1; } + | ECPGKeywords_rest { $$ = $1; } + ; + +ECPGKeywords_vanames: SQL_BREAK { $$ = mm_strdup("break"); } + | SQL_CARDINALITY { $$ = mm_strdup("cardinality"); } + | SQL_COUNT { $$ = mm_strdup("count"); } + | SQL_DATETIME_INTERVAL_CODE { $$ = mm_strdup("datetime_interval_code"); } + | SQL_DATETIME_INTERVAL_PRECISION { $$ = mm_strdup("datetime_interval_precision"); } + | SQL_FOUND { $$ = mm_strdup("found"); } + | SQL_GO { $$ = mm_strdup("go"); } + | SQL_GOTO { $$ = mm_strdup("goto"); } + | SQL_IDENTIFIED { $$ = mm_strdup("identified"); } + | SQL_INDICATOR { $$ = mm_strdup("indicator"); } + | SQL_KEY_MEMBER { $$ = mm_strdup("key_member"); } + | SQL_LENGTH { $$ = mm_strdup("length"); } + | SQL_NULLABLE { $$ = mm_strdup("nullable"); } + | SQL_OCTET_LENGTH { $$ = mm_strdup("octet_length"); } + | SQL_RETURNED_LENGTH { $$ = mm_strdup("returned_length"); } + | SQL_RETURNED_OCTET_LENGTH { $$ = mm_strdup("returned_octet_length"); } + | SQL_SCALE { $$ = mm_strdup("scale"); } + | SQL_SECTION { $$ = mm_strdup("section"); } + | SQL_SQLERROR { $$ = mm_strdup("sqlerror"); } + | SQL_SQLPRINT { $$ = mm_strdup("sqlprint"); } + | SQL_SQLWARNING { $$ = mm_strdup("sqlwarning"); } + | SQL_STOP { $$ = mm_strdup("stop"); } + ; + +ECPGKeywords_rest: SQL_CONNECT { $$ = mm_strdup("connect"); } + | SQL_DESCRIBE { $$ = mm_strdup("describe"); } + | SQL_DISCONNECT { $$ = mm_strdup("disconnect"); } + | SQL_OPEN { $$ = mm_strdup("open"); } + | SQL_VAR { $$ = mm_strdup("var"); } + | SQL_WHENEVER { $$ = mm_strdup("whenever"); } + ; + +/* additional keywords that can be SQL type names (but not ECPGColLabels) */ +ECPGTypeName: SQL_BOOL { $$ = mm_strdup("bool"); } + | SQL_LONG { $$ = mm_strdup("long"); } + | SQL_OUTPUT { $$ = mm_strdup("output"); } + | SQL_SHORT { $$ = mm_strdup("short"); } + | SQL_STRUCT { $$ = mm_strdup("struct"); } + | SQL_SIGNED { $$ = mm_strdup("signed"); } + | SQL_UNSIGNED { $$ = mm_strdup("unsigned"); } + ; + +symbol: ColLabel { $$ = $1; } + ; + +ECPGColId: ecpg_ident { $$ = $1; } + | unreserved_keyword { $$ = $1; } + | col_name_keyword { $$ = $1; } + | ECPGunreserved_interval { $$ = $1; } + | ECPGKeywords { $$ = $1; } + | ECPGCKeywords { $$ = $1; } + | CHAR_P { $$ = mm_strdup("char"); } + | VALUES { $$ = mm_strdup("values"); } + ; + +/* + * Name classification hierarchy. + * + * These productions should match those in the core grammar, except that + * we use all_unreserved_keyword instead of unreserved_keyword, and + * where possible include ECPG keywords as well as core keywords. + */ + +/* Column identifier --- names that can be column, table, etc names. + */ +ColId: ecpg_ident { $$ = $1; } + | all_unreserved_keyword { $$ = $1; } + | col_name_keyword { $$ = $1; } + | ECPGKeywords { $$ = $1; } + | ECPGCKeywords { $$ = $1; } + | CHAR_P { $$ = mm_strdup("char"); } + | VALUES { $$ = mm_strdup("values"); } + ; + +/* Type/function identifier --- names that can be type or function names. + */ +type_function_name: ecpg_ident { $$ = $1; } + | all_unreserved_keyword { $$ = $1; } + | type_func_name_keyword { $$ = $1; } + | ECPGKeywords { $$ = $1; } + | ECPGCKeywords { $$ = $1; } + | ECPGTypeName { $$ = $1; } + ; + +/* Column label --- allowed labels in "AS" clauses. + * This presently includes *all* Postgres keywords. + */ +ColLabel: ECPGColLabel { $$ = $1; } + | ECPGTypeName { $$ = $1; } + | CHAR_P { $$ = mm_strdup("char"); } + | CURRENT_P { $$ = mm_strdup("current"); } + | INPUT_P { $$ = mm_strdup("input"); } + | INT_P { $$ = mm_strdup("int"); } + | TO { $$ = mm_strdup("to"); } + | UNION { $$ = mm_strdup("union"); } + | VALUES { $$ = mm_strdup("values"); } + | ECPGCKeywords { $$ = $1; } + | ECPGunreserved_interval { $$ = $1; } + ; + +ECPGColLabel: ECPGColLabelCommon { $$ = $1; } + | unreserved_keyword { $$ = $1; } + | reserved_keyword { $$ = $1; } + | ECPGKeywords_rest { $$ = $1; } + | CONNECTION { $$ = mm_strdup("connection"); } + ; + +ECPGColLabelCommon: ecpg_ident { $$ = $1; } + | col_name_keyword { $$ = $1; } + | type_func_name_keyword { $$ = $1; } + | ECPGKeywords_vanames { $$ = $1; } + ; + +ECPGCKeywords: S_AUTO { $$ = mm_strdup("auto"); } + | S_CONST { $$ = mm_strdup("const"); } + | S_EXTERN { $$ = mm_strdup("extern"); } + | S_REGISTER { $$ = mm_strdup("register"); } + | S_STATIC { $$ = mm_strdup("static"); } + | S_TYPEDEF { $$ = mm_strdup("typedef"); } + | S_VOLATILE { $$ = mm_strdup("volatile"); } + ; + +/* "Unreserved" keywords --- available for use as any kind of name. + */ + +/* + * The following symbols must be excluded from ECPGColLabel and directly + * included into ColLabel to enable C variables to get names from ECPGColLabel: + * DAY_P, HOUR_P, MINUTE_P, MONTH_P, SECOND_P, YEAR_P. + * + * We also have to exclude CONNECTION, CURRENT, and INPUT for various reasons. + * CONNECTION can be added back in all_unreserved_keyword, but CURRENT and + * INPUT are reserved for ecpg purposes. + * + * The mentioned exclusions are done by $replace_line settings in parse.pl. + */ +all_unreserved_keyword: unreserved_keyword { $$ = $1; } + | ECPGunreserved_interval { $$ = $1; } + | CONNECTION { $$ = mm_strdup("connection"); } + ; + +ECPGunreserved_interval: DAY_P { $$ = mm_strdup("day"); } + | HOUR_P { $$ = mm_strdup("hour"); } + | MINUTE_P { $$ = mm_strdup("minute"); } + | MONTH_P { $$ = mm_strdup("month"); } + | SECOND_P { $$ = mm_strdup("second"); } + | YEAR_P { $$ = mm_strdup("year"); } + ; + + +into_list : coutputvariable | into_list ',' coutputvariable + ; + +ecpgstart: SQL_START { + reset_variables(); + pacounter = 1; + } + ; + +c_args: /*EMPTY*/ { $$ = EMPTY; } + | c_list { $$ = $1; } + ; + +coutputvariable: cvariable indicator + { add_variable_to_head(&argsresult, find_variable($1), find_variable($2)); } + | cvariable + { add_variable_to_head(&argsresult, find_variable($1), &no_indicator); } + ; + + +civarind: cvariable indicator + { + if (find_variable($2)->type->type == ECPGt_array) + mmerror(PARSE_ERROR, ET_ERROR, "arrays of indicators are not allowed on input"); + + add_variable_to_head(&argsinsert, find_variable($1), find_variable($2)); + $$ = create_questionmarks($1, false); + } + ; + +char_civar: char_variable + { + char *ptr = strstr($1, ".arr"); + + if (ptr) /* varchar, we need the struct name here, not the struct element */ + *ptr = '\0'; + add_variable_to_head(&argsinsert, find_variable($1), &no_indicator); + $$ = $1; + } + ; + +civar: cvariable + { + add_variable_to_head(&argsinsert, find_variable($1), &no_indicator); + $$ = create_questionmarks($1, false); + } + ; + +indicator: cvariable { check_indicator((find_variable($1))->type); $$ = $1; } + | SQL_INDICATOR cvariable { check_indicator((find_variable($2))->type); $$ = $2; } + | SQL_INDICATOR name { check_indicator((find_variable($2))->type); $$ = $2; } + ; + +cvariable: CVARIABLE + { + /* As long as multidimensional arrays are not implemented we have to check for those here */ + char *ptr = $1; + int brace_open=0, brace = false; + + for (; *ptr; ptr++) + { + switch (*ptr) + { + case '[': + if (brace) + mmfatal(PARSE_ERROR, "multidimensional arrays for simple data types are not supported"); + brace_open++; + break; + case ']': + brace_open--; + if (brace_open == 0) + brace = true; + break; + case '\t': + case ' ': + break; + default: + if (brace_open == 0) + brace = false; + break; + } + } + $$ = $1; + } + ; + +ecpg_param: PARAM { $$ = make_name(); } ; + +ecpg_bconst: BCONST { $$ = $1; } ; + +ecpg_fconst: FCONST { $$ = make_name(); } ; + +ecpg_sconst: SCONST { $$ = $1; } ; + +ecpg_xconst: XCONST { $$ = $1; } ; + +ecpg_ident: IDENT { $$ = $1; } + | CSTRING { $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); } + ; + +quoted_ident_stringvar: name + { $$ = make3_str(mm_strdup("\""), $1, mm_strdup("\"")); } + | char_variable + { $$ = make3_str(mm_strdup("("), $1, mm_strdup(")")); } + ; + +/* + * C stuff + */ + +c_stuff_item: c_anything { $$ = $1; } + | '(' ')' { $$ = mm_strdup("()"); } + | '(' c_stuff ')' + { $$ = cat_str(3, mm_strdup("("), $2, mm_strdup(")")); } + ; + +c_stuff: c_stuff_item { $$ = $1; } + | c_stuff c_stuff_item + { $$ = cat2_str($1, $2); } + ; + +c_list: c_term { $$ = $1; } + | c_list ',' c_term { $$ = cat_str(3, $1, mm_strdup(","), $3); } + ; + +c_term: c_stuff { $$ = $1; } + | '{' c_list '}' { $$ = cat_str(3, mm_strdup("{"), $2, mm_strdup("}")); } + ; + +c_thing: c_anything { $$ = $1; } + | '(' { $$ = mm_strdup("("); } + | ')' { $$ = mm_strdup(")"); } + | ',' { $$ = mm_strdup(","); } + | ';' { $$ = mm_strdup(";"); } + ; + +c_anything: ecpg_ident { $$ = $1; } + | Iconst { $$ = $1; } + | ecpg_fconst { $$ = $1; } + | ecpg_sconst { $$ = $1; } + | '*' { $$ = mm_strdup("*"); } + | '+' { $$ = mm_strdup("+"); } + | '-' { $$ = mm_strdup("-"); } + | '/' { $$ = mm_strdup("/"); } + | '%' { $$ = mm_strdup("%"); } + | NULL_P { $$ = mm_strdup("NULL"); } + | S_ADD { $$ = mm_strdup("+="); } + | S_AND { $$ = mm_strdup("&&"); } + | S_ANYTHING { $$ = make_name(); } + | S_AUTO { $$ = mm_strdup("auto"); } + | S_CONST { $$ = mm_strdup("const"); } + | S_DEC { $$ = mm_strdup("--"); } + | S_DIV { $$ = mm_strdup("/="); } + | S_DOTPOINT { $$ = mm_strdup(".*"); } + | S_EQUAL { $$ = mm_strdup("=="); } + | S_EXTERN { $$ = mm_strdup("extern"); } + | S_INC { $$ = mm_strdup("++"); } + | S_LSHIFT { $$ = mm_strdup("<<"); } + | S_MEMBER { $$ = mm_strdup("->"); } + | S_MEMPOINT { $$ = mm_strdup("->*"); } + | S_MOD { $$ = mm_strdup("%="); } + | S_MUL { $$ = mm_strdup("*="); } + | S_NEQUAL { $$ = mm_strdup("!="); } + | S_OR { $$ = mm_strdup("||"); } + | S_REGISTER { $$ = mm_strdup("register"); } + | S_RSHIFT { $$ = mm_strdup(">>"); } + | S_STATIC { $$ = mm_strdup("static"); } + | S_SUB { $$ = mm_strdup("-="); } + | S_TYPEDEF { $$ = mm_strdup("typedef"); } + | S_VOLATILE { $$ = mm_strdup("volatile"); } + | SQL_BOOL { $$ = mm_strdup("bool"); } + | ENUM_P { $$ = mm_strdup("enum"); } + | HOUR_P { $$ = mm_strdup("hour"); } + | INT_P { $$ = mm_strdup("int"); } + | SQL_LONG { $$ = mm_strdup("long"); } + | MINUTE_P { $$ = mm_strdup("minute"); } + | MONTH_P { $$ = mm_strdup("month"); } + | SECOND_P { $$ = mm_strdup("second"); } + | SQL_SHORT { $$ = mm_strdup("short"); } + | SQL_SIGNED { $$ = mm_strdup("signed"); } + | SQL_STRUCT { $$ = mm_strdup("struct"); } + | SQL_UNSIGNED { $$ = mm_strdup("unsigned"); } + | YEAR_P { $$ = mm_strdup("year"); } + | CHAR_P { $$ = mm_strdup("char"); } + | FLOAT_P { $$ = mm_strdup("float"); } + | TO { $$ = mm_strdup("to"); } + | UNION { $$ = mm_strdup("union"); } + | VARCHAR { $$ = mm_strdup("varchar"); } + | '[' { $$ = mm_strdup("["); } + | ']' { $$ = mm_strdup("]"); } + | '=' { $$ = mm_strdup("="); } + | ':' { $$ = mm_strdup(":"); } + ; + +DeallocateStmt: DEALLOCATE prepared_name { check_declared_list($2); $$ = $2; } + | DEALLOCATE PREPARE prepared_name { check_declared_list($3); $$ = $3; } + | DEALLOCATE ALL { $$ = mm_strdup("all"); } + | DEALLOCATE PREPARE ALL { $$ = mm_strdup("all"); } + ; + +Iresult: Iconst { $$ = $1; } + | '(' Iresult ')' { $$ = cat_str(3, mm_strdup("("), $2, mm_strdup(")")); } + | Iresult '+' Iresult { $$ = cat_str(3, $1, mm_strdup("+"), $3); } + | Iresult '-' Iresult { $$ = cat_str(3, $1, mm_strdup("-"), $3); } + | Iresult '*' Iresult { $$ = cat_str(3, $1, mm_strdup("*"), $3); } + | Iresult '/' Iresult { $$ = cat_str(3, $1, mm_strdup("/"), $3); } + | Iresult '%' Iresult { $$ = cat_str(3, $1, mm_strdup("%"), $3); } + | ecpg_sconst { $$ = $1; } + | ColId { $$ = $1; } + | ColId '(' var_type ')' { if (pg_strcasecmp($1, "sizeof") != 0) + mmerror(PARSE_ERROR, ET_ERROR, "operator not allowed in variable definition"); + else + $$ = cat_str(4, $1, mm_strdup("("), $3.type_str, mm_strdup(")")); + } + ; + +execute_rest: /* EMPTY */ { $$ = EMPTY; } + | ecpg_using opt_ecpg_into { $$ = EMPTY; } + | ecpg_into ecpg_using { $$ = EMPTY; } + | ecpg_into { $$ = EMPTY; } + ; + +ecpg_into: INTO into_list { $$ = EMPTY; } + | into_descriptor { $$ = $1; } + ; + +opt_ecpg_into: /* EMPTY */ { $$ = EMPTY; } + | ecpg_into { $$ = $1; } + ; + +ecpg_fetch_into: ecpg_into { $$ = $1; } + | using_descriptor + { + struct variable *var; + + var = argsinsert->variable; + remove_variable_from_list(&argsinsert, var); + add_variable_to_head(&argsresult, var, &no_indicator); + $$ = $1; + } + ; + +opt_ecpg_fetch_into: /* EMPTY */ { $$ = EMPTY; } + | ecpg_fetch_into { $$ = $1; } + ; + +%% + +void base_yyerror(const char *error) +{ + /* translator: %s is typically the translation of "syntax error" */ + mmerror(PARSE_ERROR, ET_ERROR, "%s at or near \"%s\"", + _(error), token_start ? token_start : base_yytext); +} + +void parser_init(void) +{ + /* This function is empty. It only exists for compatibility with the backend parser right now. */ +} diff --git a/src/interfaces/ecpg/preproc/preproc_extern.h b/src/interfaces/ecpg/preproc/preproc_extern.h new file mode 100644 index 0000000..992797b --- /dev/null +++ b/src/interfaces/ecpg/preproc/preproc_extern.h @@ -0,0 +1,128 @@ +/* src/interfaces/ecpg/preproc/preproc_extern.h */ + +#ifndef _ECPG_PREPROC_EXTERN_H +#define _ECPG_PREPROC_EXTERN_H + +#include "common/keywords.h" +#include "type.h" + +#ifndef CHAR_BIT +#include +#endif + +/* defines */ + +#define STRUCT_DEPTH 128 +#define EMPTY mm_strdup("") + +/* variables */ + +extern bool autocommit, + auto_create_c, + system_includes, + force_indicator, + questionmarks, + regression_mode, + auto_prepare; +extern int braces_open, + ret_value, + struct_level, + ecpg_internal_var; +extern char *current_function; +extern char *descriptor_name; +extern char *connection; +extern char *input_filename; +extern char *base_yytext, + *token_start; + +#ifdef YYDEBUG +extern int base_yydebug; +#endif +extern int base_yylineno; +extern FILE *base_yyin, + *base_yyout; +extern char *output_filename; + +extern struct _include_path *include_paths; +extern struct cursor *cur; +extern struct typedefs *types; +extern struct _defines *defines; +extern struct declared_list *g_declared_list; +extern struct ECPGtype ecpg_no_indicator; +extern struct variable no_indicator; +extern struct arguments *argsinsert; +extern struct arguments *argsresult; +extern struct when when_error, + when_nf, + when_warn; +extern struct ECPGstruct_member *struct_member_list[STRUCT_DEPTH]; + +/* Globals from keywords.c */ +extern const uint16 SQLScanKeywordTokens[]; + +/* functions */ + +extern const char *get_dtype(enum ECPGdtype); +extern void lex_init(void); +extern void output_line_number(void); +extern void output_statement(char *, int, enum ECPG_statement_type); +extern void output_prepare_statement(char *, char *); +extern void output_deallocate_prepare_statement(char *); +extern void output_simple_statement(char *, int); +extern char *hashline_number(void); +extern int base_yyparse(void); +extern int base_yylex(void); +extern void base_yyerror(const char *); +extern void *mm_alloc(size_t); +extern char *mm_strdup(const char *); +extern void mmerror(int errorcode, enum errortype type, const char *error,...) pg_attribute_printf(3, 4); +extern void mmfatal(int errorcode, const char *error,...) pg_attribute_printf(2, 3) pg_attribute_noreturn(); +extern void output_get_descr_header(char *); +extern void output_get_descr(char *, char *); +extern void output_set_descr_header(char *); +extern void output_set_descr(char *, char *); +extern void push_assignment(char *, enum ECPGdtype); +extern struct variable *find_variable(char *); +extern void whenever_action(int); +extern void add_descriptor(char *, char *); +extern void drop_descriptor(char *, char *); +extern struct descriptor *lookup_descriptor(char *, char *); +extern struct variable *descriptor_variable(const char *name, int input); +extern struct variable *sqlda_variable(const char *name); +extern void add_variable_to_head(struct arguments **, struct variable *, struct variable *); +extern void add_variable_to_tail(struct arguments **, struct variable *, struct variable *); +extern void remove_variable_from_list(struct arguments **list, struct variable *var); +extern void dump_variables(struct arguments *, int); +extern struct typedefs *get_typedef(char *); +extern void adjust_array(enum ECPGttype, char **, char **, char *, char *, int, bool); +extern void reset_variables(void); +extern void check_indicator(struct ECPGtype *); +extern void remove_typedefs(int); +extern void remove_variables(int); +extern struct variable *new_variable(const char *, struct ECPGtype *, int); +extern int ScanCKeywordLookup(const char *text); +extern int ScanECPGKeywordLookup(const char *text); +extern void parser_init(void); +extern int filtered_base_yylex(void); + +/* return codes */ + +#define ILLEGAL_OPTION 1 +#define NO_INCLUDE_FILE 2 +#define PARSE_ERROR 3 +#define INDICATOR_NOT_ARRAY 4 +#define OUT_OF_MEMORY 5 +#define INDICATOR_NOT_STRUCT 6 +#define INDICATOR_NOT_SIMPLE 7 + +enum COMPAT_MODE +{ + ECPG_COMPAT_PGSQL = 0, ECPG_COMPAT_INFORMIX, ECPG_COMPAT_INFORMIX_SE, ECPG_COMPAT_ORACLE +}; +extern enum COMPAT_MODE compat; + +#define INFORMIX_MODE (compat == ECPG_COMPAT_INFORMIX || compat == ECPG_COMPAT_INFORMIX_SE) +#define ORACLE_MODE (compat == ECPG_COMPAT_ORACLE) + + +#endif /* _ECPG_PREPROC_EXTERN_H */ diff --git a/src/interfaces/ecpg/preproc/type.c b/src/interfaces/ecpg/preproc/type.c new file mode 100644 index 0000000..d4b4da5 --- /dev/null +++ b/src/interfaces/ecpg/preproc/type.c @@ -0,0 +1,748 @@ +/* src/interfaces/ecpg/preproc/type.c */ + +#include "postgres_fe.h" + +#include "preproc_extern.h" + +#define indicator_set ind_type != NULL && ind_type->type != ECPGt_NO_INDICATOR + +static struct ECPGstruct_member struct_no_indicator = {"no_indicator", &ecpg_no_indicator, NULL}; + +/* malloc + error check */ +void * +mm_alloc(size_t size) +{ + void *ptr = malloc(size); + + if (ptr == NULL) + mmfatal(OUT_OF_MEMORY, "out of memory"); + + return ptr; +} + +/* strdup + error check */ +char * +mm_strdup(const char *string) +{ + char *new = strdup(string); + + if (new == NULL) + mmfatal(OUT_OF_MEMORY, "out of memory"); + + return new; +} + +/* duplicate memberlist */ +struct ECPGstruct_member * +ECPGstruct_member_dup(struct ECPGstruct_member *rm) +{ + struct ECPGstruct_member *new = NULL; + + while (rm) + { + struct ECPGtype *type; + + switch (rm->type->type) + { + case ECPGt_struct: + case ECPGt_union: + type = ECPGmake_struct_type(rm->type->u.members, rm->type->type, rm->type->type_name, rm->type->struct_sizeof); + break; + case ECPGt_array: + + /* + * if this array does contain a struct again, we have to + * create the struct too + */ + if (rm->type->u.element->type == ECPGt_struct || rm->type->u.element->type == ECPGt_union) + type = ECPGmake_struct_type(rm->type->u.element->u.members, rm->type->u.element->type, rm->type->u.element->type_name, rm->type->u.element->struct_sizeof); + else + type = ECPGmake_array_type(ECPGmake_simple_type(rm->type->u.element->type, rm->type->u.element->size, rm->type->u.element->counter), rm->type->size); + break; + default: + type = ECPGmake_simple_type(rm->type->type, rm->type->size, rm->type->counter); + break; + } + + ECPGmake_struct_member(rm->name, type, &new); + + rm = rm->next; + } + + return new; +} + +/* The NAME argument is copied. The type argument is preserved as a pointer. */ +void +ECPGmake_struct_member(const char *name, struct ECPGtype *type, struct ECPGstruct_member **start) +{ + struct ECPGstruct_member *ptr, + *ne = + (struct ECPGstruct_member *) mm_alloc(sizeof(struct ECPGstruct_member)); + + ne->name = mm_strdup(name); + ne->type = type; + ne->next = NULL; + + for (ptr = *start; ptr && ptr->next; ptr = ptr->next); + + if (ptr) + ptr->next = ne; + else + *start = ne; +} + +struct ECPGtype * +ECPGmake_simple_type(enum ECPGttype type, char *size, int counter) +{ + struct ECPGtype *ne = (struct ECPGtype *) mm_alloc(sizeof(struct ECPGtype)); + + ne->type = type; + ne->type_name = NULL; + ne->size = size; + ne->u.element = NULL; + ne->struct_sizeof = NULL; + ne->counter = counter; /* only needed for varchar and bytea */ + + return ne; +} + +struct ECPGtype * +ECPGmake_array_type(struct ECPGtype *type, char *size) +{ + struct ECPGtype *ne = ECPGmake_simple_type(ECPGt_array, size, 0); + + ne->u.element = type; + + return ne; +} + +struct ECPGtype * +ECPGmake_struct_type(struct ECPGstruct_member *rm, enum ECPGttype type, char *type_name, char *struct_sizeof) +{ + struct ECPGtype *ne = ECPGmake_simple_type(type, mm_strdup("1"), 0); + + ne->type_name = mm_strdup(type_name); + ne->u.members = ECPGstruct_member_dup(rm); + ne->struct_sizeof = struct_sizeof; + + return ne; +} + +static const char * +get_type(enum ECPGttype type) +{ + switch (type) + { + case ECPGt_char: + return "ECPGt_char"; + break; + case ECPGt_unsigned_char: + return "ECPGt_unsigned_char"; + break; + case ECPGt_short: + return "ECPGt_short"; + break; + case ECPGt_unsigned_short: + return "ECPGt_unsigned_short"; + break; + case ECPGt_int: + return "ECPGt_int"; + break; + case ECPGt_unsigned_int: + return "ECPGt_unsigned_int"; + break; + case ECPGt_long: + return "ECPGt_long"; + break; + case ECPGt_unsigned_long: + return "ECPGt_unsigned_long"; + break; + case ECPGt_long_long: + return "ECPGt_long_long"; + break; + case ECPGt_unsigned_long_long: + return "ECPGt_unsigned_long_long"; + break; + case ECPGt_float: + return "ECPGt_float"; + break; + case ECPGt_double: + return "ECPGt_double"; + break; + case ECPGt_bool: + return "ECPGt_bool"; + break; + case ECPGt_varchar: + return "ECPGt_varchar"; + case ECPGt_bytea: + return "ECPGt_bytea"; + case ECPGt_NO_INDICATOR: /* no indicator */ + return "ECPGt_NO_INDICATOR"; + break; + case ECPGt_char_variable: /* string that should not be quoted */ + return "ECPGt_char_variable"; + break; + case ECPGt_const: /* constant string quoted */ + return "ECPGt_const"; + break; + case ECPGt_decimal: + return "ECPGt_decimal"; + break; + case ECPGt_numeric: + return "ECPGt_numeric"; + break; + case ECPGt_interval: + return "ECPGt_interval"; + break; + case ECPGt_descriptor: + return "ECPGt_descriptor"; + break; + case ECPGt_sqlda: + return "ECPGt_sqlda"; + break; + case ECPGt_date: + return "ECPGt_date"; + break; + case ECPGt_timestamp: + return "ECPGt_timestamp"; + break; + case ECPGt_string: + return "ECPGt_string"; + break; + default: + mmerror(PARSE_ERROR, ET_ERROR, "unrecognized variable type code %d", type); + } + + return NULL; +} + +/* Dump a type. + The type is dumped as: + type-tag - enum ECPGttype + reference-to-variable - char * + size - long size of this field (if varchar) + arrsize - long number of elements in the arr + offset - offset to the next element + Where: + type-tag is one of the simple types or varchar. + reference-to-variable can be a reference to a struct element. + arrsize is the size of the array in case of array fetches. Otherwise 0. + size is the maxsize in case it is a varchar. Otherwise it is the size of + the variable (required to do array fetches of structs). + */ +static void ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type, + char *varcharsize, + char *arrsize, const char *size, const char *prefix, int); +static void ECPGdump_a_struct(FILE *o, const char *name, const char *ind_name, char *arrsize, + struct ECPGtype *type, struct ECPGtype *ind_type, const char *prefix, const char *ind_prefix); + +void +ECPGdump_a_type(FILE *o, const char *name, struct ECPGtype *type, const int brace_level, + const char *ind_name, struct ECPGtype *ind_type, const int ind_brace_level, + const char *prefix, const char *ind_prefix, + char *arr_str_size, const char *struct_sizeof, + const char *ind_struct_sizeof) +{ + struct variable *var; + + if (type->type != ECPGt_descriptor && type->type != ECPGt_sqlda && + type->type != ECPGt_char_variable && type->type != ECPGt_const && + brace_level >= 0) + { + char *str; + + str = mm_strdup(name); + var = find_variable(str); + free(str); + + if ((var->type->type != type->type) || + (var->type->type_name && !type->type_name) || + (!var->type->type_name && type->type_name) || + (var->type->type_name && type->type_name && strcmp(var->type->type_name, type->type_name) != 0)) + mmerror(PARSE_ERROR, ET_ERROR, "variable \"%s\" is hidden by a local variable of a different type", name); + else if (var->brace_level != brace_level) + mmerror(PARSE_ERROR, ET_WARNING, "variable \"%s\" is hidden by a local variable", name); + + if (ind_name && ind_type && ind_type->type != ECPGt_NO_INDICATOR && ind_brace_level >= 0) + { + str = mm_strdup(ind_name); + var = find_variable(str); + free(str); + + if ((var->type->type != ind_type->type) || + (var->type->type_name && !ind_type->type_name) || + (!var->type->type_name && ind_type->type_name) || + (var->type->type_name && ind_type->type_name && strcmp(var->type->type_name, ind_type->type_name) != 0)) + mmerror(PARSE_ERROR, ET_ERROR, "indicator variable \"%s\" is hidden by a local variable of a different type", ind_name); + else if (var->brace_level != ind_brace_level) + mmerror(PARSE_ERROR, ET_WARNING, "indicator variable \"%s\" is hidden by a local variable", ind_name); + } + } + + switch (type->type) + { + case ECPGt_array: + if (indicator_set && ind_type->type != ECPGt_array) + mmfatal(INDICATOR_NOT_ARRAY, "indicator for array/pointer has to be array/pointer"); + switch (type->u.element->type) + { + case ECPGt_array: + mmerror(PARSE_ERROR, ET_ERROR, "nested arrays are not supported (except strings)"); /* array of array */ + break; + case ECPGt_struct: + case ECPGt_union: + ECPGdump_a_struct(o, name, + ind_name, + type->size, + type->u.element, + (ind_type == NULL) ? NULL : ((ind_type->type == ECPGt_NO_INDICATOR) ? ind_type : ind_type->u.element), + prefix, ind_prefix); + break; + default: + if (!IS_SIMPLE_TYPE(type->u.element->type)) + base_yyerror("internal error: unknown datatype, please report this to <" PACKAGE_BUGREPORT ">"); + + ECPGdump_a_simple(o, name, + type->u.element->type, + type->u.element->size, type->size, struct_sizeof ? struct_sizeof : NULL, + prefix, type->u.element->counter); + + if (ind_type != NULL) + { + if (ind_type->type == ECPGt_NO_INDICATOR) + { + char *str_neg_one = mm_strdup("-1"); + + ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, str_neg_one, NULL, ind_prefix, 0); + free(str_neg_one); + } + else + { + ECPGdump_a_simple(o, ind_name, ind_type->u.element->type, + ind_type->u.element->size, ind_type->size, NULL, ind_prefix, 0); + } + } + } + break; + case ECPGt_struct: + { + char *str_one = mm_strdup("1"); + + if (indicator_set && ind_type->type != ECPGt_struct) + mmfatal(INDICATOR_NOT_STRUCT, "indicator for struct has to be a struct"); + + ECPGdump_a_struct(o, name, ind_name, str_one, type, ind_type, prefix, ind_prefix); + free(str_one); + } + break; + case ECPGt_union: /* cannot dump a complete union */ + base_yyerror("type of union has to be specified"); + break; + case ECPGt_char_variable: + { + /* + * Allocate for each, as there are code-paths where the values + * get stomped on. + */ + char *str_varchar_one = mm_strdup("1"); + char *str_arr_one = mm_strdup("1"); + char *str_neg_one = mm_strdup("-1"); + + if (indicator_set && (ind_type->type == ECPGt_struct || ind_type->type == ECPGt_array)) + mmfatal(INDICATOR_NOT_SIMPLE, "indicator for simple data type has to be simple"); + + ECPGdump_a_simple(o, name, type->type, str_varchar_one, (arr_str_size && strcmp(arr_str_size, "0") != 0) ? arr_str_size : str_arr_one, struct_sizeof, prefix, 0); + if (ind_type != NULL) + ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, (arr_str_size && strcmp(arr_str_size, "0") != 0) ? arr_str_size : str_neg_one, ind_struct_sizeof, ind_prefix, 0); + + free(str_varchar_one); + free(str_arr_one); + free(str_neg_one); + } + break; + case ECPGt_descriptor: + { + /* + * Allocate for each, as there are code-paths where the values + * get stomped on. + */ + char *str_neg_one = mm_strdup("-1"); + char *ind_type_neg_one = mm_strdup("-1"); + + if (indicator_set && (ind_type->type == ECPGt_struct || ind_type->type == ECPGt_array)) + mmfatal(INDICATOR_NOT_SIMPLE, "indicator for simple data type has to be simple"); + + ECPGdump_a_simple(o, name, type->type, NULL, str_neg_one, NULL, prefix, 0); + if (ind_type != NULL) + ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, ind_type_neg_one, NULL, ind_prefix, 0); + + free(str_neg_one); + free(ind_type_neg_one); + } + break; + default: + { + /* + * Allocate for each, as there are code-paths where the values + * get stomped on. + */ + char *str_neg_one = mm_strdup("-1"); + char *ind_type_neg_one = mm_strdup("-1"); + + if (indicator_set && (ind_type->type == ECPGt_struct || ind_type->type == ECPGt_array)) + mmfatal(INDICATOR_NOT_SIMPLE, "indicator for simple data type has to be simple"); + + ECPGdump_a_simple(o, name, type->type, type->size, (arr_str_size && strcmp(arr_str_size, "0") != 0) ? arr_str_size : str_neg_one, struct_sizeof, prefix, type->counter); + if (ind_type != NULL) + ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, (arr_str_size && strcmp(arr_str_size, "0") != 0) ? arr_str_size : ind_type_neg_one, ind_struct_sizeof, ind_prefix, 0); + + free(str_neg_one); + free(ind_type_neg_one); + } + break; + } +} + + +/* If size is NULL, then the offset is 0, if not use size as a + string, it represents the offset needed if we are in an array of structs. */ +static void +ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type, + char *varcharsize, + char *arrsize, + const char *size, + const char *prefix, + int counter) +{ + if (type == ECPGt_NO_INDICATOR) + fprintf(o, "\n\tECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, "); + else if (type == ECPGt_descriptor) + /* remember that name here already contains quotes (if needed) */ + fprintf(o, "\n\tECPGt_descriptor, %s, 1L, 1L, 1L, ", name); + else if (type == ECPGt_sqlda) + fprintf(o, "\n\tECPGt_sqlda, &%s, 0L, 0L, 0L, ", name); + else + { + char *variable = (char *) mm_alloc(strlen(name) + ((prefix == NULL) ? 0 : strlen(prefix)) + 4); + char *offset = (char *) mm_alloc(strlen(name) + strlen("sizeof(struct varchar_)") + 1 + strlen(varcharsize) + sizeof(int) * CHAR_BIT * 10 / 3); + char *struct_name; + + switch (type) + { + /* + * we have to use the & operator except for arrays and + * pointers + */ + + case ECPGt_varchar: + case ECPGt_bytea: + + /* + * we have to use the pointer except for arrays with given + * bounds + */ + if (((atoi(arrsize) > 0) || + (atoi(arrsize) == 0 && strcmp(arrsize, "0") != 0)) && + size == NULL) + sprintf(variable, "(%s%s)", prefix ? prefix : "", name); + else + sprintf(variable, "&(%s%s)", prefix ? prefix : "", name); + + /* + * If we created a varchar structure automatically, counter is + * greater than 0. + */ + if (type == ECPGt_varchar) + struct_name = "struct varchar"; + else + struct_name = "struct bytea"; + + if (counter) + sprintf(offset, "sizeof(%s_%d)", struct_name, counter); + else + sprintf(offset, "sizeof(%s)", struct_name); + break; + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_char_variable: + case ECPGt_string: + { + char *sizeof_name = "char"; + + /* + * we have to use the pointer except for arrays with given + * bounds, ecpglib will distinguish between * and [] + */ + if ((atoi(varcharsize) > 1 || + (atoi(arrsize) > 0) || + (atoi(varcharsize) == 0 && strcmp(varcharsize, "0") != 0) || + (atoi(arrsize) == 0 && strcmp(arrsize, "0") != 0)) + && size == NULL) + { + sprintf(variable, "(%s%s)", prefix ? prefix : "", name); + if ((type == ECPGt_char || type == ECPGt_unsigned_char) && + strcmp(varcharsize, "0") == 0) + { + /* + * If this is an array of char *, the offset would + * be sizeof(char *) and not sizeof(char). + */ + sizeof_name = "char *"; + } + } + else + sprintf(variable, "&(%s%s)", prefix ? prefix : "", name); + + sprintf(offset, "(%s)*sizeof(%s)", strcmp(varcharsize, "0") == 0 ? "1" : varcharsize, sizeof_name); + break; + } + case ECPGt_numeric: + + /* + * we have to use a pointer here + */ + sprintf(variable, "&(%s%s)", prefix ? prefix : "", name); + sprintf(offset, "sizeof(numeric)"); + break; + case ECPGt_interval: + + /* + * we have to use a pointer here + */ + sprintf(variable, "&(%s%s)", prefix ? prefix : "", name); + sprintf(offset, "sizeof(interval)"); + break; + case ECPGt_date: + + /* + * we have to use a pointer and translate the variable type + */ + sprintf(variable, "&(%s%s)", prefix ? prefix : "", name); + sprintf(offset, "sizeof(date)"); + break; + case ECPGt_timestamp: + + /* + * we have to use a pointer and translate the variable type + */ + sprintf(variable, "&(%s%s)", prefix ? prefix : "", name); + sprintf(offset, "sizeof(timestamp)"); + break; + case ECPGt_const: + + /* + * just dump the const as string + */ + sprintf(variable, "\"%s\"", name); + sprintf(offset, "strlen(\"%s\")", name); + break; + default: + + /* + * we have to use the pointer except for arrays with given + * bounds + */ + if (((atoi(arrsize) > 0) || + (atoi(arrsize) == 0 && strcmp(arrsize, "0") != 0)) && + size == NULL) + sprintf(variable, "(%s%s)", prefix ? prefix : "", name); + else + sprintf(variable, "&(%s%s)", prefix ? prefix : "", name); + + sprintf(offset, "sizeof(%s)", ecpg_type_name(type)); + break; + } + + /* + * Array size would be -1 for addresses of members within structure, + * when pointer to structure is being dumped. + */ + if (atoi(arrsize) < 0 && !size) + strcpy(arrsize, "1"); + + /* + * If size i.e. the size of structure of which this variable is part + * of, that gives the offset to the next element, if required + */ + if (size == NULL || strlen(size) == 0) + fprintf(o, "\n\t%s,%s,(long)%s,(long)%s,%s, ", get_type(type), variable, varcharsize, arrsize, offset); + else + fprintf(o, "\n\t%s,%s,(long)%s,(long)%s,%s, ", get_type(type), variable, varcharsize, arrsize, size); + + free(variable); + free(offset); + } +} + + +/* Penetrate a struct and dump the contents. */ +static void +ECPGdump_a_struct(FILE *o, const char *name, const char *ind_name, char *arrsize, struct ECPGtype *type, struct ECPGtype *ind_type, const char *prefix, const char *ind_prefix) +{ + /* + * If offset is NULL, then this is the first recursive level. If not then + * we are in a struct and the offset is used as offset. + */ + struct ECPGstruct_member *p, + *ind_p = NULL; + char *pbuf = (char *) mm_alloc(strlen(name) + ((prefix == NULL) ? 0 : strlen(prefix)) + 3); + char *ind_pbuf = (char *) mm_alloc(strlen(ind_name) + ((ind_prefix == NULL) ? 0 : strlen(ind_prefix)) + 3); + + if (atoi(arrsize) == 1) + sprintf(pbuf, "%s%s.", prefix ? prefix : "", name); + else + sprintf(pbuf, "%s%s->", prefix ? prefix : "", name); + + prefix = pbuf; + + if (ind_type == &ecpg_no_indicator) + ind_p = &struct_no_indicator; + else if (ind_type != NULL) + { + if (atoi(arrsize) == 1) + sprintf(ind_pbuf, "%s%s.", ind_prefix ? ind_prefix : "", ind_name); + else + sprintf(ind_pbuf, "%s%s->", ind_prefix ? ind_prefix : "", ind_name); + + ind_prefix = ind_pbuf; + ind_p = ind_type->u.members; + } + + for (p = type->u.members; p; p = p->next) + { + ECPGdump_a_type(o, p->name, p->type, -1, + (ind_p != NULL) ? ind_p->name : NULL, + (ind_p != NULL) ? ind_p->type : NULL, + -1, + prefix, ind_prefix, arrsize, type->struct_sizeof, + (ind_p != NULL) ? ind_type->struct_sizeof : NULL); + if (ind_p != NULL && ind_p != &struct_no_indicator) + { + ind_p = ind_p->next; + if (ind_p == NULL && p->next != NULL) + { + mmerror(PARSE_ERROR, ET_WARNING, "indicator struct \"%s\" has too few members", ind_name); + ind_p = &struct_no_indicator; + } + } + } + + if (ind_type != NULL && ind_p != NULL && ind_p != &struct_no_indicator) + { + mmerror(PARSE_ERROR, ET_WARNING, "indicator struct \"%s\" has too many members", ind_name); + } + + free(pbuf); + free(ind_pbuf); +} + +void +ECPGfree_struct_member(struct ECPGstruct_member *rm) +{ + while (rm) + { + struct ECPGstruct_member *p = rm; + + rm = rm->next; + free(p->name); + free(p->type); + free(p); + } +} + +void +ECPGfree_type(struct ECPGtype *type) +{ + if (!IS_SIMPLE_TYPE(type->type)) + { + switch (type->type) + { + case ECPGt_array: + switch (type->u.element->type) + { + case ECPGt_array: + base_yyerror("internal error: found multidimensional array\n"); + break; + case ECPGt_struct: + case ECPGt_union: + /* Array of structs. */ + ECPGfree_struct_member(type->u.element->u.members); + free(type->u.element); + break; + default: + if (!IS_SIMPLE_TYPE(type->u.element->type)) + base_yyerror("internal error: unknown datatype, please report this to <" PACKAGE_BUGREPORT ">"); + + free(type->u.element); + } + break; + case ECPGt_struct: + case ECPGt_union: + ECPGfree_struct_member(type->u.members); + break; + default: + mmerror(PARSE_ERROR, ET_ERROR, "unrecognized variable type code %d", type->type); + break; + } + } + free(type); +} + +const char * +get_dtype(enum ECPGdtype type) +{ + switch (type) + { + case ECPGd_count: + return "ECPGd_countr"; + break; + case ECPGd_data: + return "ECPGd_data"; + break; + case ECPGd_di_code: + return "ECPGd_di_code"; + break; + case ECPGd_di_precision: + return "ECPGd_di_precision"; + break; + case ECPGd_indicator: + return "ECPGd_indicator"; + break; + case ECPGd_key_member: + return "ECPGd_key_member"; + break; + case ECPGd_length: + return "ECPGd_length"; + break; + case ECPGd_name: + return "ECPGd_name"; + break; + case ECPGd_nullable: + return "ECPGd_nullable"; + break; + case ECPGd_octet: + return "ECPGd_octet"; + break; + case ECPGd_precision: + return "ECPGd_precision"; + break; + case ECPGd_ret_length: + return "ECPGd_ret_length"; + case ECPGd_ret_octet: + return "ECPGd_ret_octet"; + break; + case ECPGd_scale: + return "ECPGd_scale"; + break; + case ECPGd_type: + return "ECPGd_type"; + break; + case ECPGd_cardinality: + return "ECPGd_cardinality"; + default: + mmerror(PARSE_ERROR, ET_ERROR, "unrecognized descriptor item code %d", type); + } + + return NULL; +} diff --git a/src/interfaces/ecpg/preproc/type.h b/src/interfaces/ecpg/preproc/type.h new file mode 100644 index 0000000..fb20be5 --- /dev/null +++ b/src/interfaces/ecpg/preproc/type.h @@ -0,0 +1,216 @@ +/* + * src/interfaces/ecpg/preproc/type.h + */ +#ifndef _ECPG_PREPROC_TYPE_H +#define _ECPG_PREPROC_TYPE_H + +#include "ecpgtype.h" + +struct ECPGtype; +struct ECPGstruct_member +{ + char *name; + struct ECPGtype *type; + struct ECPGstruct_member *next; +}; + +struct ECPGtype +{ + enum ECPGttype type; + char *type_name; /* For struct and union types it is the struct + * name */ + char *size; /* For array it is the number of elements. For + * varchar it is the maxsize of the area. */ + char *struct_sizeof; /* For a struct this is the sizeof() type as + * string */ + union + { + struct ECPGtype *element; /* For an array this is the type of the + * element */ + struct ECPGstruct_member *members; /* A pointer to a list of members. */ + } u; + int counter; +}; + +/* Everything is malloced. */ +void ECPGmake_struct_member(const char *, struct ECPGtype *, struct ECPGstruct_member **); +struct ECPGtype *ECPGmake_simple_type(enum ECPGttype, char *, int); +struct ECPGtype *ECPGmake_array_type(struct ECPGtype *, char *); +struct ECPGtype *ECPGmake_struct_type(struct ECPGstruct_member *, enum ECPGttype, char *, char *); +struct ECPGstruct_member *ECPGstruct_member_dup(struct ECPGstruct_member *); + +/* Frees a type. */ +void ECPGfree_struct_member(struct ECPGstruct_member *); +void ECPGfree_type(struct ECPGtype *); + +/* Dump a type. + The type is dumped as: + type-tag reference-to-variable arrsize size + Where: + type-tag is one of the simple types or varchar. + reference-to-variable can be a reference to a struct element. + arrsize is the size of the array in case of array fetches. Otherwise 0. + size is the maxsize in case it is a varchar. Otherwise it is the size of + the variable (required to do array fetches of structs). + */ +void ECPGdump_a_type(FILE *, const char *, struct ECPGtype *, const int, + const char *, struct ECPGtype *, const int, + const char *, const char *, char *, + const char *, const char *); + +/* A simple struct to keep a variable and its type. */ +struct ECPGtemp_type +{ + struct ECPGtype *type; + const char *name; +}; + +extern const char *ecpg_type_name(enum ECPGttype type); + +/* some stuff for whenever statements */ +enum WHEN_TYPE +{ + W_NOTHING, + W_CONTINUE, + W_BREAK, + W_SQLPRINT, + W_GOTO, + W_DO, + W_STOP +}; + +struct when +{ + enum WHEN_TYPE code; + char *command; + char *str; +}; + +struct index +{ + char *index1; + char *index2; + char *str; +}; + +struct su_symbol +{ + char *su; + char *symbol; +}; + +struct prep +{ + char *name; + char *stmt; + char *type; +}; + +struct exec +{ + char *name; + char *type; +}; + +struct this_type +{ + enum ECPGttype type_enum; + char *type_str; + char *type_dimension; + char *type_index; + char *type_sizeof; +}; + +struct _include_path +{ + char *path; + struct _include_path *next; +}; + +struct cursor +{ + char *name; + char *function; + char *command; + char *connection; + bool opened; + struct arguments *argsinsert; + struct arguments *argsinsert_oos; + struct arguments *argsresult; + struct arguments *argsresult_oos; + struct cursor *next; +}; + +struct declared_list +{ + char *name; + char *connection; + struct declared_list *next; +}; + +struct typedefs +{ + char *name; + struct this_type *type; + struct ECPGstruct_member *struct_member_list; + int brace_level; + struct typedefs *next; +}; + +struct _defines +{ + char *olddef; + char *newdef; + int pertinent; + void *used; + struct _defines *next; +}; + +/* This is a linked list of the variable names and types. */ +struct variable +{ + char *name; + struct ECPGtype *type; + int brace_level; + struct variable *next; +}; + +struct arguments +{ + struct variable *variable; + struct variable *indicator; + struct arguments *next; +}; + +struct descriptor +{ + char *name; + char *connection; + struct descriptor *next; +}; + +struct assignment +{ + char *variable; + enum ECPGdtype value; + struct assignment *next; +}; + +enum errortype +{ + ET_WARNING, ET_ERROR +}; + +struct fetch_desc +{ + char *str; + char *name; +}; + +struct describe +{ + int input; + char *stmt_name; +}; + +#endif /* _ECPG_PREPROC_TYPE_H */ diff --git a/src/interfaces/ecpg/preproc/variable.c b/src/interfaces/ecpg/preproc/variable.c new file mode 100644 index 0000000..887d479 --- /dev/null +++ b/src/interfaces/ecpg/preproc/variable.c @@ -0,0 +1,625 @@ +/* src/interfaces/ecpg/preproc/variable.c */ + +#include "postgres_fe.h" + +#include "preproc_extern.h" + +static struct variable *allvariables = NULL; + +struct variable * +new_variable(const char *name, struct ECPGtype *type, int brace_level) +{ + struct variable *p = (struct variable *) mm_alloc(sizeof(struct variable)); + + p->name = mm_strdup(name); + p->type = type; + p->brace_level = brace_level; + + p->next = allvariables; + allvariables = p; + + return p; +} + +static struct variable * +find_struct_member(char *name, char *str, struct ECPGstruct_member *members, int brace_level) +{ + char *next = strpbrk(++str, ".-["), + *end, + c = '\0'; + + if (next != NULL) + { + c = *next; + *next = '\0'; + } + + for (; members; members = members->next) + { + if (strcmp(members->name, str) == 0) + { + if (next == NULL) + { + /* found the end */ + switch (members->type->type) + { + case ECPGt_array: + return new_variable(name, ECPGmake_array_type(ECPGmake_simple_type(members->type->u.element->type, members->type->u.element->size, members->type->u.element->counter), members->type->size), brace_level); + case ECPGt_struct: + case ECPGt_union: + return new_variable(name, ECPGmake_struct_type(members->type->u.members, members->type->type, members->type->type_name, members->type->struct_sizeof), brace_level); + default: + return new_variable(name, ECPGmake_simple_type(members->type->type, members->type->size, members->type->counter), brace_level); + } + } + else + { + *next = c; + if (c == '[') + { + int count; + + /* + * We don't care about what's inside the array braces so + * just eat up the character + */ + for (count = 1, end = next + 1; count; end++) + { + switch (*end) + { + case '[': + count++; + break; + case ']': + count--; + break; + default: + break; + } + } + } + else + end = next; + + switch (*end) + { + case '\0': /* found the end, but this time it has to be + * an array element */ + if (members->type->type != ECPGt_array) + mmfatal(PARSE_ERROR, "incorrectly formed variable \"%s\"", name); + + switch (members->type->u.element->type) + { + case ECPGt_array: + return new_variable(name, ECPGmake_array_type(ECPGmake_simple_type(members->type->u.element->u.element->type, members->type->u.element->u.element->size, members->type->u.element->u.element->counter), members->type->u.element->size), brace_level); + case ECPGt_struct: + case ECPGt_union: + return new_variable(name, ECPGmake_struct_type(members->type->u.element->u.members, members->type->u.element->type, members->type->u.element->type_name, members->type->u.element->struct_sizeof), brace_level); + default: + return new_variable(name, ECPGmake_simple_type(members->type->u.element->type, members->type->u.element->size, members->type->u.element->counter), brace_level); + } + break; + case '-': + if (members->type->type == ECPGt_array) + return find_struct_member(name, ++end, members->type->u.element->u.members, brace_level); + else + return find_struct_member(name, ++end, members->type->u.members, brace_level); + break; + break; + case '.': + if (members->type->type == ECPGt_array) + return find_struct_member(name, end, members->type->u.element->u.members, brace_level); + else + return find_struct_member(name, end, members->type->u.members, brace_level); + break; + default: + mmfatal(PARSE_ERROR, "incorrectly formed variable \"%s\"", name); + break; + } + } + } + } + + return NULL; +} + +static struct variable * +find_struct(char *name, char *next, char *end) +{ + struct variable *p; + char c = *next; + + /* first get the mother structure entry */ + *next = '\0'; + p = find_variable(name); + + if (c == '-') + { + if (p->type->type != ECPGt_array) + mmfatal(PARSE_ERROR, "variable \"%s\" is not a pointer", name); + + if (p->type->u.element->type != ECPGt_struct && p->type->u.element->type != ECPGt_union) + mmfatal(PARSE_ERROR, "variable \"%s\" is not a pointer to a structure or a union", name); + + /* restore the name, we will need it later */ + *next = c; + + return find_struct_member(name, ++end, p->type->u.element->u.members, p->brace_level); + } + else + { + if (next == end) + { + if (p->type->type != ECPGt_struct && p->type->type != ECPGt_union) + mmfatal(PARSE_ERROR, "variable \"%s\" is neither a structure nor a union", name); + + /* restore the name, we will need it later */ + *next = c; + + return find_struct_member(name, end, p->type->u.members, p->brace_level); + } + else + { + if (p->type->type != ECPGt_array) + mmfatal(PARSE_ERROR, "variable \"%s\" is not an array", name); + + if (p->type->u.element->type != ECPGt_struct && p->type->u.element->type != ECPGt_union) + mmfatal(PARSE_ERROR, "variable \"%s\" is not a pointer to a structure or a union", name); + + /* restore the name, we will need it later */ + *next = c; + + return find_struct_member(name, end, p->type->u.element->u.members, p->brace_level); + } + } +} + +static struct variable * +find_simple(char *name) +{ + struct variable *p; + + for (p = allvariables; p; p = p->next) + { + if (strcmp(p->name, name) == 0) + return p; + } + + return NULL; +} + +/* Note that this function will end the program in case of an unknown */ +/* variable */ +struct variable * +find_variable(char *name) +{ + char *next, + *end; + struct variable *p; + int count; + + next = strpbrk(name, ".[-"); + if (next) + { + if (*next == '[') + { + /* + * We don't care about what's inside the array braces so just eat + * up the characters + */ + for (count = 1, end = next + 1; count; end++) + { + switch (*end) + { + case '[': + count++; + break; + case ']': + count--; + break; + default: + break; + } + } + if (*end == '.') + p = find_struct(name, next, end); + else + { + char c = *next; + + *next = '\0'; + p = find_simple(name); + if (p == NULL) + mmfatal(PARSE_ERROR, "variable \"%s\" is not declared", name); + + *next = c; + switch (p->type->u.element->type) + { + case ECPGt_array: + return new_variable(name, ECPGmake_array_type(ECPGmake_simple_type(p->type->u.element->u.element->type, p->type->u.element->u.element->size, p->type->u.element->u.element->counter), p->type->u.element->size), p->brace_level); + case ECPGt_struct: + case ECPGt_union: + return new_variable(name, ECPGmake_struct_type(p->type->u.element->u.members, p->type->u.element->type, p->type->u.element->type_name, p->type->u.element->struct_sizeof), p->brace_level); + default: + return new_variable(name, ECPGmake_simple_type(p->type->u.element->type, p->type->u.element->size, p->type->u.element->counter), p->brace_level); + } + } + } + else + p = find_struct(name, next, next); + } + else + p = find_simple(name); + + if (p == NULL) + mmfatal(PARSE_ERROR, "variable \"%s\" is not declared", name); + + return p; +} + +void +remove_typedefs(int brace_level) +{ + struct typedefs *p, + *prev; + + for (p = prev = types; p;) + { + if (p->brace_level >= brace_level) + { + /* remove it */ + if (p == types) + prev = types = p->next; + else + prev->next = p->next; + + if (p->type->type_enum == ECPGt_struct || p->type->type_enum == ECPGt_union) + free(p->struct_member_list); + free(p->type); + free(p->name); + free(p); + if (prev == types) + p = types; + else + p = prev ? prev->next : NULL; + } + else + { + prev = p; + p = prev->next; + } + } +} + +void +remove_variables(int brace_level) +{ + struct variable *p, + *prev; + + for (p = prev = allvariables; p;) + { + if (p->brace_level >= brace_level) + { + /* is it still referenced by a cursor? */ + struct cursor *ptr; + + for (ptr = cur; ptr != NULL; ptr = ptr->next) + { + struct arguments *varptr, + *prevvar; + + for (varptr = prevvar = ptr->argsinsert; varptr != NULL; varptr = varptr->next) + { + if (p == varptr->variable) + { + /* remove from list */ + if (varptr == ptr->argsinsert) + ptr->argsinsert = varptr->next; + else + prevvar->next = varptr->next; + } + } + for (varptr = prevvar = ptr->argsresult; varptr != NULL; varptr = varptr->next) + { + if (p == varptr->variable) + { + /* remove from list */ + if (varptr == ptr->argsresult) + ptr->argsresult = varptr->next; + else + prevvar->next = varptr->next; + } + } + } + + /* remove it */ + if (p == allvariables) + prev = allvariables = p->next; + else + prev->next = p->next; + + ECPGfree_type(p->type); + free(p->name); + free(p); + if (prev == allvariables) + p = allvariables; + else + p = prev ? prev->next : NULL; + } + else + { + prev = p; + p = prev->next; + } + } +} + + +/* + * Here are the variables that need to be handled on every request. + * These are of two kinds: input and output. + * I will make two lists for them. + */ + +struct arguments *argsinsert = NULL; +struct arguments *argsresult = NULL; + +void +reset_variables(void) +{ + argsinsert = NULL; + argsresult = NULL; +} + +/* Insert a new variable into our request list. + * Note: The list is dumped from the end, + * so we have to add new entries at the beginning */ +void +add_variable_to_head(struct arguments **list, struct variable *var, struct variable *ind) +{ + struct arguments *p = (struct arguments *) mm_alloc(sizeof(struct arguments)); + + p->variable = var; + p->indicator = ind; + p->next = *list; + *list = p; +} + +/* Append a new variable to our request list. */ +void +add_variable_to_tail(struct arguments **list, struct variable *var, struct variable *ind) +{ + struct arguments *p, + *new = (struct arguments *) mm_alloc(sizeof(struct arguments)); + + for (p = *list; p && p->next; p = p->next); + + new->variable = var; + new->indicator = ind; + new->next = NULL; + + if (p) + p->next = new; + else + *list = new; +} + +void +remove_variable_from_list(struct arguments **list, struct variable *var) +{ + struct arguments *p, + *prev = NULL; + bool found = false; + + for (p = *list; p; p = p->next) + { + if (p->variable == var) + { + found = true; + break; + } + prev = p; + } + if (found) + { + if (prev) + prev->next = p->next; + else + *list = p->next; + } +} + +/* Dump out a list of all the variable on this list. + This is a recursive function that works from the end of the list and + deletes the list as we go on. + */ +void +dump_variables(struct arguments *list, int mode) +{ + char *str_zero; + + if (list == NULL) + return; + + str_zero = mm_strdup("0"); + + /* + * The list is build up from the beginning so lets first dump the end of + * the list: + */ + + dump_variables(list->next, mode); + + /* Then the current element and its indicator */ + ECPGdump_a_type(base_yyout, list->variable->name, list->variable->type, list->variable->brace_level, + list->indicator->name, list->indicator->type, list->indicator->brace_level, + NULL, NULL, str_zero, NULL, NULL); + + /* Then release the list element. */ + if (mode != 0) + free(list); + + free(str_zero); +} + +void +check_indicator(struct ECPGtype *var) +{ + /* make sure this is a valid indicator variable */ + switch (var->type) + { + struct ECPGstruct_member *p; + + case ECPGt_short: + case ECPGt_int: + case ECPGt_long: + case ECPGt_long_long: + case ECPGt_unsigned_short: + case ECPGt_unsigned_int: + case ECPGt_unsigned_long: + case ECPGt_unsigned_long_long: + break; + + case ECPGt_struct: + case ECPGt_union: + for (p = var->u.members; p; p = p->next) + check_indicator(p->type); + break; + + case ECPGt_array: + check_indicator(var->u.element); + break; + default: + mmerror(PARSE_ERROR, ET_ERROR, "indicator variable must have an integer type"); + break; + } +} + +struct typedefs * +get_typedef(char *name) +{ + struct typedefs *this; + + for (this = types; this && strcmp(this->name, name) != 0; this = this->next); + if (!this) + mmfatal(PARSE_ERROR, "unrecognized data type name \"%s\"", name); + + return this; +} + +void +adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *type_dimension, char *type_index, int pointer_len, bool type_definition) +{ + if (atoi(type_index) >= 0) + { + if (atoi(*length) >= 0) + mmfatal(PARSE_ERROR, "multidimensional arrays are not supported"); + + *length = type_index; + } + + if (atoi(type_dimension) >= 0) + { + if (atoi(*dimension) >= 0 && atoi(*length) >= 0) + mmfatal(PARSE_ERROR, "multidimensional arrays are not supported"); + + if (atoi(*dimension) >= 0) + *length = *dimension; + + *dimension = type_dimension; + } + + if (pointer_len > 2) + mmfatal(PARSE_ERROR, ngettext("multilevel pointers (more than 2 levels) are not supported; found %d level", + "multilevel pointers (more than 2 levels) are not supported; found %d levels", pointer_len), + pointer_len); + + if (pointer_len > 1 && type_enum != ECPGt_char && type_enum != ECPGt_unsigned_char && type_enum != ECPGt_string) + mmfatal(PARSE_ERROR, "pointer to pointer is not supported for this data type"); + + if (pointer_len > 1 && (atoi(*length) >= 0 || atoi(*dimension) >= 0)) + mmfatal(PARSE_ERROR, "multidimensional arrays are not supported"); + + if (atoi(*length) >= 0 && atoi(*dimension) >= 0 && pointer_len) + mmfatal(PARSE_ERROR, "multidimensional arrays are not supported"); + + switch (type_enum) + { + case ECPGt_struct: + case ECPGt_union: + /* pointer has to get dimension 0 */ + if (pointer_len) + { + *length = *dimension; + *dimension = mm_strdup("0"); + } + + if (atoi(*length) >= 0) + mmfatal(PARSE_ERROR, "multidimensional arrays for structures are not supported"); + + break; + case ECPGt_varchar: + case ECPGt_bytea: + /* pointer has to get dimension 0 */ + if (pointer_len) + *dimension = mm_strdup("0"); + + /* one index is the string length */ + if (atoi(*length) < 0) + { + *length = *dimension; + *dimension = mm_strdup("-1"); + } + + break; + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_string: + /* char ** */ + if (pointer_len == 2) + { + *length = *dimension = mm_strdup("0"); + break; + } + + /* pointer has to get length 0 */ + if (pointer_len == 1) + *length = mm_strdup("0"); + + /* one index is the string length */ + if (atoi(*length) < 0) + { + /* + * make sure we return length = -1 for arrays without given + * bounds + */ + if (atoi(*dimension) < 0 && !type_definition) + + /* + * do not change this for typedefs since it will be + * changed later on when the variable is defined + */ + *length = mm_strdup("1"); + else if (strcmp(*dimension, "0") == 0) + *length = mm_strdup("-1"); + else + *length = *dimension; + + *dimension = mm_strdup("-1"); + } + break; + default: + /* a pointer has dimension = 0 */ + if (pointer_len) + { + *length = *dimension; + *dimension = mm_strdup("0"); + } + + if (atoi(*length) >= 0) + mmfatal(PARSE_ERROR, "multidimensional arrays for simple data types are not supported"); + + break; + } +} -- cgit v1.2.3